group(function () { // Route principali Stampe Rate Route::prefix('stampe-rate')->name('stampeRate.')->group(function () { // Dashboard e lista stampe Route::get('/', [StampeRateController::class, 'index'])->name('index'); Route::get('/dashboard', [StampeRateController::class, 'dashboard'])->name('dashboard'); // Generazione stampe Route::get('/create', [StampeRateController::class, 'create'])->name('create'); Route::post('/generate', [StampeRateController::class, 'generate'])->name('generate'); Route::get('/preview/{stampaId}', [StampeRateController::class, 'preview'])->name('preview'); // Gestione stampe esistenti Route::get('/{stampaId}', [StampeRateController::class, 'show'])->name('show'); Route::put('/{stampaId}', [StampeRateController::class, 'update'])->name('update'); Route::delete('/{stampaId}', [StampeRateController::class, 'destroy'])->name('destroy'); // Download e esportazione Route::get('/{stampaId}/download', [StampeRateController::class, 'download'])->name('download'); Route::get('/{stampaId}/download-single/{fileId}', [StampeRateController::class, 'downloadSingle'])->name('download.single'); Route::post('/{stampaId}/export', [StampeRateController::class, 'export'])->name('export'); // Invio email Route::post('/{stampaId}/send', [StampeRateController::class, 'send'])->name('send'); Route::post('/{stampaId}/send-bulk', [StampeRateController::class, 'sendBulk'])->name('send.bulk'); Route::post('/{stampaId}/send-test', [StampeRateController::class, 'sendTest'])->name('send.test'); // Ristampa e rigenerazione Route::post('/{stampaId}/regenerate', [StampeRateController::class, 'regenerate'])->name('regenerate'); Route::post('/{stampaId}/regenerate-single/{rataId}', [StampeRateController::class, 'regenerateSingle'])->name('regenerate.single'); // Statistiche e report Route::get('/stats/dashboard', [StampeRateController::class, 'stats'])->name('stats'); Route::get('/stats/export', [StampeRateController::class, 'exportStats'])->name('stats.export'); }); // Route Template Management Route::prefix('stampe-rate/templates')->name('stampeRate.templates.')->group(function () { // CRUD Template Route::get('/', [TemplateController::class, 'index'])->name('index'); Route::get('/create', [TemplateController::class, 'create'])->name('create'); Route::post('/', [TemplateController::class, 'store'])->name('store'); Route::get('/{templateId}', [TemplateController::class, 'show'])->name('show'); Route::get('/{templateId}/edit', [TemplateController::class, 'edit'])->name('edit'); Route::put('/{templateId}', [TemplateController::class, 'update'])->name('update'); Route::delete('/{templateId}', [TemplateController::class, 'destroy'])->name('destroy'); // Gestione Template Route::post('/{templateId}/duplicate', [TemplateController::class, 'duplicate'])->name('duplicate'); Route::post('/{templateId}/publish', [TemplateController::class, 'publish'])->name('publish'); Route::post('/{templateId}/unpublish', [TemplateController::class, 'unpublish'])->name('unpublish'); Route::get('/{templateId}/preview', [TemplateController::class, 'preview'])->name('preview'); // Import/Export Template Route::get('/import', [TemplateController::class, 'import'])->name('import'); Route::post('/import', [TemplateController::class, 'processImport'])->name('import.process'); Route::get('/{templateId}/export', [TemplateController::class, 'export'])->name('export'); // Template Marketplace (per sviluppi futuri) Route::get('/marketplace', [TemplateController::class, 'marketplace'])->name('marketplace'); Route::post('/marketplace/{templateId}/install', [TemplateController::class, 'installFromMarketplace'])->name('marketplace.install'); }); // Route Cronologia e Tracking Route::prefix('stampe-rate/history')->name('stampeRate.history.')->group(function () { // Cronologia generale Route::get('/', [HistoryController::class, 'index'])->name('index'); Route::get('/dashboard', [HistoryController::class, 'dashboard'])->name('dashboard'); // Tracking invii email Route::get('/email-tracking', [HistoryController::class, 'emailTracking'])->name('email.tracking'); Route::get('/email-tracking/{invioId}', [HistoryController::class, 'emailTrackingDetail'])->name('email.tracking.detail'); // Report e statistiche Route::get('/reports', [HistoryController::class, 'reports'])->name('reports'); Route::get('/reports/monthly', [HistoryController::class, 'monthlyReport'])->name('reports.monthly'); Route::get('/reports/yearly', [HistoryController::class, 'yearlyReport'])->name('reports.yearly'); Route::post('/reports/custom', [HistoryController::class, 'customReport'])->name('reports.custom'); // Export cronologia Route::post('/export', [HistoryController::class, 'export'])->name('export'); Route::get('/export/csv', [HistoryController::class, 'exportCSV'])->name('export.csv'); Route::get('/export/excel', [HistoryController::class, 'exportExcel'])->name('export.excel'); // Cleanup e manutenzione Route::post('/cleanup', [HistoryController::class, 'cleanup'])->name('cleanup'); Route::post('/archive', [HistoryController::class, 'archive'])->name('archive'); }); // Route API per AJAX e integrazione Route::prefix('api/stampe-rate')->name('api.stampeRate.')->group(function () { // API Liste Route::get('/stabili', [StampeRateController::class, 'getStabili'])->name('stabili'); Route::get('/rate/{stabileId}', [StampeRateController::class, 'getRateByStabile'])->name('rate'); Route::get('/templates', [TemplateController::class, 'getTemplates'])->name('templates'); // API Generazione Route::post('/generate', [StampeRateController::class, 'apiGenerate'])->name('generate'); Route::get('/status/{stampaId}', [StampeRateController::class, 'getStatus'])->name('status'); // API Invio Email Route::post('/send', [StampeRateController::class, 'apiSend'])->name('send'); Route::get('/tracking/{invioId}', [HistoryController::class, 'getTrackingInfo'])->name('tracking'); // API Statistiche Route::get('/stats/dashboard', [StampeRateController::class, 'getDashboardStats'])->name('stats.dashboard'); Route::get('/stats/chart/{type}', [StampeRateController::class, 'getChartData'])->name('stats.chart'); }); }); /* |-------------------------------------------------------------------------- | Route Pubbliche (per tracking email, ecc.) |-------------------------------------------------------------------------- */ // Tracking aperture email (no auth richiesta) Route::get('/track/email/{trackingId}', [HistoryController::class, 'trackEmailOpen'])->name('stampeRate.track.email'); Route::get('/track/download/{trackingId}', [HistoryController::class, 'trackDownload'])->name('stampeRate.track.download'); // Unsubscribe link Route::get('/unsubscribe/{token}', [HistoryController::class, 'unsubscribe'])->name('stampeRate.unsubscribe'); /* |-------------------------------------------------------------------------- | Route Webhook (per integrazioni esterne) |-------------------------------------------------------------------------- */ // Webhook per servizi email esterni (SendGrid, MailChimp, etc.) Route::post('/webhook/email-status', [HistoryController::class, 'webhookEmailStatus'])->name('stampeRate.webhook.email'); // Webhook per pagamenti/licenze Route::post('/webhook/license-status', [StampeRateController::class, 'webhookLicenseStatus'])->name('stampeRate.webhook.license');