flbxcup/app/Http/Controllers/CompetitionController.php
2025-06-23 23:12:40 +02:00

119 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Competition;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
class CompetitionController extends Controller
{
public static function getPublicCompetitions(int $skip = 0, int $take = 10): JsonResponse
{
if ($skip < 0) {
$skip = 0;
}
if ($take < 1 || $take > 100) {
$take = 10;
}
$competitions = Competition::where('status', 'public')
->orderBy('start_date', 'desc')
->skip($skip)
->take($take)
->get();
$total = Competition::where('status', 'public')->count();
return response()->json([
'data' => $competitions,
'meta' => [
'skip' => $skip,
'take' => $take,
'total' => $total,
'hasMore' => ($skip + $take) < $total
]
]);
}
/**
* Get all public competitions/tournaments with pagination.
*
* @param Request $request
* @return JsonResponse
*/
public function getPublicCompetitions(Request $request): JsonResponse
{
$request->validate([
'skip' => 'integer|min:0',
'take' => 'integer|min:1|max:100',
]);
$skip = $request->input('skip', 0);
$take = $request->input('take', 10);
$competitions = Competition::where('status', 'public')
->orderBy('start_date', 'desc')
->skip($skip)
->take($take)
->get();
$total = Competition::where('status', 'public')->count();
return response()->json([
'data' => $competitions,
'meta' => [
'skip' => $skip,
'take' => $take,
'total' => $total,
'hasMore' => ($skip + $take) < $total
]
]);
}
/**
* Get competitions/tournaments for the authenticated user with pagination.
*
* @param Request $request
* @return JsonResponse
*/
public function getUserCompetitions(Request $request): JsonResponse
{
$request->validate([
'skip' => 'integer|min:0',
'take' => 'integer|min:1|max:100',
]);
$skip = $request->input('skip', 0);
$take = $request->input('take', 10);
$user = $request->user();
if (!$user) {
return response()->json(['error' => 'Unauthenticated'], 401);
}
$query = Competition::whereHas('teams', function ($query) use ($user) {
$query->whereHas('users', function ($query) use ($user) {
$query->where('users.id', $user->id);
});
});
$competitions = $query->orderBy('start_date', 'desc')
->skip($skip)
->take($take)
->get();
$total = $query->count();
return response()->json([
'data' => $competitions,
'meta' => [
'skip' => $skip,
'take' => $take,
'total' => $total,
'hasMore' => ($skip + $take) < $total
]
]);
}
}