netgescon-day0/app/Modules/StampeRate/Routes/web.php

158 lines
8.4 KiB
PHP

<?php
use Illuminate\Support\Facades\Route;
use App\Modules\StampeRate\Controllers\StampeRateController;
use App\Modules\StampeRate\Controllers\TemplateController;
use App\Modules\StampeRate\Controllers\HistoryController;
/*
|--------------------------------------------------------------------------
| StampeRate Module Routes
|--------------------------------------------------------------------------
|
| Route del modulo Stampe Rate Avanzate
| Tutte le route sono prefissate con "stampe-rate" e raggruppate
| sotto il middleware auth e permission
|
*/
Route::middleware(['auth', 'verified'])->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');