Initial commit: Slim Framework 4 API Retribusi dengan modular architecture

This commit is contained in:
mwpn
2025-12-17 10:43:03 +07:00
commit 39f23388a7
45 changed files with 5439 additions and 0 deletions

View File

@@ -0,0 +1,108 @@
<?php
declare(strict_types=1);
namespace App\Modules\Retribusi\Ingest;
use App\Support\ResponseHelper;
use App\Support\Validator;
use PDOException;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class IngestController
{
private IngestService $service;
public function __construct(IngestService $service)
{
$this->service = $service;
}
public function ingest(
ServerRequestInterface $request,
ResponseInterface $response
): ResponseInterface {
$body = $request->getParsedBody();
// Validate request body
if (!is_array($body)) {
return ResponseHelper::json(
$response,
[
'error' => 'validation_error',
'fields' => ['body' => 'Invalid JSON body']
],
422
);
}
// Basic format validation
$errors = Validator::validateIngest($body);
if (!empty($errors)) {
return ResponseHelper::json(
$response,
[
'error' => 'validation_error',
'fields' => $errors
],
422
);
}
// Get source IP
$serverParams = $request->getServerParams();
$sourceIp = $serverParams['REMOTE_ADDR'] ?? '0.0.0.0';
try {
// Process ingest with database validation
$result = $this->service->processIngest($body, $sourceIp);
if (!$result['valid']) {
// Not found error
if ($result['code'] === 'not_found') {
return ResponseHelper::json(
$response,
[
'error' => 'not_found',
'message' => $result['error']
],
404
);
}
// Other validation errors
return ResponseHelper::json(
$response,
[
'error' => 'validation_error',
'message' => $result['error']
],
422
);
}
// Success
return ResponseHelper::json(
$response,
[
'success' => true,
'data' => ['stored' => true],
'timestamp' => time()
]
);
} catch (PDOException $e) {
// Database error
return ResponseHelper::json(
$response,
[
'error' => 'server_error',
'message' => 'Database error occurred'
],
500
);
}
}
}