user_id !== $request->user()->id) { return response()->json([ 'message' => 'Unauthorized', ], 403); } $perPage = $request->input('per_page', 50); $perPage = min($perPage, 100); // Max 100 per page $brokenLinks = $site->brokenLinks() ->orderBy('last_checked_at', 'desc') ->paginate($perPage); return response()->json($brokenLinks); } /** * Get broken links statistics for a site. */ public function stats(Request $request, Site $site): JsonResponse { // Ensure the site belongs to the authenticated user if ($site->user_id !== $request->user()->id) { return response()->json([ 'message' => 'Unauthorized', ], 403); } $totalBrokenLinks = $site->brokenLinks()->count(); $statusCodeBreakdown = $site->brokenLinks() ->selectRaw('status_code, COUNT(*) as count') ->groupBy('status_code') ->orderBy('count', 'desc') ->get(); return response()->json([ 'data' => [ 'total_broken_links' => $totalBrokenLinks, 'status_code_breakdown' => $statusCodeBreakdown, ], ]); } }