use App\Http\Controllers\Auth\LoginController; use App\Http\Controllers\SupportChatController; use App\Http\Controllers\Auth\RegisterController; use App\Http\Controllers\SuperAdmin\DashboardController as SuperAdminDashboard; use App\Http\Controllers\SuperAdmin\ProvidersController; use App\Http\Controllers\SuperAdmin\SaasPlansController; use App\Http\Controllers\SuperAdmin\SettingsController; use App\Http\Controllers\Tenant\DashboardController; use App\Http\Controllers\Tenant\UsersController; use App\Http\Controllers\Tenant\MembersController; use App\Http\Controllers\Tenant\PlansController; use App\Http\Controllers\Tenant\LeadController; use App\Http\Controllers\SaaS\RazorpayWebhookController; use App\Http\Controllers\Tenant\RolesController; use App\Http\Controllers\Tenant\DietPlansController; use Illuminate\Support\Facades\Route; // ─── Razorpay Webhook (NO CSRF — raw body required) ───────────────────────── Route::post('/razorpay/webhook', [RazorpayWebhookController::class, 'handle']) ->name('razorpay.webhook'); // ─── Auth (public) ──────────────────────────────────────────────────────────── Route::get('/', [\App\Http\Controllers\HomeController::class, 'index'])->name('home'); Route::get('/login', [LoginController::class, 'showLoginForm'])->name('login'); Route::post('/login', [LoginController::class, 'login'])->name('login.post'); Route::post('/logout', [LoginController::class, 'logout'])->name('logout'); Route::get('/register', [RegisterController::class, 'showRegistrationForm'])->name('register'); Route::post('/register',[RegisterController::class, 'register'])->name('register.post'); // ─── Tenant Domain Auth (for subdomains) ─────────────────────────────────── // This allows SPs to log in via their subdomain Route::middleware([\Stancl\Tenancy\Middleware\InitializeTenancyByDomain::class])->group(function () { Route::get('/gym/login', [LoginController::class, 'showLoginForm'])->name('tenant.login'); Route::post('/gym/login', [LoginController::class, 'login'])->name('tenant.login.post'); }); // SaaS Billing (Razorpay) Route::prefix('saas')->name('saas.')->group(function () { Route::post('/payment/{tenant}/success', [\App\Http\Controllers\SaaS\BillingController::class, 'success'])->name('payment.success'); Route::get('/payment/cancel', [\App\Http\Controllers\SaaS\BillingController::class, 'cancel'])->name('payment.cancel'); Route::get('/payment/{tenant}', [\App\Http\Controllers\SaaS\BillingController::class, 'payment'])->name('payment'); }); // ─── Super Admin ────────────────────────────────────────────────────────────── Route::prefix('super-admin')->name('super-admin.')->middleware(['auth', 'role:super-admin'])->group(function () { Route::get('/dashboard', [SuperAdminDashboard::class, 'index'])->name('dashboard'); // Providers Route::get('/providers', [ProvidersController::class, 'index'])->name('providers.index'); Route::get('/providers/{tenant}', [ProvidersController::class, 'show'])->name('providers.show'); Route::get('/providers/{tenant}/members', [ProvidersController::class, 'membersData'])->name('providers.members-data'); Route::post('/providers/{tenant}/approve', [ProvidersController::class, 'approve'])->name('providers.approve'); Route::post('/providers/{tenant}/suspend', [ProvidersController::class, 'suspend'])->name('providers.suspend'); Route::delete('/providers/{tenant}', [ProvidersController::class, 'destroy'])->name('providers.destroy'); // SaaS Plans Management Route::get('/saas-plans', [SaasPlansController::class, 'index'])->name('saas-plans.index'); Route::get('/saas-plans/create', [SaasPlansController::class, 'create'])->name('saas-plans.create'); Route::post('/saas-plans', [SaasPlansController::class, 'store'])->name('saas-plans.store'); Route::get('/saas-plans/{saas_plan}/edit', [SaasPlansController::class, 'edit'])->name('saas-plans.edit'); Route::put('/saas-plans/{saas_plan}', [SaasPlansController::class, 'update'])->name('saas-plans.update'); Route::post('/saas-plans/{saas_plan}/activate', [SaasPlansController::class, 'setActive'])->name('saas-plans.activate'); Route::delete('/saas-plans/{saas_plan}', [SaasPlansController::class, 'destroy'])->name('saas-plans.destroy'); // System Settings Route::get('/settings/sms', [SettingsController::class, 'smsSettings'])->name('settings.sms'); Route::post('/settings/sms', [SettingsController::class, 'updateSmsSettings'])->name('settings.sms.update'); Route::get('/settings/saas', [SettingsController::class, 'saasSettings'])->name('settings.saas'); Route::post('/settings/saas', [SettingsController::class, 'updateSaasSettings'])->name('settings.saas.update'); // Support Chats Route::get('/support', [SupportChatController::class, 'adminIndex'])->name('support.index'); Route::get('/support/messages', [SupportChatController::class, 'getMessages'])->name('support.messages'); Route::post('/support/messages', [SupportChatController::class, 'sendMessage'])->name('support.messages.send'); }); // ─── Tenant (Gym / Service Provider) ───────────────────────────────────────── Route::prefix('gym')->name('tenant.')->middleware(['auth', \App\Http\Middleware\InitializeTenancyByUser::class, 'role:owner|staff|member', 'subscription.active'])->group(function () { Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); // Profile & Billing Route::get('/profile', [\App\Http\Controllers\Tenant\BillingController::class, 'index'])->name('profile'); Route::get('/profile/payment', [\App\Http\Controllers\Tenant\BillingController::class, 'payment'])->name('profile.payment'); Route::post('/profile/payment/success', [\App\Http\Controllers\Tenant\BillingController::class, 'success'])->name('profile.payment.success'); Route::get('/profile/payment/cancel', [\App\Http\Controllers\Tenant\BillingController::class, 'cancel'])->name('profile.payment.cancel'); // Users Management Route::prefix('users')->name('users.')->group(function () { Route::get('/', [UsersController::class, 'index'])->name('index')->middleware('can:view_users'); Route::get('/create', [UsersController::class, 'create'])->name('create')->middleware('can:create_users'); Route::post('/', [UsersController::class, 'store'])->name('store')->middleware('can:create_users'); Route::get('/{user}/edit', [UsersController::class, 'edit'])->name('edit')->middleware('can:update_users'); Route::put('/{user}', [UsersController::class, 'update'])->name('update')->middleware('can:update_users'); Route::delete('/{user}', [UsersController::class, 'destroy'])->name('destroy')->middleware('can:delete_users'); Route::post('/{user}/toggle', [UsersController::class, 'toggleStatus'])->name('toggle')->middleware('can:update_users'); }); // Roles & Permissions Management Route::prefix('roles')->name('roles.')->group(function () { Route::get('/', [RolesController::class, 'index'])->name('index')->middleware('can:view_roles'); Route::get('/{role}/permissions', [RolesController::class, 'editPermissions'])->name('permissions.edit')->middleware('can:update_roles'); Route::post('/{role}/permissions', [RolesController::class, 'updatePermissions'])->name('permissions.update')->middleware('can:update_roles'); }); // Members Route::prefix('members')->name('members.')->group(function () { Route::get('/', [MembersController::class, 'index'])->name('index')->middleware('can:view_members'); Route::get('/data', [MembersController::class, 'membersData'])->name('data')->middleware('can:view_members'); Route::get('/{member}/renew', [MembersController::class, 'renew'])->name('renew')->middleware('can:update_members'); Route::post('/{member}/renew', [MembersController::class, 'processRenewal'])->name('renew.store')->middleware('can:update_members'); Route::get('/create', [MembersController::class, 'create'])->name('create')->middleware('can:create_members'); Route::post('/', [MembersController::class, 'store'])->name('store')->middleware('can:create_members'); Route::get('/{member}', [MembersController::class, 'show'])->name('show')->middleware('can:view_members'); Route::get('/{member}/edit', [MembersController::class, 'edit'])->name('edit')->middleware('can:update_members'); Route::put('/{member}', [MembersController::class, 'update'])->name('update')->middleware('can:update_members'); Route::delete('/{member}', [MembersController::class, 'destroy'])->name('destroy')->middleware('can:delete_members'); Route::post('/{member}/toggle', [MembersController::class, 'toggleStatus'])->name('toggle')->middleware('can:update_members'); }); // Plans & Services (Setup) Route::prefix('plans')->name('plans.')->group(function () { Route::get('/', [PlansController::class, 'index'])->name('index')->middleware('can:view_plans'); Route::get('/create', [PlansController::class, 'create'])->name('create')->middleware('can:create_plans'); Route::post('/', [PlansController::class, 'store'])->name('store')->middleware('can:create_plans'); Route::get('/{plan}/edit', [PlansController::class, 'edit'])->name('edit')->middleware('can:update_plans'); Route::put('/{plan}', [PlansController::class, 'update'])->name('update')->middleware('can:update_plans'); Route::delete('/{plan}', [PlansController::class, 'destroy'])->name('destroy')->middleware('can:delete_plans'); }); // Leads Route::prefix('leads')->name('leads.')->group(function () { Route::get('/', [LeadController::class, 'index'])->name('index')->middleware('can:view_leads'); Route::get('/create', [LeadController::class, 'create'])->name('create')->middleware('can:create_leads'); Route::post('/', [LeadController::class, 'store'])->name('store')->middleware('can:create_leads'); Route::get('/{lead}', [LeadController::class, 'show'])->name('show')->middleware('can:view_leads'); Route::get('/{lead}/edit', [LeadController::class, 'edit'])->name('edit')->middleware('can:update_leads'); Route::put('/{lead}', [LeadController::class, 'update'])->name('update')->middleware('can:update_leads'); Route::delete('/{lead}', [LeadController::class, 'destroy'])->name('destroy')->middleware('can:delete_leads'); Route::post('/{lead}/follow-up', [LeadController::class, 'addFollowUp'])->name('follow-up.store')->middleware('can:update_leads'); Route::post('/{lead}/convert', [LeadController::class, 'convert'])->name('convert')->middleware('can:create_members'); }); // Diet Plans (Diet OS) Route::prefix('diet-plans')->name('diet-plans.')->group(function () { Route::get('/', [DietPlansController::class, 'index'])->name('index')->middleware('can:view_diet_plans'); Route::get('/create', [DietPlansController::class, 'create'])->name('create')->middleware('can:create_diet_plans'); Route::post('/', [DietPlansController::class, 'store'])->name('store')->middleware('can:create_diet_plans'); Route::get('/{dietPlan}/edit', [DietPlansController::class, 'edit'])->name('edit')->middleware('can:update_diet_plans'); Route::put('/{dietPlan}', [DietPlansController::class, 'update'])->name('update')->middleware('can:update_diet_plans'); Route::delete('/{dietPlan}', [DietPlansController::class, 'destroy'])->name('destroy')->middleware('can:delete_diet_plans'); }); // Support Chat Route::get('/support/messages', [SupportChatController::class, 'getMessages'])->name('support.messages'); Route::post('/support/messages', [SupportChatController::class, 'sendMessage'])->name('support.messages.send'); });