controller(AdminSettingController::class) ->middleware('perm:setting.manager') ->group(function () { Route::get('/', 'index'); Route::put('/', 'update'); Route::post('test-telegram', 'testTelegram'); }); // VAT settings per service type (module: settings) Route::prefix('vat-settings') ->controller(AdminSettingController::class) ->middleware('perm:setting.manager') ->group(function () { Route::get('/', 'vatIndex'); Route::put('/', 'vatUpdate'); }); // Dashboard Stats Route::prefix('dashboard') ->controller(\App\Http\Controllers\Api\Admin\Dashboard\DashboardController::class) ->middleware('perm:dashboard.view') ->group(function () { Route::get('stats', 'stats'); Route::get('monthly-stats', 'monthlyStats'); Route::get('daily-stats', 'dailyStats'); Route::get('recent-orders', 'recentOrders'); Route::get('recent-deposits', 'recentDeposits'); Route::get('top-services', 'topServices'); Route::get('expiring-services', 'expiringServices'); Route::get('activities', 'activities'); Route::get('latest-customers', 'latestCustomers'); }); // Staff Online Route::prefix('staff-online') ->controller(StaffOnlineController::class) ->group(function () { Route::get('/', 'index'); Route::post('ping', 'ping'); }); // Queue Monitor (Horizon) Route::prefix('queue') ->controller(QueueMonitorController::class) ->middleware('perm:queue.manager') ->group(function () { Route::get('jobs/recent', 'recent'); Route::get('jobs/pending', 'pending'); Route::get('jobs/failed', 'failed'); Route::post('jobs/failed/{id}/retry', 'retry'); Route::get('jobs/metrics', 'metrics'); }); // Email Templates (module: settings) Route::prefix('email-templates') ->controller(EmailTemplateController::class) ->middleware('perm:email-template.manager') ->group(function () { Route::get('/', 'index'); Route::post('/', 'store'); Route::get('scenarios', 'scenarios'); Route::put('scenarios/{key}/label', 'updateScenarioLabel'); Route::get('email-settings', 'getEmailSettings'); Route::put('email-settings', 'updateEmailSettings'); Route::get('{id}', 'show'); Route::put('{id}', 'update'); Route::delete('{id}', 'destroy'); Route::post('{id}/preview', 'preview'); Route::post('{id}/send-test', 'sendTest'); }); // Tickets (support tickets) Route::prefix('tickets') ->controller(AdminTicketController::class) ->group(function () { Route::get('/', 'index')->middleware('perm:support.view'); Route::get('{ticket_num}', 'show')->middleware('perm:support.view'); Route::patch('{ticket_num}/status', 'updateStatus')->middleware('perm:support.edit'); Route::post('{ticket_num}/reply', 'reply')->middleware('perm:support.edit'); }); Route::prefix('notifications') ->controller(NotificationController::class) ->group(function () { Route::get('/', fn() => app(NotificationController::class)->index(request(), 'admin')); Route::get( '{id}', fn($id) => app(NotificationController::class)->show(request(), 'admin', (int) $id), )->whereNumber('id'); Route::patch( '{id}/read', fn($id) => app(NotificationController::class)->markRead(request(), 'admin', (int) $id), ); Route::patch( 'read-all', fn() => app(NotificationController::class)->markAllRead(request(), 'admin'), ); }); // Activity Logs Route::prefix('activity-logs') ->controller(ActivityLogController::class) ->middleware('perm:system-log.manager') ->group(function () { Route::get('/', 'index'); Route::get('modules', 'modules'); Route::get('stats', 'stats'); Route::get('{id}', 'show'); }); // Email Logs Route::prefix('email-logs') ->controller(EmailLogController::class) ->middleware('perm:system-log.manager') ->group(function () { Route::get('/', 'index'); Route::get('{id}', 'show')->whereNumber('id'); }); // Mail Campaigns (module: mail-campaign) Route::prefix('mail-campaigns') ->controller(MailCampaignController::class) ->group(function () { Route::get('/', 'index')->middleware('perm:mail-campaign.view'); Route::post('preview', 'preview')->middleware('perm:mail-campaign.create'); Route::get('{uuid}/preview', 'previewCampaign')->middleware('perm:mail-campaign.view'); Route::get('{uuid}', 'show')->middleware('perm:mail-campaign.view'); Route::post('/', 'store')->middleware('perm:mail-campaign.create'); });