From 101676758e76013afddb21f5fd92cbff78065c34 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Thu, 18 Aug 2022 03:48:40 -0600 Subject: [PATCH 1/4] Update api routes --- app/Http/Controllers/ComposeController.php | 2 +- routes/api.php | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/ComposeController.php b/app/Http/Controllers/ComposeController.php index 4ce4ed03..7bb43e32 100644 --- a/app/Http/Controllers/ComposeController.php +++ b/app/Http/Controllers/ComposeController.php @@ -311,7 +311,7 @@ class ComposeController extends Controller public function searchLocation(Request $request) { - abort_if(!Auth::check(), 403); + abort_if(!$request->user(), 403); $this->validate($request, [ 'q' => 'required|string|max:100' ]); diff --git a/routes/api.php b/routes/api.php index f3d0db24..8e724578 100644 --- a/routes/api.php +++ b/routes/api.php @@ -105,6 +105,10 @@ Route::group(['prefix' => 'api'], function() use($middleware) { Route::group(['prefix' => 'stories'], function () use($middleware) { Route::get('recent', 'StoryController@recent')->middleware($middleware); }); + + Route::group(['prefix' => 'compose/v0'], function () use($middleware) { + Route::get('/search/location', 'ComposeController@searchLocation')->middleware($middleware); + }); }); Route::group(['prefix' => 'live'], function() use($middleware) { From 016b11f301ac5a9c1adaf5ab93b46931307251e6 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Sat, 20 Aug 2022 06:07:52 -0600 Subject: [PATCH 2/4] Refactor discover accounts endpoint, cache popular accounts and remove following check as most invocations are from new accounts --- app/Http/Controllers/Api/ApiV1Controller.php | 24 +++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/app/Http/Controllers/Api/ApiV1Controller.php b/app/Http/Controllers/Api/ApiV1Controller.php index 276b1fb2..0d389ece 100644 --- a/app/Http/Controllers/Api/ApiV1Controller.php +++ b/app/Http/Controllers/Api/ApiV1Controller.php @@ -3028,24 +3028,26 @@ class ApiV1Controller extends Controller abort_if(!$request->user(), 403); $pid = $request->user()->profile_id; - $ids = DB::table('profiles') + $ids = Cache::remember('api:v1.1:discover:accounts:popular', 86400, function() { + return DB::table('profiles') ->where('is_private', false) ->whereNull('status') ->orderByDesc('profiles.followers_count') ->limit(20) ->get(); + }); $ids = $ids->map(function($profile) { - return AccountService::getMastodon($profile->id); - }) - ->filter(function($profile) use($pid) { - return $profile && - isset($profile['id']) && - !FollowerService::follows($pid, $profile['id']) && - $profile['id'] != $pid; - }) - ->take(6) - ->values(); + return AccountService::getMastodon($profile->id, true); + }) + ->filter(function($profile) use($pid) { + return $profile && isset($profile['id']); + }) + ->filter(function($profile) use($pid) { + return $profile['id'] != $pid; + }) + ->take(6) + ->values(); return $this->json($ids); } From a1083511f092529e1496204c14dfdd6a2dc74317 Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Tue, 23 Aug 2022 21:49:05 -0600 Subject: [PATCH 3/4] Update api routes --- routes/api.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/routes/api.php b/routes/api.php index 8e724578..ea179f1b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -109,6 +109,10 @@ Route::group(['prefix' => 'api'], function() use($middleware) { Route::group(['prefix' => 'compose/v0'], function () use($middleware) { Route::get('/search/location', 'ComposeController@searchLocation')->middleware($middleware); }); + + Route::group(['prefix' => 'discover'], function () use($middleware) { + Route::get('accounts/popular', 'Api\ApiV1Controller@discoverAccountsPopular')->middleware($middleware); + }); }); Route::group(['prefix' => 'live'], function() use($middleware) { From 243fcac7d539fe7649bf52db3181a68e1a6289bf Mon Sep 17 00:00:00 2001 From: Daniel Supernault Date: Tue, 23 Aug 2022 22:34:22 -0600 Subject: [PATCH 4/4] Update Discover apis --- app/Http/Controllers/DiscoverController.php | 36 ++++++++++++--------- routes/api.php | 2 ++ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/DiscoverController.php b/app/Http/Controllers/DiscoverController.php index a231f86d..4fa370be 100644 --- a/app/Http/Controllers/DiscoverController.php +++ b/app/Http/Controllers/DiscoverController.php @@ -123,7 +123,7 @@ class DiscoverController extends Controller public function trendingApi(Request $request) { - abort_if(config('instance.discover.public') == false && !Auth::check(), 403); + abort_if(config('instance.discover.public') == false && !$request->user(), 403); $this->validate($request, [ 'range' => 'nullable|string|in:daily,monthly,yearly', @@ -179,21 +179,25 @@ class DiscoverController extends Controller public function trendingHashtags(Request $request) { - $res = StatusHashtag::select('hashtag_id', \DB::raw('count(*) as total')) - ->groupBy('hashtag_id') - ->orderBy('total','desc') - ->where('created_at', '>', now()->subDays(90)) - ->take(9) - ->get() - ->map(function($h) { - $hashtag = $h->hashtag; - return [ - 'id' => $hashtag->id, - 'total' => $h->total, - 'name' => '#'.$hashtag->name, - 'url' => $hashtag->url('?src=dsh1') - ]; - }); + abort_if(!$request->user(), 403); + + $res = Cache::remember('api:discover:v1.1:trending:hashtags', 3600, function() { + return StatusHashtag::select('hashtag_id', \DB::raw('count(*) as total')) + ->groupBy('hashtag_id') + ->orderBy('total','desc') + ->where('created_at', '>', now()->subDays(90)) + ->take(9) + ->get() + ->map(function($h) { + $hashtag = $h->hashtag; + return [ + 'id' => $hashtag->id, + 'total' => $h->total, + 'name' => '#'.$hashtag->name, + 'url' => $hashtag->url() + ]; + }); + }); return $res; } diff --git a/routes/api.php b/routes/api.php index ea179f1b..20c98c17 100644 --- a/routes/api.php +++ b/routes/api.php @@ -112,6 +112,8 @@ Route::group(['prefix' => 'api'], function() use($middleware) { Route::group(['prefix' => 'discover'], function () use($middleware) { Route::get('accounts/popular', 'Api\ApiV1Controller@discoverAccountsPopular')->middleware($middleware); + Route::get('posts/trending', 'DiscoverController@trendingApi')->middleware($middleware); + Route::get('posts/hashtags', 'DiscoverController@trendingHashtags')->middleware($middleware); }); });