response()->json([ 'success' => true, 'message' => 'Crewli API v1', 'timestamp' => now()->toIso8601String(), ])); // Public auth routes Route::post('auth/login', LoginController::class); // Public invitation routes (no auth required) Route::get('invitations/{token}', [InvitationController::class, 'show']); Route::post('invitations/{token}/accept', [InvitationController::class, 'accept']); // Protected routes Route::middleware('auth:sanctum')->group(function () { // Auth Route::get('auth/me', MeController::class); Route::post('auth/logout', LogoutController::class); // Organisations Route::apiResource('organisations', OrganisationController::class) ->only(['index', 'show', 'store', 'update']); // Events (nested under organisations) Route::apiResource('organisations.events', EventController::class) ->only(['index', 'show', 'store', 'update']); // Organisation-scoped resources Route::prefix('organisations/{organisation}')->group(function () { Route::apiResource('crowd-types', CrowdTypeController::class) ->except(['show']); Route::apiResource('companies', CompanyController::class) ->except(['show']); // Invitations & Members Route::post('invite', [InvitationController::class, 'invite']); Route::delete('invitations/{invitation}', [InvitationController::class, 'revoke']); Route::get('members', [MemberController::class, 'index']); Route::put('members/{user}', [MemberController::class, 'update']); Route::delete('members/{user}', [MemberController::class, 'destroy']); }); // Event-scoped resources Route::prefix('events/{event}')->group(function () { Route::apiResource('locations', LocationController::class) ->except(['show']); Route::apiResource('sections', FestivalSectionController::class) ->except(['show']); Route::post('sections/reorder', [FestivalSectionController::class, 'reorder']); Route::apiResource('time-slots', TimeSlotController::class) ->except(['show']); // Shifts nested under sections Route::prefix('sections/{section}')->group(function () { Route::apiResource('shifts', ShiftController::class) ->except(['show']); Route::post('shifts/{shift}/assign', [ShiftController::class, 'assign']); Route::post('shifts/{shift}/claim', [ShiftController::class, 'claim']); }); Route::apiResource('persons', PersonController::class); Route::post('persons/{person}/approve', [PersonController::class, 'approve']); Route::apiResource('crowd-lists', CrowdListController::class) ->except(['show']); Route::post('crowd-lists/{crowdList}/persons', [CrowdListController::class, 'addPerson']); Route::delete('crowd-lists/{crowdList}/persons/{person}', [CrowdListController::class, 'removePerson']); }); });