Defer profile favourites until needed
This commit is contained in:
@@ -10,6 +10,7 @@ use App\Models\User;
|
||||
use Carbon\CarbonInterface;
|
||||
use App\Services\ThumbnailPresenter;
|
||||
use App\Support\UsernamePolicy;
|
||||
use App\Services\Maturity\ArtworkMaturityService;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -106,7 +107,7 @@ final class ProfileApiController extends Controller
|
||||
return response()->json(['error' => 'User not found'], 404);
|
||||
}
|
||||
|
||||
$perPage = 24;
|
||||
$perPage = 12;
|
||||
$offset = max(0, (int) base64_decode((string) $request->input('cursor', ''), true));
|
||||
|
||||
$favIds = DB::table($favouriteTable . ' as af')
|
||||
@@ -116,6 +117,10 @@ final class ProfileApiController extends Controller
|
||||
->where('a.is_public', true)
|
||||
->where('a.is_approved', true)
|
||||
->whereNotNull('a.published_at')
|
||||
->when(app(ArtworkMaturityService::class)->viewerPreferences($request->user())['visibility'] === ArtworkMaturityService::VIEW_HIDE, function ($query): void {
|
||||
$query->whereRaw('COALESCE(a.is_mature, 0) = 0')
|
||||
->whereRaw("COALESCE(a.maturity_status, 'clear') != ?", [ArtworkMaturityService::STATUS_SUSPECTED]);
|
||||
})
|
||||
->orderByDesc('af.created_at')
|
||||
->orderByDesc('af.artwork_id')
|
||||
->offset($offset)
|
||||
@@ -246,6 +251,8 @@ final class ProfileApiController extends Controller
|
||||
return [
|
||||
'id' => $art->id,
|
||||
'name' => $art->title,
|
||||
'picture' => $art->file_name,
|
||||
'datum' => $this->formatIsoDate($art->published_at),
|
||||
'thumb' => $present['url'],
|
||||
'thumb_srcset' => $present['srcset'] ?? $present['url'],
|
||||
'width' => $art->width,
|
||||
|
||||
@@ -1011,14 +1011,17 @@ class ProfileController extends Controller
|
||||
? $this->loadFeaturedArtworks($user, $viewer)
|
||||
: null;
|
||||
|
||||
// ── Favourites ───────────────────────────────────────────────────────
|
||||
$favouriteLimit = 12;
|
||||
$favouriteTable = $this->resolveFavouriteTable();
|
||||
$favourites = [
|
||||
'data' => [],
|
||||
'next_cursor' => null,
|
||||
];
|
||||
if ($favouriteTable !== null) {
|
||||
// ── Favourites (only needed for the direct Favourites tab) ───────────
|
||||
$favourites = null;
|
||||
if ($initialTab === 'favourites') {
|
||||
$favouriteLimit = 12;
|
||||
$favouriteTable = $this->resolveFavouriteTable();
|
||||
$favourites = [
|
||||
'data' => [],
|
||||
'next_cursor' => null,
|
||||
];
|
||||
}
|
||||
if ($favourites !== null && $favouriteTable !== null) {
|
||||
$favIds = DB::table($favouriteTable . ' as af')
|
||||
->join('artworks as a', 'a.id', '=', 'af.artwork_id')
|
||||
->where('af.user_id', $user->id)
|
||||
|
||||
Reference in New Issue
Block a user