Files
Investidor-V2/routes/api.php
T
2026-10-21 11:59:50 +02:00

69 lines
5.3 KiB
PHP

<?php
use App\Http\Controllers\Api\V1\HomeController;
use App\Http\Controllers\Api\V1\InterestRequestController;
use App\Http\Controllers\Api\V1\LegislationSourceController;
use App\Http\Controllers\Api\V1\OpportunityController;
use App\Http\Controllers\Api\V1\ReferenceCatalogController;
use App\Http\Controllers\Api\V1\SectorController;
use App\Http\Controllers\Api\V1\SimulationController;
use App\Http\Controllers\Api\V1\SimulationFormDraftController;
use App\Http\Controllers\Api\V1\SimulationTaxParameterController;
use App\Http\Controllers\PortalServicesController;
use App\Http\Controllers\PublicBusinessOpportunityController;
use App\Http\Middleware\CorrelationId;
use App\Http\Middleware\EnsureSimulationRecoveryCookie;
use App\Services\SimulationPublishedFiscal;
use Illuminate\Support\Facades\Route;
Route::prefix('v1')->middleware(['throttle:api', CorrelationId::class])->group(function () {
Route::get('/catalogs/{catalog}', [ReferenceCatalogController::class, 'index'])
->whereIn('catalog', ['authorities', 'jurisdictions', 'economic-activities', 'countries']);
Route::get('/home', [HomeController::class, 'show']);
Route::get('/sectors', [SectorController::class, 'index']);
Route::get('/sectors/{slug}', [SectorController::class, 'show']);
Route::get('/opportunities/search', [OpportunityController::class, 'search']);
Route::get('/opportunities/{slug}', [OpportunityController::class, 'show']);
Route::get('/business-opportunities', [PublicBusinessOpportunityController::class, 'index']);
Route::get('/business-opportunities/{slug}', [PublicBusinessOpportunityController::class, 'show']);
Route::post('/interest-requests', [InterestRequestController::class, 'store'])
->middleware(['web', 'auth', 'throttle:10,1']);
Route::get('/legislation/sources', [LegislationSourceController::class, 'index']);
Route::get('/documents/recommendations', [PortalServicesController::class, 'recommendations']);
});
Route::prefix('v1')->middleware(['web', 'throttle:api', CorrelationId::class])->group(function () {
Route::get('/fiscal-consumer', fn (SimulationPublishedFiscal $consumer) => response()->json(['data' => $consumer->availability()])->header('Cache-Control', 'no-store'));
Route::post('/tax-parameters/resolve', [SimulationTaxParameterController::class, 'resolve'])->middleware('throttle:20,1');
Route::get('/questionnaires/{code}', [SimulationController::class, 'questionnaire']);
Route::middleware(EnsureSimulationRecoveryCookie::class)->group(function () {
Route::get('/simulation-drafts/current', [SimulationFormDraftController::class, 'current']);
Route::delete('/simulation-drafts/current', [SimulationFormDraftController::class, 'forgetCurrent'])->middleware('throttle:simulation-draft-writes');
Route::post('/simulation-drafts', [SimulationFormDraftController::class, 'store'])->middleware('throttle:simulation-draft-writes');
Route::get('/simulation-drafts', [SimulationFormDraftController::class, 'index'])->middleware('auth');
Route::get('/simulation-drafts/claim-preview', [SimulationFormDraftController::class, 'claimPreview'])->middleware('auth');
Route::post('/simulation-drafts/claim', [SimulationFormDraftController::class, 'claim'])->middleware(['auth', 'verified', 'throttle:simulation-draft-writes']);
Route::get('/simulation-drafts/linkable-businesses', [SimulationFormDraftController::class, 'linkableBusinesses'])->middleware(['auth', 'verified']);
Route::get('/simulation-drafts/{id}/business-link', [SimulationFormDraftController::class, 'businessLink'])->middleware(['auth', 'verified']);
Route::post('/simulation-drafts/{id}/business-link', [SimulationFormDraftController::class, 'linkBusiness'])->middleware(['auth', 'verified', 'throttle:simulation-draft-writes']);
Route::delete('/simulation-drafts/{id}/business-link', [SimulationFormDraftController::class, 'unlinkBusiness'])->middleware(['auth', 'verified', 'throttle:simulation-draft-writes']);
Route::get('/simulation-drafts/{id}', [SimulationFormDraftController::class, 'show']);
Route::put('/simulation-drafts/{id}', [SimulationFormDraftController::class, 'update'])->middleware('throttle:simulation-draft-writes');
Route::post('/simulation-drafts/{id}/touch', [SimulationFormDraftController::class, 'renew'])->middleware('throttle:simulation-draft-writes');
Route::post('/simulation-drafts/{id}/conversions', [SimulationFormDraftController::class, 'attachSimulation'])->middleware('throttle:simulation-draft-writes');
Route::delete('/simulation-drafts/{id}', [SimulationFormDraftController::class, 'destroy'])->middleware('throttle:simulation-draft-writes');
Route::post('/simulations', [SimulationController::class, 'store'])->middleware('throttle:simulation-calculations');
Route::get('/simulations/history', [SimulationController::class, 'history']);
Route::get('/simulations/{id}', [SimulationController::class, 'show']);
Route::patch('/simulations/{id}/scenarios/{scenarioId}', [SimulationController::class, 'updateScenario'])->middleware('throttle:simulation-scenario-updates');
Route::get('/simulations/{id}/reports/{reportId}', [SimulationController::class, 'report']);
Route::get('/simulations/{id}/jobs', [SimulationController::class, 'jobs']);
});
});