diff --git a/app/Models/Api/Exhibition.php b/app/Models/Api/Exhibition.php index 4b6424a9..3c455cac 100644 --- a/app/Models/Api/Exhibition.php +++ b/app/Models/Api/Exhibition.php @@ -4,7 +4,6 @@ use App\Helpers\StringHelpers; use App\Libraries\Api\Models\BaseApiModel; -use App\Presenters\Admin\ExhibitionPresenter; class Exhibition extends BaseApiModel { diff --git a/app/Models/Transformers/ExhibitionTransformer.php b/app/Models/Transformers/ExhibitionTransformer.php new file mode 100644 index 00000000..6b1d4034 --- /dev/null +++ b/app/Models/Transformers/ExhibitionTransformer.php @@ -0,0 +1,19 @@ + $exhibition->title, + 'image_url' => $exhibition->image_url, + 'exhibition_id' => (string) $exhibition->id, + 'sort' => 0, // TODO: Implement with `HasPostion` trait on model + ]; + } +} diff --git a/app/Models/Transformers/GalleryTransformer.php b/app/Models/Transformers/GalleryTransformer.php new file mode 100644 index 00000000..5ccce910 --- /dev/null +++ b/app/Models/Transformers/GalleryTransformer.php @@ -0,0 +1,29 @@ +id => [ + 'title' => $gallery->title, + 'nid' => (string) $gallery->id, // Legacy from Drupal + 'location' => $gallery->latlon, + 'latitude' => $gallery->latitude, + 'longitude' => $gallery->longitude, + 'gallery_id' => (string) $gallery->id, + 'tgn_id' => null,// Legacy from Drupal + 'closed' => $gallery->is_closed, + 'number' => $gallery->number, + 'floor' => $gallery->floor, + 'source_updated_at' => $gallery->source_updated_at, + 'updated_at' => $gallery->updated_at, + ] + ]; + } +} diff --git a/app/Models/Transformers/ObjectTransformer.php b/app/Models/Transformers/ObjectTransformer.php new file mode 100644 index 00000000..957f2494 --- /dev/null +++ b/app/Models/Transformers/ObjectTransformer.php @@ -0,0 +1,32 @@ +id => [ + 'title' => $object->title, + 'nid' => (string) $object->id, // Legacy from Drupal + 'id' => $object->id, + 'artist_culture_place_delim' => $object->artist_display, + 'credit_line' => $object->credit_line, + 'catalogue_display' => $object->catalogue_display, + 'edition' => $object->edition, + 'fiscal_year_deaccession' => $object->fiscal_year_deaccession, + 'copyright_notice' => $object->copyright_notice, + 'on_loan_display' => $object->on_loan_display, + 'location' => $object->latlon, + 'image_url' => $object->image_url, + // TODO image-related items go here + 'gallery_location' => $object->gallery()?->title, + 'audio_commentary' => [], // TODO Tours and Audio files + ] + ]; + } +} diff --git a/app/Repositories/Serializers/AssociativeArraySerializer.php b/app/Repositories/Serializers/AssociativeArraySerializer.php new file mode 100644 index 00000000..47b37458 --- /dev/null +++ b/app/Repositories/Serializers/AssociativeArraySerializer.php @@ -0,0 +1,15 @@ + collect($data)->mapWithKeys(function (array $item, $index) { + return [$key = array_key_first($item) => $item[$key]]; + })]; + } +} diff --git a/app/Repositories/Serializers/ExhibitionSerializer.php b/app/Repositories/Serializers/ExhibitionSerializer.php new file mode 100644 index 00000000..816fa0a1 --- /dev/null +++ b/app/Repositories/Serializers/ExhibitionSerializer.php @@ -0,0 +1,26 @@ +manager = new Manager(); + $this->manager->setSerializer(new ArraySerializer()); + } + + public function serialize($exhibitions) + { + collect($exhibitions)->each->getAugmentedModel(); + $resource = new Resource\Collection($exhibitions, new ExhibitionTransformer(), 'exhibitions'); + return $this->manager->createData($resource)->toArray(); + } +} diff --git a/app/Repositories/Serializers/GallerySerializer.php b/app/Repositories/Serializers/GallerySerializer.php new file mode 100644 index 00000000..71939d5a --- /dev/null +++ b/app/Repositories/Serializers/GallerySerializer.php @@ -0,0 +1,25 @@ +manager = new Manager(); + $this->manager->setSerializer(new AssociativeArraySerializer()); + } + + public function serialize($galleries) + { + collect($galleries)->each->getAugmentedModel(); + $resource = new Resource\Collection($galleries, new GalleryTransformer(), 'galleries'); + return $this->manager->createData($resource)->toArray(); + } +} diff --git a/app/Repositories/Serializers/ObjectSerializer.php b/app/Repositories/Serializers/ObjectSerializer.php new file mode 100644 index 00000000..922dfa69 --- /dev/null +++ b/app/Repositories/Serializers/ObjectSerializer.php @@ -0,0 +1,24 @@ +manager = new Manager(); + $this->manager->setSerializer(new AssociativeArraySerializer()); + } + + public function serialize($objects) + { + $resource = new Resource\Collection($objects, new ObjectTransformer(), 'objects'); + return $this->manager->createData($resource)->toArray(); + } +} diff --git a/routes/api.php b/routes/api.php index 889937e1..aebe926d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,7 +1,14 @@ get('/user', function (Request $request) { return $request->user(); }); + +Route::get('/exhibitions', function () { + $repository = App::make(ExhibitionRepository::class); + $exhibitions = $repository->getBaseModel()->newQuery()->startedFeaturedAndNotClosed()->get(); + $serializer = new ExhibitionSerializer(); + return $serializer->serialize($exhibitions); +}); + +Route::get('/galleries', function () { + $repository = App::make(GalleryRepository::class); + $galleries = $repository->getBaseModel()->newQuery()->get(); + $serializer = new GallerySerializer(); + return $serializer->serialize($galleries); +}); + +Route::get('/objects', function () { + $repository = App::make(ArtworkRepository::class); + $objects = $repository->getBaseModel()->newQuery()->get(); + $serializer = new ObjectSerializer(); + return $serializer->serialize($objects); +});