Merge pull request #4999 from pixelfed/staging

Update web-api popular accounts route to its own method to remove the…
This commit is contained in:
daniel 2024-03-09 23:27:14 -07:00 committed by GitHub
commit 3132523798
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 49 additions and 2 deletions

View file

@ -4066,7 +4066,7 @@ class ApiV1Controller extends Controller
$pid = $request->user()->profile_id; $pid = $request->user()->profile_id;
$ids = Cache::remember('api:v1.1:discover:accounts:popular', 3600, function () { $ids = Cache::remember('api:v1.1:discover:accounts:popular', 14400, function () {
return DB::table('profiles') return DB::table('profiles')
->where('is_private', false) ->where('is_private', false)
->whereNull('status') ->whereNull('status')
@ -4075,6 +4075,7 @@ class ApiV1Controller extends Controller
->get(); ->get();
}); });
$filters = UserFilterService::filters($pid); $filters = UserFilterService::filters($pid);
$asf = AdminShadowFilterService::getHideFromPublicFeedsList();
$ids = $ids->map(function ($profile) { $ids = $ids->map(function ($profile) {
return AccountService::get($profile->id, true); return AccountService::get($profile->id, true);
}) })
@ -4087,6 +4088,9 @@ class ApiV1Controller extends Controller
->filter(function ($profile) use ($pid) { ->filter(function ($profile) use ($pid) {
return ! FollowerService::follows($pid, $profile['id'], true); return ! FollowerService::follows($pid, $profile['id'], true);
}) })
->filter(function ($profile) use ($asf) {
return ! in_array($profile['id'], $asf);
})
->filter(function ($profile) use ($filters) { ->filter(function ($profile) use ($filters) {
return ! in_array($profile['id'], $filters); return ! in_array($profile['id'], $filters);
}) })

View file

@ -5,8 +5,11 @@ namespace App\Http\Controllers;
use App\Hashtag; use App\Hashtag;
use App\Instance; use App\Instance;
use App\Like; use App\Like;
use App\Services\AccountService;
use App\Services\AdminShadowFilterService;
use App\Services\BookmarkService; use App\Services\BookmarkService;
use App\Services\ConfigCacheService; use App\Services\ConfigCacheService;
use App\Services\FollowerService;
use App\Services\HashtagService; use App\Services\HashtagService;
use App\Services\LikeService; use App\Services\LikeService;
use App\Services\ReblogService; use App\Services\ReblogService;
@ -377,4 +380,44 @@ class DiscoverController extends Controller
return $res; return $res;
} }
public function discoverAccountsPopular(Request $request)
{
abort_if(! $request->user(), 403);
$pid = $request->user()->profile_id;
$ids = Cache::remember('api:v1.1:discover:accounts:popular', 14400, function () {
return DB::table('profiles')
->where('is_private', false)
->whereNull('status')
->orderByDesc('profiles.followers_count')
->limit(30)
->get();
});
$filters = UserFilterService::filters($pid);
$asf = AdminShadowFilterService::getHideFromPublicFeedsList();
$ids = $ids->map(function ($profile) {
return AccountService::get($profile->id, true);
})
->filter(function ($profile) {
return $profile && isset($profile['id'], $profile['locked']) && ! $profile['locked'];
})
->filter(function ($profile) use ($pid) {
return $profile['id'] != $pid;
})
->filter(function ($profile) use ($pid) {
return ! FollowerService::follows($pid, $profile['id'], true);
})
->filter(function ($profile) use ($asf) {
return ! in_array($profile['id'], $asf);
})
->filter(function ($profile) use ($filters) {
return ! in_array($profile['id'], $filters);
})
->take(16)
->values();
return response()->json($ids, 200, [], JSON_UNESCAPED_SLASHES);
}
} }

View file

@ -115,7 +115,7 @@ Route::domain(config('pixelfed.domain.app'))->middleware(['validemail', 'twofact
Route::post('discover/admin/features', 'DiscoverController@updateFeatures'); Route::post('discover/admin/features', 'DiscoverController@updateFeatures');
}); });
Route::get('discover/accounts/popular', 'Api\ApiV1Controller@discoverAccountsPopular'); Route::get('discover/accounts/popular', 'DiscoverController@discoverAccountsPopular');
Route::post('web/change-language.json', 'SpaController@updateLanguage'); Route::post('web/change-language.json', 'SpaController@updateLanguage');
}); });