user(); })->middleware('auth:sanctum'); // --- IL NOSTRO ENDPOINT DI IMPORTAZIONE --- // Proteggiamo la rotta con 'auth:sanctum', che richiede un token API per l'accesso. Route::middleware('auth:sanctum')->prefix('v1')->group(function () { Route::post('/import/condominio', [ImportController::class, 'importCondominio'])->name('api.import.condominio'); // In futuro aggiungeremo qui le rotte per importare le unità, i fornitori, etc. Route::post('/import/fornitore', [ImportController::class, 'importFornitore'])->name('api.import.fornitore'); Route::post('/import/anagrafica', [ImportController::class, 'importAnagrafica'])->name('api.import.anagrafica'); Route::get('/incassi/hub', [\App\Http\Controllers\Api\IncassiHubController::class, 'index'])->name('api.incassi.hub'); }); // --- API NETGESCON PER INTEGRAZIONE GESTIONALE --- Route::prefix('netgescon/v1')->group(function () { // Version endpoint (public): usato per verifica installazione / confronto versioni. Route::get('/version', function () { return response()->json([ 'success' => true, 'name' => config('app.name'), 'version' => (string) config('netgescon.version', '0.0.0'), 'laravel' => app()->version(), 'timestamp' => now(), ]); })->name('api.netgescon.version'); // Soggetti/Rubrica API Route::prefix('soggetti')->group(function () { Route::post('/receive', [SoggettiApiController::class, 'receiveFromGestionale']) ->name('api.netgescon.soggetti.receive'); Route::get('/send', [SoggettiApiController::class, 'sendToGestionale']) ->name('api.netgescon.soggetti.send'); Route::get('/status', [SoggettiApiController::class, 'status']) ->name('api.netgescon.soggetti.status'); }); // Endpoint di test per verificare connettività Route::get('/ping', function () { return response()->json([ 'success' => true, 'message' => 'NetGescon API is alive', 'timestamp' => now(), 'version' => (string) config('netgescon.version', '0.0.0'), ]); })->name('api.netgescon.ping'); Route::post('/water-meter/readings', [\App\Http\Controllers\Api\WaterMeterGatewayController::class, 'storeReading']) ->name('api.netgescon.water_meter.readings'); }); // --- API PER DISTRIBUZIONE MULTI-SERVER --- Route::prefix('v1/distribution')->group(function () { // Health check pubblico per verificare stato server Route::get('/health', [\App\Http\Controllers\Api\DistributionController::class, 'health'])->name('api.health'); // Endpoint pubblici update (free/licensed con validazione su query params) Route::get('/updates/manifest', [\App\Http\Controllers\Api\DistributionController::class, 'updatesManifest']) ->name('api.distribution.updates.manifest'); Route::get('/updates/package', [\App\Http\Controllers\Api\DistributionController::class, 'updatesPackage']) ->name('api.distribution.updates.package'); // API per migrazione amministratori (richiede autenticazione) Route::middleware('auth:sanctum')->group(function () { Route::post('/import-administrator', [\App\Http\Controllers\Api\DistributionController::class, 'importAdministrator']); Route::post('/activate-administrator', [\App\Http\Controllers\Api\DistributionController::class, 'activateAdministrator']); Route::post('/sync-administrator', [\App\Http\Controllers\Api\DistributionController::class, 'syncAdministrator']); Route::post('/backup-administrator', [\App\Http\Controllers\Api\DistributionController::class, 'backupAdministrator']); Route::get('/administrator-routing/{codice}', [\App\Http\Controllers\Api\DistributionController::class, 'getAdministratorRouting']); }); }); // --- API CTI Panasonic NS1000 (CSTA) --- Route::prefix('v1/cti/panasonic')->group(function () { Route::post('/incoming', [\App\Http\Controllers\Api\PanasonicCstaController::class, 'incoming']) ->name('api.cti.panasonic.incoming'); Route::post('/call-ended', [\App\Http\Controllers\Api\PanasonicCstaController::class, 'callEnded']) ->name('api.cti.panasonic.call_ended'); Route::get('/lookup', [\App\Http\Controllers\Api\PanasonicCstaController::class, 'lookup']) ->name('api.cti.panasonic.lookup'); Route::get('/click-to-call/pending', [\App\Http\Controllers\Api\PanasonicCstaController::class, 'pendingClickToCall']) ->name('api.cti.panasonic.click_to_call.pending'); Route::post('/click-to-call/{clickToCallRequest}/claim', [\App\Http\Controllers\Api\PanasonicCstaController::class, 'claimClickToCall']) ->name('api.cti.panasonic.click_to_call.claim'); Route::post('/click-to-call/{clickToCallRequest}/status', [\App\Http\Controllers\Api\PanasonicCstaController::class, 'updateClickToCallStatus']) ->name('api.cti.panasonic.click_to_call.status'); }); // --- API Comunicazioni Omnicanale (Telegram / WhatsApp test) --- Route::prefix('v1/communications')->group(function () { Route::post('/telegram/webhook', [\App\Http\Controllers\Api\CommunicationWebhookController::class, 'telegram']) ->name('api.communications.telegram.webhook'); Route::post('/whatsapp/webhook', [\App\Http\Controllers\Api\CommunicationWebhookController::class, 'whatsapp']) ->name('api.communications.whatsapp.webhook'); }); Route::middleware('auth:sanctum')->prefix('v1/communications')->group(function () { Route::post('/telegram/send-test', [\App\Http\Controllers\Api\CommunicationWebhookController::class, 'sendTelegramTest']) ->name('api.communications.telegram.send_test'); Route::post('/whatsapp/send-test', [\App\Http\Controllers\Api\CommunicationWebhookController::class, 'sendWhatsappTest']) ->name('api.communications.whatsapp.send_test'); });