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}/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::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'); }); });