Implement academy analytics, billing, and web stories updates

This commit is contained in:
2026-05-26 07:27:29 +02:00
parent 456c3d6bb0
commit 0b33a1b074
177 changed files with 27360 additions and 2685 deletions

View File

@@ -11,11 +11,21 @@ use App\Services\ThumbnailPresenter;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
use Carbon\Carbon;
use Illuminate\Contracts\Pagination\Paginator;
class LatestCommentsApiController extends Controller
{
private const PER_PAGE = 20;
private function paginationMeta(Paginator $paginator): array
{
return [
'current_page' => $paginator->currentPage(),
'per_page' => $paginator->perPage(),
'has_more' => $paginator->hasMorePages(),
];
}
public function index(Request $request): JsonResponse
{
$type = $request->query('type', 'all');
@@ -66,15 +76,21 @@ class LatestCommentsApiController extends Controller
$cacheKey = 'comments.latest.all.page1';
$ttl = 120; // 2 minutes
$paginator = Cache::remember($cacheKey, $ttl, fn () => $query->paginate(self::PER_PAGE));
$paginator = Cache::remember($cacheKey, $ttl, fn () => $query
->orderByDesc('artwork_comments.id')
->simplePaginate(self::PER_PAGE));
} else {
$paginator = $query->paginate(self::PER_PAGE);
$paginator = $query
->orderByDesc('artwork_comments.id')
->simplePaginate(self::PER_PAGE);
}
break;
}
if (! isset($paginator)) {
$paginator = $query->paginate(self::PER_PAGE);
$paginator = $query
->orderByDesc('artwork_comments.id')
->simplePaginate(self::PER_PAGE);
}
$items = $paginator->getCollection()->map(function (ArtworkComment $c) {
@@ -113,13 +129,7 @@ class LatestCommentsApiController extends Controller
return response()->json([
'data' => $items,
'meta' => [
'current_page' => $paginator->currentPage(),
'last_page' => $paginator->lastPage(),
'per_page' => $paginator->perPage(),
'total' => $paginator->total(),
'has_more' => $paginator->hasMorePages(),
],
'meta' => $this->paginationMeta($paginator),
]);
}
}