From 9ab9ffbafecd6a38b5064795f3a26b669a90a39d Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 27 Jan 2023 20:52:12 -0700 Subject: [PATCH] Add places api endpoints --- .../Controllers/Api/ApiV1Dot1Controller.php | 32 +++++++++++++++++++ app/Http/Controllers/PlaceController.php | 4 +++ routes/api.php | 4 +++ 3 files changed, 40 insertions(+) diff --git a/app/Http/Controllers/Api/ApiV1Dot1Controller.php b/app/Http/Controllers/Api/ApiV1Dot1Controller.php index 5de1bc54f..43364312b 100644 --- a/app/Http/Controllers/Api/ApiV1Dot1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Dot1Controller.php @@ -11,6 +11,7 @@ use League\Fractal\Serializer\ArraySerializer; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use App\AccountLog; use App\EmailVerification; +use App\Place; use App\Status; use App\Report; use App\Profile; @@ -633,4 +634,35 @@ class ApiV1Dot1Controller extends Controller return StatusStateless::collection($statuses); } + + public function placesById(Request $request, $id, $slug) + { + abort_if(!$request->user(), 403); + + $place = Place::whereSlug($slug)->findOrFail($id); + + $posts = Cache::remember('pf-api:v1.1:places-by-id:' . $place->id, 3600, function() use($place) { + return Status::wherePlaceId($place->id) + ->whereNull('uri') + ->whereScope('public') + ->orderByDesc('created_at') + ->limit(60) + ->pluck('id'); + }); + + $posts = $posts->map(function($id) { + return StatusService::get($id); + }) + ->filter() + ->values(); + + return ['place' => [ + 'id' => $place->id, + 'name' => $place->name, + 'slug' => $place->slug, + 'country' => $place->country, + 'lat' => $place->lat, + 'long' => $place->long + ], 'posts' => $posts]; + } } diff --git a/app/Http/Controllers/PlaceController.php b/app/Http/Controllers/PlaceController.php index 8bbf456b0..6b7760fdc 100644 --- a/app/Http/Controllers/PlaceController.php +++ b/app/Http/Controllers/PlaceController.php @@ -17,6 +17,10 @@ class PlaceController extends Controller public function show(Request $request, $id, $slug) { + $this->validate($request, [ + 'page' => 'sometimes|max:10' + ]); + $place = Place::whereSlug($slug)->findOrFail($id); $posts = Status::wherePlaceId($place->id) ->whereNull('uri') diff --git a/routes/api.php b/routes/api.php index 1ae507a8c..652440de3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -137,6 +137,10 @@ Route::group(['prefix' => 'api'], function() use($middleware) { Route::get('list', 'Api\ApiV1Dot1Controller@archivedPosts')->middleware($middleware); }); + Route::group(['prefix' => 'places'], function () use($middleware) { + Route::get('posts/{id}/{slug}', 'Api\ApiV1Dot1Controller@placesById')->middleware($middleware); + }); + Route::group(['prefix' => 'stories'], function () use($middleware) { Route::get('recent', 'StoryController@recent')->middleware($middleware); });