Initial commit: Slim Framework 4 API Retribusi dengan modular architecture
This commit is contained in:
134
src/Modules/Retribusi/RetribusiRoutes.php
Normal file
134
src/Modules/Retribusi/RetribusiRoutes.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Modules\Retribusi;
|
||||
|
||||
use App\Config\AppConfig;
|
||||
use App\Middleware\ApiKeyMiddleware;
|
||||
use App\Middleware\JwtMiddleware;
|
||||
use App\Middleware\RoleMiddleware;
|
||||
use App\Modules\Retribusi\Frontend\AuditService;
|
||||
use App\Modules\Retribusi\Frontend\GateController;
|
||||
use App\Modules\Retribusi\Frontend\LocationController;
|
||||
use App\Modules\Retribusi\Frontend\RetribusiReadService;
|
||||
use App\Modules\Retribusi\Frontend\RetribusiWriteService;
|
||||
use App\Modules\Retribusi\Frontend\StreamController;
|
||||
use App\Modules\Retribusi\Frontend\TariffController;
|
||||
use App\Modules\Retribusi\Ingest\IngestController;
|
||||
use App\Modules\Retribusi\Ingest\IngestService;
|
||||
use App\Support\Database;
|
||||
use PDO;
|
||||
use PDOException;
|
||||
use Slim\App;
|
||||
|
||||
class RetribusiRoutes
|
||||
{
|
||||
/**
|
||||
* Register retribusi routes
|
||||
*
|
||||
* @param App $app
|
||||
* @return void
|
||||
*/
|
||||
public static function register(App $app): void
|
||||
{
|
||||
// Get API key from environment
|
||||
$apiKey = AppConfig::get('RETRIBUSI_API_KEY', '');
|
||||
$apiKeyMiddleware = new ApiKeyMiddleware($apiKey);
|
||||
|
||||
// JWT middleware for frontend routes
|
||||
$jwtMiddleware = new JwtMiddleware();
|
||||
|
||||
// Role middleware
|
||||
$operatorRoleMiddleware = new RoleMiddleware(['admin', 'operator']);
|
||||
$adminRoleMiddleware = new RoleMiddleware(['admin']);
|
||||
|
||||
// Get database connection
|
||||
$dbHost = AppConfig::get('DB_HOST', 'localhost');
|
||||
$dbName = AppConfig::get('DB_NAME', '');
|
||||
$dbUser = AppConfig::get('DB_USER', '');
|
||||
$dbPass = AppConfig::get('DB_PASS', '');
|
||||
|
||||
$db = Database::getConnection($dbHost, $dbName, $dbUser, $dbPass);
|
||||
|
||||
// Initialize services with database
|
||||
$ingestService = new IngestService($db);
|
||||
$ingestController = new IngestController($ingestService);
|
||||
|
||||
$readService = new RetribusiReadService($db);
|
||||
$writeService = new RetribusiWriteService($db);
|
||||
$auditService = new AuditService($db);
|
||||
|
||||
$gateController = new GateController($readService, $writeService, $auditService);
|
||||
$locationController = new LocationController($readService, $writeService, $auditService);
|
||||
$streamController = new StreamController($readService);
|
||||
$tariffController = new TariffController($writeService, $auditService);
|
||||
|
||||
// Register routes
|
||||
$app->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);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user