group('/retribusi', function ($group) use ( $apiKeyMiddleware, $jwtMiddleware, $operatorRoleMiddleware, $adminRoleMiddleware, $ingestController, $gateController, $locationController, $streamController, $tariffController ) { $group->group('/v1', function ($v1Group) use ( $apiKeyMiddleware, $jwtMiddleware, $operatorRoleMiddleware, $adminRoleMiddleware, $ingestController, $gateController, $locationController, $streamController, $tariffController ) { // Ingest routes (with API key middleware) $v1Group->post('/ingest', [$ingestController, 'ingest']) ->add($apiKeyMiddleware); // Frontend routes (with JWT middleware) $v1Group->group('/frontend', function ($frontendGroup) use ( $operatorRoleMiddleware, $adminRoleMiddleware, $gateController, $locationController, $streamController, $tariffController ) { // Read routes (viewer, operator, admin) $frontendGroup->get('/gates', [$gateController, 'getGates']); $frontendGroup->get('/locations', [$locationController, 'getLocations']); $frontendGroup->get('/streams', [$streamController, 'getStreams']); // Write routes (operator, admin) $frontendGroup->post('/locations', [$locationController, 'createLocation']) ->add($operatorRoleMiddleware); $frontendGroup->put('/locations/{code}', [$locationController, 'updateLocation']) ->add($operatorRoleMiddleware); $frontendGroup->delete('/locations/{code}', [$locationController, 'deleteLocation']) ->add($adminRoleMiddleware); $frontendGroup->post('/gates', [$gateController, 'createGate']) ->add($operatorRoleMiddleware); $frontendGroup->put('/gates/{location_code}/{gate_code}', [$gateController, 'updateGate']) ->add($operatorRoleMiddleware); $frontendGroup->delete('/gates/{location_code}/{gate_code}', [$gateController, 'deleteGate']) ->add($adminRoleMiddleware); $frontendGroup->post('/tariffs', [$tariffController, 'createTariff']) ->add($operatorRoleMiddleware); $frontendGroup->put('/tariffs/{location_code}/{gate_code}/{category}', [$tariffController, 'updateTariff']) ->add($operatorRoleMiddleware); $frontendGroup->delete('/tariffs/{location_code}/{gate_code}/{category}', [$tariffController, 'deleteTariff']) ->add($adminRoleMiddleware); })->add($jwtMiddleware); }); }); } }