Files
ladill-frontdesk/routes/web.php
T
isaaccladandCursor 8e45bc1cfb
Deploy Ladill Frontdesk / deploy (push) Successful in 33s
Fix watchlist 500 by importing WatchlistController in routes.
Routes referenced WatchlistController without a use statement, so Laravel could not resolve the class.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 21:04:00 +00:00

199 lines
16 KiB
PHP

<?php
use App\Http\Controllers\Auth\SsoLoginController;
use App\Http\Controllers\Frontdesk\AiController;
use App\Http\Controllers\Frontdesk\AuditLogController;
use App\Http\Controllers\Frontdesk\BadgeController;
use App\Http\Controllers\Frontdesk\BranchController;
use App\Http\Controllers\Frontdesk\BuildingController;
use App\Http\Controllers\Frontdesk\ComplianceController;
use App\Http\Controllers\Frontdesk\DashboardController;
use App\Http\Controllers\Frontdesk\DeviceController;
use App\Http\Controllers\Frontdesk\EmployeeController;
use App\Http\Controllers\Frontdesk\EmployeePortalController;
use App\Http\Controllers\Frontdesk\HostController;
use App\Http\Controllers\Frontdesk\HostPortalController;
use App\Http\Controllers\Frontdesk\IntegrationController;
use App\Http\Controllers\Frontdesk\KioskController;
use App\Http\Controllers\Frontdesk\KioskDeviceController;
use App\Http\Controllers\Frontdesk\MemberController;
use App\Http\Controllers\Frontdesk\OnboardingController;
use App\Http\Controllers\Frontdesk\ProController;
use App\Http\Controllers\Frontdesk\QrScanController;
use App\Http\Controllers\Frontdesk\ReceptionDeskController;
use App\Http\Controllers\Frontdesk\ReportController;
use App\Http\Controllers\Frontdesk\SecurityController;
use App\Http\Controllers\Frontdesk\SettingsController;
use App\Http\Controllers\Frontdesk\VisitController;
use App\Http\Controllers\Frontdesk\VisitorController;
use App\Http\Controllers\Frontdesk\WatchlistController;
use App\Http\Controllers\Frontdesk\WalletController;
use App\Http\Controllers\IcalFeedController;
use App\Http\Controllers\NotificationController;
use Illuminate\Support\Facades\Route;
Route::get('/', fn () => auth()->check()
? redirect()->route('frontdesk.dashboard')
: redirect()->route('sso.connect'))->name('frontdesk.root');
Route::get('/login', [SsoLoginController::class, 'connect'])->name('login');
Route::get('/sso/connect', [SsoLoginController::class, 'connect'])->name('sso.connect');
Route::get('/sso/callback', [SsoLoginController::class, 'callback'])->name('sso.callback');
Route::get('/sso/error', [SsoLoginController::class, 'failed'])->name('sso.failed');
Route::post('/logout', [SsoLoginController::class, 'logout'])->name('logout');
Route::get('/sso/logout-bridge', [SsoLoginController::class, 'logoutBridge'])->name('sso.logout-bridge');
Route::get('/sso/logout-frontchannel', [SsoLoginController::class, 'frontchannelLogout'])->name('sso.logout-frontchannel');
Route::get('/sso/platform-signed-out', [SsoLoginController::class, 'platformSignedOut'])->name('sso.platform-signed-out');
Route::get('/signed-out', fn () => auth()->check() ? redirect()->route('frontdesk.dashboard') : view('auth.signed-out'))->name('frontdesk.signed-out');
Route::get('/q/{token}', [QrScanController::class, 'show'])->middleware('throttle:qr-scan')->name('frontdesk.qr.show');
Route::post('/q/{token}/checkout', [QrScanController::class, 'checkOut'])->middleware('throttle:qr-scan')->name('frontdesk.qr.checkout');
Route::get('/integrations/ical/{organization}', IcalFeedController::class)->name('frontdesk.integrations.ical');
Route::middleware(['frontdesk.device:kiosk', 'throttle:kiosk-device'])->prefix('kiosk/d')->group(function () {
Route::get('/{token}', [KioskDeviceController::class, 'show'])->name('frontdesk.kiosk.device');
Route::post('/{token}/check-in', [KioskDeviceController::class, 'checkIn'])->name('frontdesk.kiosk.device.check-in');
Route::post('/{token}/check-out', [KioskDeviceController::class, 'checkOut'])->name('frontdesk.kiosk.device.check-out');
Route::post('/{token}/staff/action', [KioskDeviceController::class, 'staffAction'])->name('frontdesk.kiosk.device.staff.action');
});
Route::middleware(['auth', 'platform.session'])->group(function () {
Route::get('/onboarding', [OnboardingController::class, 'show'])->name('frontdesk.onboarding.show');
Route::post('/onboarding', [OnboardingController::class, 'store'])->name('frontdesk.onboarding.store');
Route::middleware(['frontdesk.setup'])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index'])->name('frontdesk.dashboard');
Route::post('/ai/chat', [AiController::class, 'chat'])->middleware('throttle:30,1')->name('frontdesk.ai.chat');
Route::get('/notifications', [NotificationController::class, 'index'])->name('notifications.index');
Route::get('/notifications/unread', [NotificationController::class, 'unread'])->name('notifications.unread');
Route::post('/notifications/{id}/read', [NotificationController::class, 'markAsRead'])->name('notifications.mark-read');
Route::post('/notifications/mark-all-read', [NotificationController::class, 'markAllAsRead'])->name('notifications.mark-all-read');
Route::get('/visits', [VisitController::class, 'index'])->name('frontdesk.visits.index');
Route::get('/visits/calendar', [VisitController::class, 'calendar'])->name('frontdesk.visits.calendar');
Route::get('/visits/create', [VisitController::class, 'create'])->name('frontdesk.visits.create');
Route::post('/visits', [VisitController::class, 'store'])->name('frontdesk.visits.store');
Route::get('/visits/schedule', [VisitController::class, 'scheduleForm'])->name('frontdesk.visits.schedule');
Route::post('/visits/schedule', [VisitController::class, 'scheduleStore'])->name('frontdesk.visits.schedule.store');
Route::get('/visits/{visit}', [VisitController::class, 'show'])->name('frontdesk.visits.show');
Route::post('/visits/{visit}/activate', [VisitController::class, 'activate'])->name('frontdesk.visits.activate');
Route::post('/visits/{visit}/approve', [VisitController::class, 'approve'])->name('frontdesk.visits.approve');
Route::post('/visits/{visit}/waiting', [VisitController::class, 'markWaiting'])->name('frontdesk.visits.waiting');
Route::post('/visits/{visit}/cancel', [VisitController::class, 'cancel'])->name('frontdesk.visits.cancel');
Route::post('/visits/{visit}/checkout', [VisitController::class, 'checkOut'])->name('frontdesk.visits.checkout');
Route::get('/visits/{visit}/badge', [BadgeController::class, 'print'])->name('frontdesk.visits.badge');
Route::get('/visits/{visit}/badge/preview', [BadgeController::class, 'preview'])->name('frontdesk.visits.badge.preview');
Route::get('/settings/badge-template', [BadgeController::class, 'editTemplate'])->name('frontdesk.settings.badge');
Route::put('/settings/badge-template', [BadgeController::class, 'updateTemplate'])->name('frontdesk.settings.badge.update');
Route::get('/reports', [ReportController::class, 'index'])->name('frontdesk.reports.index');
Route::get('/reports/export', [ReportController::class, 'export'])->name('frontdesk.reports.export');
Route::get('/integrations', [IntegrationController::class, 'edit'])->name('frontdesk.integrations.edit');
Route::put('/integrations', [IntegrationController::class, 'update'])->name('frontdesk.integrations.update');
Route::delete('/visits/{visit}', [ComplianceController::class, 'destroyVisit'])->name('frontdesk.visits.destroy');
Route::get('/visitors', [VisitorController::class, 'index'])->name('frontdesk.visitors.index');
Route::get('/visitors/{visitor}', [VisitorController::class, 'show'])->name('frontdesk.visitors.show');
Route::delete('/visitors/{visitor}', [ComplianceController::class, 'destroyVisitor'])->name('frontdesk.visitors.destroy');
Route::get('/visitors/{visitor}/check-in', [VisitorController::class, 'checkInForm'])->name('frontdesk.visitors.check-in');
Route::post('/visitors/{visitor}/check-in', [VisitorController::class, 'checkIn'])->name('frontdesk.visitors.check-in.store');
Route::patch('/visitors/{visitor}', [VisitorController::class, 'update'])->name('frontdesk.visitors.update');
Route::patch('/visitors/{visitor}/watchlist', [VisitorController::class, 'updateWatchlist'])->name('frontdesk.visitors.watchlist');
Route::get('/hosts', [HostController::class, 'index'])->name('frontdesk.hosts.index');
Route::get('/hosts/create', [HostController::class, 'create'])->name('frontdesk.hosts.create');
Route::post('/hosts', [HostController::class, 'store'])->name('frontdesk.hosts.store');
Route::get('/hosts/{host}/edit', [HostController::class, 'edit'])->name('frontdesk.hosts.edit');
Route::put('/hosts/{host}', [HostController::class, 'update'])->name('frontdesk.hosts.update');
Route::delete('/hosts/{host}', [HostController::class, 'destroy'])->name('frontdesk.hosts.destroy');
Route::get('/employees', [EmployeeController::class, 'index'])->name('frontdesk.employees.index');
Route::get('/employees/create', [EmployeeController::class, 'create'])->name('frontdesk.employees.create');
Route::post('/employees', [EmployeeController::class, 'store'])->name('frontdesk.employees.store');
Route::get('/employees/import', [EmployeeController::class, 'importForm'])->name('frontdesk.employees.import');
Route::post('/employees/import', [EmployeeController::class, 'import'])->name('frontdesk.employees.import.store');
Route::get('/employees/{employee}/edit', [EmployeeController::class, 'edit'])->name('frontdesk.employees.edit');
Route::get('/employees/{employee}/badge', [EmployeeController::class, 'badge'])->name('frontdesk.employees.badge');
Route::put('/employees/{employee}', [EmployeeController::class, 'update'])->name('frontdesk.employees.update');
Route::delete('/employees/{employee}', [EmployeeController::class, 'destroy'])->name('frontdesk.employees.destroy');
Route::get('/employees/export/attendance', [EmployeeController::class, 'exportAttendance'])->name('frontdesk.employees.export.attendance');
Route::get('/employee', [EmployeePortalController::class, 'index'])->name('frontdesk.employee.portal');
Route::post('/employee/action', [EmployeePortalController::class, 'action'])->name('frontdesk.employee.portal.action');
Route::get('/kiosk', [KioskController::class, 'show'])->name('frontdesk.kiosk');
Route::post('/kiosk/check-in', [KioskController::class, 'checkIn'])->name('frontdesk.kiosk.check-in');
Route::post('/kiosk/check-out', [KioskController::class, 'checkOut'])->name('frontdesk.kiosk.check-out');
Route::get('/host', [HostPortalController::class, 'index'])->name('frontdesk.host.index');
Route::get('/host/schedule', [HostPortalController::class, 'scheduleForm'])->name('frontdesk.host.schedule');
Route::post('/host/schedule', [HostPortalController::class, 'scheduleStore'])->name('frontdesk.host.schedule.store');
Route::post('/host/visits/{visit}/approve', [HostPortalController::class, 'approve'])->name('frontdesk.host.approve');
Route::post('/host/availability', [HostPortalController::class, 'toggleAvailability'])->name('frontdesk.host.availability');
Route::get('/devices', [DeviceController::class, 'index'])->name('frontdesk.devices.index');
Route::get('/devices/create', [DeviceController::class, 'create'])->name('frontdesk.devices.create');
Route::post('/devices', [DeviceController::class, 'store'])->name('frontdesk.devices.store');
Route::get('/devices/{device}/edit', [DeviceController::class, 'edit'])->name('frontdesk.devices.edit');
Route::put('/devices/{device}', [DeviceController::class, 'update'])->name('frontdesk.devices.update');
Route::delete('/devices/{device}', [DeviceController::class, 'destroy'])->name('frontdesk.devices.destroy');
Route::post('/devices/{device}/regenerate-token', [DeviceController::class, 'regenerateToken'])->name('frontdesk.devices.regenerate-token');
Route::get('/security', [SecurityController::class, 'index'])->name('frontdesk.security.index');
Route::get('/security/evacuation', [SecurityController::class, 'evacuation'])->name('frontdesk.security.evacuation');
Route::get('/security/evacuation/export', [SecurityController::class, 'evacuationExport'])->name('frontdesk.security.evacuation.export');
Route::get('/security/evacuation/badges', [SecurityController::class, 'evacuationBadges'])->name('frontdesk.security.evacuation.badges');
Route::get('/security/verify', [SecurityController::class, 'verifyForm'])->name('frontdesk.security.verify');
Route::post('/security/verify', [SecurityController::class, 'verify'])->name('frontdesk.security.verify.lookup');
Route::post('/security/visits/{visit}/checkout', [SecurityController::class, 'checkOut'])->name('frontdesk.security.checkout');
Route::get('/watchlist', [WatchlistController::class, 'index'])->name('frontdesk.watchlist.index');
Route::get('/watchlist/create', [WatchlistController::class, 'create'])->name('frontdesk.watchlist.create');
Route::post('/watchlist', [WatchlistController::class, 'store'])->name('frontdesk.watchlist.store');
Route::delete('/watchlist/{entry}', [WatchlistController::class, 'destroy'])->name('frontdesk.watchlist.destroy');
Route::get('/audit-logs', [AuditLogController::class, 'index'])->name('frontdesk.audit.index');
Route::get('/audit-logs/export', [AuditLogController::class, 'export'])->name('frontdesk.audit.export');
Route::get('/compliance/recovery', [ComplianceController::class, 'index'])->name('frontdesk.compliance.recovery');
Route::post('/compliance/visitors/{visitorId}/restore', [ComplianceController::class, 'restoreVisitor'])->name('frontdesk.compliance.visitors.restore');
Route::post('/compliance/visits/{visitId}/restore', [ComplianceController::class, 'restoreVisit'])->name('frontdesk.compliance.visits.restore');
Route::get('/pro', [ProController::class, 'index'])->name('frontdesk.pro.index');
Route::post('/pro/subscribe', [ProController::class, 'subscribe'])->name('frontdesk.pro.subscribe');
Route::get('/settings', [SettingsController::class, 'edit'])->name('frontdesk.settings');
Route::put('/settings', [SettingsController::class, 'update'])->name('frontdesk.settings.update');
Route::post('/settings/upgrade', [ProController::class, 'subscribe'])->name('frontdesk.settings.upgrade');
Route::get('/branches', [BranchController::class, 'index'])->name('frontdesk.branches.index');
Route::get('/branches/create', [BranchController::class, 'create'])->name('frontdesk.branches.create');
Route::post('/branches', [BranchController::class, 'store'])->name('frontdesk.branches.store');
Route::get('/branches/{branch}/edit', [BranchController::class, 'edit'])->name('frontdesk.branches.edit');
Route::put('/branches/{branch}', [BranchController::class, 'update'])->name('frontdesk.branches.update');
Route::get('/branches/{branch}/buildings', [BuildingController::class, 'index'])->name('frontdesk.buildings.index');
Route::post('/branches/{branch}/buildings', [BuildingController::class, 'store'])->name('frontdesk.buildings.store');
Route::delete('/branches/{branch}/buildings/{building}', [BuildingController::class, 'destroy'])->name('frontdesk.buildings.destroy');
Route::get('/buildings/{building}/desks', [ReceptionDeskController::class, 'index'])->name('frontdesk.desks.index');
Route::post('/buildings/{building}/desks', [ReceptionDeskController::class, 'store'])->name('frontdesk.desks.store');
Route::delete('/buildings/{building}/desks/{desk}', [ReceptionDeskController::class, 'destroy'])->name('frontdesk.desks.destroy');
Route::get('/members', [MemberController::class, 'index'])->name('frontdesk.members.index');
Route::get('/members/create', [MemberController::class, 'create'])->name('frontdesk.members.create');
Route::post('/members', [MemberController::class, 'store'])->name('frontdesk.members.store');
Route::delete('/members/{member}', [MemberController::class, 'destroy'])->name('frontdesk.members.destroy');
Route::get('/wallet', fn () => redirect()->away(ladill_account_url('/wallet')))->name('frontdesk.wallet');
Route::get('/wallet/balance', [WalletController::class, 'balance'])->name('frontdesk.wallet.balance');
Route::get('/team', fn () => redirect()->away(ladill_account_url('/account/team')))->name('frontdesk.team');
});
});