middleware(['signed','throttle:30,1'])->name('campaigns.unsubscribe');Route::view('/', 'landing')->name('home');Route::get('/reset-password/{token}', [\App\Http\Controllers\PasswordResetController::class, 'show'])->name('password.reset');Route::post('/reset-password', [\App\Http\Controllers\PasswordResetController::class, 'update'])->middleware('throttle:6,1')->name('password.update');Route::middleware('guest')->group(function () { Route::get('/login', [AuthController::class, 'showLogin'])->name('login'); Route::post('/login', [AuthController::class, 'login'])->middleware('throttle:6,1')->name('login.post'); Route::get('/register', [AuthController::class, 'showRegister'])->name('register'); Route::post('/register', [AuthController::class, 'register'])->middleware('throttle:5,1')->name('register.post');});Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth')->name('logout');Route::get('/sign-out', fn () => view('auth.confirm-logout'))->middleware('auth')->name('logout.confirm');Route::get('/widget/{key}.js', WidgetScriptController::class)->name('widget.script');Route::get('/rsvp/{token}', [EventController::class, 'invite'])->name('invitations.show');Route::get('/ticket/{token}', [EventController::class, 'ticket'])->middleware('throttle:60,1')->name('tickets.show');Route::get('/ticket/{token}/qr', [\App\Http\Controllers\EventTicketController::class,'qr'])->middleware('throttle:60,1')->name('tickets.qr');Route::get('/ticket/{token}/pdf', [\App\Http\Controllers\EventTicketController::class,'pdf'])->middleware('throttle:30,1')->name('tickets.pdf');Route::post('/ticket/{token}/checkout', [\App\Http\Controllers\EventTicketController::class,'checkout'])->middleware('throttle:8,1')->name('tickets.checkout');Route::post('/rsvp/{token}', [EventController::class, 'respondToInvite'])->name('invitations.respond');Route::get('/event-page/{token}', [EventController::class, 'publicEvent'])->name('public-events.show');Route::post('/event-page/{token}/register', [EventController::class, 'registerForPublicEvent'])->name('public-events.register');Route::get('/quote/{token}', [QuoteController::class, 'publicShow'])->name('public-quotes.show');Route::post('/quote/{token}/respond', [QuoteController::class, 'respond'])->name('public-quotes.respond');Route::get('/pay/{token}', [StripeConnectController::class, 'paymentPage'])->middleware('throttle:60,1')->name('booking-payments.show');Route::post('/pay/{token}/checkout', [StripeConnectController::class, 'checkout'])->middleware('throttle:8,1')->name('booking-payments.checkout');Route::get('/page/{slug}', [PlatformAdminController::class, 'publicPage'])->name('content-pages.show');Route::middleware(['auth', 'tenant'])->group(function () { Route::get('/dashboard', [DashboardController::class, 'index'])->middleware('workspace.role:dashboard')->name('dashboard'); Route::get('/contacts/{contact}/message', [\App\Http\Controllers\ContactMessageController::class,'create'])->middleware(['workspace.role:contacts','workspace.role:inbox'])->name('contacts.message'); Route::post('/contacts/{contact}/message', [\App\Http\Controllers\ContactMessageController::class,'store'])->middleware(['workspace.role:contacts','workspace.role:inbox'])->name('contacts.message.send'); Route::get('/contacts', [ContactsController::class, 'index'])->middleware('workspace.role:contacts')->name('contacts.index'); Route::post('/contacts', [ContactsController::class, 'store'])->middleware('workspace.role:contacts')->name('contacts.store'); Route::post('/contacts/import', [ContactsController::class, 'import'])->middleware('workspace.role:contacts')->name('contacts.import'); Route::get('/contacts/export', [ContactsController::class, 'export'])->middleware('workspace.role:contacts')->name('contacts.export'); Route::get('/campaigns', [CampaignController::class, 'index'])->middleware('workspace.role:campaigns')->name('campaigns.index'); Route::post('/campaigns/senders', [CampaignController::class,'sender'])->middleware('workspace.role:campaigns')->name('campaigns.sender'); Route::get('/campaigns/{campaign}', [CampaignController::class,'show'])->middleware('workspace.role:campaigns')->name('campaigns.show'); Route::post('/campaigns', [CampaignController::class, 'store'])->middleware('workspace.role:campaigns')->name('campaigns.store'); Route::post('/campaigns/{campaign}/launch', [CampaignController::class, 'launch'])->middleware('workspace.role:campaigns')->name('campaigns.launch'); Route::post('/campaigns/{campaign}/pause', [CampaignController::class, 'pause'])->middleware('workspace.role:campaigns')->name('campaigns.pause'); Route::get('/events', [EventController::class, 'index'])->middleware('workspace.role:events')->name('events.index'); Route::get('/ticket-scan/{token}', [\App\Http\Controllers\EventTicketController::class,'scan'])->middleware('workspace.role:events')->name('tickets.scan'); Route::get('/events/{event}/scanner', [\App\Http\Controllers\EventTicketController::class,'scanner'])->middleware('workspace.role:events')->name('tickets.scanner'); Route::post('/events/{event}/scanner', [\App\Http\Controllers\EventTicketController::class,'lookup'])->middleware('workspace.role:events')->name('tickets.lookup'); Route::put('/events/{event}/ticket-settings', [\App\Http\Controllers\EventTicketController::class,'settings'])->middleware('workspace.role:events')->name('tickets.settings'); Route::post('/events/{event}/ticket-templates/sync', [\App\Http\Controllers\EventTicketController::class,'syncTemplates'])->middleware(['workspace.role:events','throttle:5,1'])->name('tickets.templates.sync'); Route::post('/events/{event}/ticket-messages/{message}/retry', [\App\Http\Controllers\EventTicketController::class,'retry'])->middleware('workspace.role:events')->name('tickets.retry'); Route::post('/events', [EventController::class, 'store'])->middleware('workspace.role:events')->name('events.store'); Route::get('/events/{event}', [EventController::class, 'show'])->middleware('workspace.role:events')->name('events.show'); Route::patch('/events/{event}', [EventController::class, 'update'])->middleware('workspace.role:events')->name('events.update'); Route::post('/events/{event}/staff', [EventController::class, 'assignStaff'])->middleware('workspace.role:events')->name('events.staff.store'); Route::post('/events/{event}/vendors', [EventController::class, 'addVendor'])->middleware('workspace.role:events')->name('events.vendors.store'); Route::post('/events/{event}/guests', [EventController::class, 'addGuest'])->middleware('workspace.role:events')->name('events.guests.store'); Route::patch('/events/{event}/guests/{guest}/ticket', [EventController::class, 'updateTicket'])->middleware('workspace.role:events')->name('events.tickets.update'); Route::get('/tasks', [EventTaskController::class, 'index'])->middleware('workspace.role:tasks')->name('tasks.index'); Route::post('/tasks', [EventTaskController::class, 'store'])->middleware('workspace.role:tasks')->name('tasks.store'); Route::patch('/tasks/{task}', [EventTaskController::class, 'update'])->middleware('workspace.role:tasks')->name('tasks.update'); Route::get('/services', [CatalogController::class, 'index'])->middleware('workspace.role:catalog')->name('services.index'); Route::post('/services', [CatalogController::class, 'store'])->middleware('workspace.role:catalog')->name('services.store'); Route::post('/packages', [CatalogController::class, 'storePackage'])->middleware('workspace.role:catalog')->name('packages.store'); Route::get('/quotes', [QuoteController::class, 'index'])->middleware('workspace.role:sales')->name('quotes.index'); Route::post('/quotes', [QuoteController::class, 'store'])->middleware('workspace.role:sales')->name('quotes.store'); Route::post('/quotes/{quote}/send', [QuoteController::class, 'send'])->middleware('workspace.role:sales')->name('quotes.send'); Route::get('/bookings', [QuoteController::class, 'bookings'])->middleware('workspace.role:sales')->name('bookings.index'); Route::post('/bookings/{booking}/schedules/{schedule}/record-payment', [QuoteController::class, 'recordPayment'])->middleware('workspace.role:sales')->name('bookings.payments.record'); Route::get('/team', [WorkspaceController::class, 'team'])->middleware('workspace.role:team')->name('team.index'); Route::post('/team', [WorkspaceController::class, 'storeTeamMember'])->middleware('workspace.role:team')->name('team.store'); Route::get('/inbox', [InboxController::class, 'index'])->middleware('workspace.role:inbox')->name('inbox.index'); Route::get('/inbox/{conversation}', [InboxController::class, 'show'])->middleware('workspace.role:inbox')->name('inbox.show'); Route::post('/inbox/{conversation}/reply', [InboxController::class, 'reply'])->middleware('workspace.role:inbox')->name('inbox.reply'); Route::post('/inbox/{conversation}/ai-draft', [InboxController::class, 'aiDraft'])->middleware(['workspace.role:inbox','throttle:10,1'])->name('inbox.ai-draft'); Route::post('/inbox/{conversation}/note', [InboxController::class, 'note'])->middleware('workspace.role:inbox')->name('inbox.note'); Route::patch('/inbox/{conversation}', [InboxController::class, 'update'])->middleware('workspace.role:inbox')->name('inbox.update'); Route::post('/modules/{module}/lead-stages', [\App\Http\Controllers\LeadPipelineController::class,'stage'])->where('module','leads')->middleware('workspace.role:modules')->name('leads.stage'); Route::post('/modules/{module}/leads/{lead}/move', [\App\Http\Controllers\LeadPipelineController::class,'move'])->where('module','leads')->middleware('workspace.role:modules')->name('leads.move'); Route::post('/modules/{module}/leads/{lead}/convert', [\App\Http\Controllers\LeadPipelineController::class,'convert'])->where('module','leads')->middleware(['workspace.role:modules','workspace.role:contacts'])->name('leads.convert'); Route::get('/modules/{module}', [ModulesController::class, 'show'])->middleware('workspace.role:modules')->name('modules.show'); Route::post('/modules/{module}/posts/{post}/action', [\App\Http\Controllers\SocialPlannerController::class, 'action'])->where('module','social')->middleware('workspace.role:modules')->name('social.action'); Route::get('/modules/{module}/connect/{platform}', [\App\Http\Controllers\SocialConnectionController::class,'connect'])->where('module','social')->middleware('workspace.role:modules')->name('social.connect'); Route::get('/modules/{module}/callback/{platform}', [\App\Http\Controllers\SocialConnectionController::class,'callback'])->where('module','social')->middleware('workspace.role:modules')->name('social.callback'); Route::post('/modules/{module}/connections/select', [\App\Http\Controllers\SocialConnectionController::class,'select'])->where('module','social')->middleware('workspace.role:modules')->name('social.select'); Route::post('/modules/{module}/connections/{account}', [\App\Http\Controllers\SocialConnectionController::class,'manage'])->where('module','social')->middleware('workspace.role:modules')->name('social.connection'); Route::get('/modules/{module}/connections/{account}/creator', [\App\Http\Controllers\SocialConnectionController::class,'creator'])->where('module','social')->middleware(['workspace.role:modules','throttle:10,1'])->name('social.creator'); Route::post('/modules/{module}', [ModulesController::class, 'store'])->middleware('workspace.role:modules')->name('modules.store'); Route::patch('/modules/{module}/{id}/active', [ModulesController::class, 'toggle'])->middleware('workspace.role:modules')->name('modules.toggle'); Route::post('/billing/checkout', [PlatformBillingController::class, 'checkout'])->middleware('workspace.role:billing')->name('billing.checkout'); Route::post('/billing/portal', [PlatformBillingController::class, 'portal'])->middleware('workspace.role:billing')->name('billing.portal'); Route::get('/billing/success', [PlatformBillingController::class, 'success'])->middleware('workspace.role:billing')->name('billing.success'); Route::post('/billing/stripe/connect', [StripeConnectController::class, 'onboard'])->middleware('workspace.role:billing')->name('stripe.connect.onboard'); Route::get('/billing/stripe/refresh', [StripeConnectController::class, 'refresh'])->middleware('workspace.role:billing')->name('stripe.connect.refresh'); Route::get('/billing/stripe/return', [StripeConnectController::class, 'returned'])->middleware('workspace.role:billing')->name('stripe.connect.return'); Route::post('/templates/{template}/submit', [ModulesController::class, 'submitTemplate'])->middleware('workspace.role:campaigns')->name('templates.submit'); Route::post('/template-sync', [ModulesController::class, 'syncTemplates'])->middleware(['workspace.role:modules.templates','throttle:5,1'])->name('templates.sync'); Route::middleware('can:platform-admin')->prefix('admin')->name('admin.')->group(function () { Route::get('/users', [\App\Http\Controllers\AdminAccessController::class, 'users'])->name('users'); Route::post('/users', [\App\Http\Controllers\AdminAccessController::class, 'store'])->name('users.store'); Route::get('/users/{user}/edit', [\App\Http\Controllers\AdminAccessController::class, 'edit'])->name('users.edit'); Route::patch('/users/{user}', [\App\Http\Controllers\AdminAccessController::class, 'update'])->name('users.update'); Route::post('/users/{user}/revoke', [\App\Http\Controllers\AdminAccessController::class, 'revoke'])->name('users.revoke'); Route::post('/users/{user}/reset-password', [\App\Http\Controllers\AdminAccessController::class, 'reset'])->middleware('throttle:6,1')->name('users.reset'); Route::get('/roles', [\App\Http\Controllers\AdminAccessController::class, 'roles'])->name('roles'); Route::put('/roles/{role}', [\App\Http\Controllers\AdminAccessController::class, 'updateRole'])->name('roles.update'); Route::get('/sessions', [\App\Http\Controllers\AdminAccessController::class, 'sessions'])->name('sessions'); Route::delete('/sessions/{session}', [\App\Http\Controllers\AdminAccessController::class, 'revokeSession'])->name('sessions.destroy'); Route::get('/workspaces', [AdminController::class, 'workspaces'])->name('workspaces'); Route::patch('/workspaces/{workspace}', [AdminController::class, 'updateWorkspace'])->name('workspaces.update'); Route::post('/plans', [AdminController::class, 'storePlan'])->name('plans.store'); Route::get('/plans', [PlatformAdminController::class, 'plans'])->name('plans'); Route::patch('/plans/{plan}', [PlatformAdminController::class, 'updatePlan'])->name('plans.update'); Route::get('/subscriptions', [PlatformAdminController::class, 'subscriptions'])->name('subscriptions'); Route::get('/payments', [PlatformAdminController::class, 'payments'])->name('payments'); Route::get('/gateways', [PlatformAdminController::class, 'gateways'])->name('gateways'); Route::get('/coupons', [PlatformAdminController::class, 'coupons'])->name('coupons'); Route::post('/coupons', [PlatformAdminController::class, 'storeCoupon'])->name('coupons.store'); Route::patch('/coupons/{coupon}/active', [PlatformAdminController::class, 'toggleCoupon'])->name('coupons.toggle'); Route::get('/tax-rates', [PlatformAdminController::class, 'taxes'])->name('tax-rates'); Route::post('/tax-rates', [PlatformAdminController::class, 'storeTax'])->name('tax-rates.store'); Route::patch('/tax-rates/{taxRate}/active', [PlatformAdminController::class, 'toggleTax'])->name('tax-rates.toggle'); Route::get('/content', [PlatformAdminController::class, 'pages'])->name('content.index'); Route::post('/content', [PlatformAdminController::class, 'storePage'])->name('content.store'); Route::patch('/content/{page}', [PlatformAdminController::class, 'updatePage'])->name('content.update'); Route::delete('/content/{page}', [PlatformAdminController::class, 'deletePage'])->name('content.delete'); Route::get('/support', [PlatformAdminController::class, 'support'])->name('support'); Route::patch('/support/{ticket}', [PlatformAdminController::class, 'updateSupport'])->name('support.update'); Route::get('/settings', [PlatformAdminController::class, 'settings'])->name('settings'); Route::put('/settings', [PlatformAdminController::class, 'updateSettings'])->name('settings.update'); Route::get('/health', [PlatformAdminController::class, 'health'])->name('health'); Route::get('/audit', [PlatformAdminController::class, 'audit'])->name('audit'); });});