Refactor discover accounts endpoint, cache popular accounts and remove following check as most invocations are from new accounts

This commit is contained in:
Daniel Supernault 2022-08-20 06:07:52 -06:00
parent 101676758e
commit 016b11f301
No known key found for this signature in database
GPG key ID: 0DEF1C662C9033F7

View file

@ -3028,24 +3028,26 @@ class ApiV1Controller extends Controller
abort_if(!$request->user(), 403); abort_if(!$request->user(), 403);
$pid = $request->user()->profile_id; $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) ->where('is_private', false)
->whereNull('status') ->whereNull('status')
->orderByDesc('profiles.followers_count') ->orderByDesc('profiles.followers_count')
->limit(20) ->limit(20)
->get(); ->get();
});
$ids = $ids->map(function($profile) { $ids = $ids->map(function($profile) {
return AccountService::getMastodon($profile->id); return AccountService::getMastodon($profile->id, true);
}) })
->filter(function($profile) use($pid) { ->filter(function($profile) use($pid) {
return $profile && return $profile && isset($profile['id']);
isset($profile['id']) && })
!FollowerService::follows($pid, $profile['id']) && ->filter(function($profile) use($pid) {
$profile['id'] != $pid; return $profile['id'] != $pid;
}) })
->take(6) ->take(6)
->values(); ->values();
return $this->json($ids); return $this->json($ids);
} }