From 0db82ff2dde0cf6038367b021b9683460a8f16d7 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Fri, 28 Jan 2022 20:29:46 -0700 Subject: [PATCH] Update PublicApiController --- app/Http/Controllers/PublicApiController.php | 43 +++++++++++++++----- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/app/Http/Controllers/PublicApiController.php b/app/Http/Controllers/PublicApiController.php index 885300d9b..245c78004 100644 --- a/app/Http/Controllers/PublicApiController.php +++ b/app/Http/Controllers/PublicApiController.php @@ -486,7 +486,7 @@ class PublicApiController extends Controller if($min || $max) { $dir = $min ? '>' : '<'; $id = $min ?? $max; - $timeline = Status::select( + return Status::select( 'id', 'uri', 'caption', @@ -513,13 +513,26 @@ class PublicApiController extends Controller ->with('profile', 'hashtags', 'mentions') ->where('id', $dir, $id) ->whereIn('profile_id', $following) - ->whereNotIn('profile_id', $filtered) ->whereIn('visibility',['public', 'unlisted', 'private']) ->orderBy('created_at', 'desc') ->limit($limit) - ->get(); + ->get() + ->map(function($s) use ($user) { + $status = StatusService::get($s->id); + if(!$status) { + return false; + } + $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); + $status['bookmarked'] = (bool) BookmarkService::get($user->profile_id, $s->id); + return $status; + }) + ->filter(function($s) use($filtered) { + return $s && in_array($s['account']['id'], $filtered) == false; + }) + ->values() + ->toArray(); } else { - $timeline = Status::select( + return Status::select( 'id', 'uri', 'caption', @@ -545,15 +558,25 @@ class PublicApiController extends Controller }) ->with('profile', 'hashtags', 'mentions') ->whereIn('profile_id', $following) - ->whereNotIn('profile_id', $filtered) ->whereIn('visibility',['public', 'unlisted', 'private']) ->orderBy('created_at', 'desc') - ->simplePaginate($limit); + ->limit($limit) + ->get() + ->map(function($s) use ($user) { + $status = StatusService::get($s->id); + if(!$status) { + return false; + } + $status['favourited'] = (bool) LikeService::liked($user->profile_id, $s->id); + $status['bookmarked'] = (bool) BookmarkService::get($user->profile_id, $s->id); + return $status; + }) + ->filter(function($s) use($filtered) { + return $s && in_array($s['account']['id'], $filtered) == false; + }) + ->values() + ->toArray(); } - - $fractal = new Fractal\Resource\Collection($timeline, new StatusTransformer()); - $res = $this->fractal->createData($fractal)->toArray(); - return response()->json($res); } public function networkTimelineApi(Request $request)