92 lines
2.8 KiB
PHP
92 lines
2.8 KiB
PHP
<?php
|
|
require_once __DIR__ . '/../vendor/autoload.php';
|
|
|
|
$dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__));
|
|
$dotenv->load();
|
|
|
|
use DI\Container;
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
use Psr\Log\LoggerInterface;
|
|
use Slim\Exception\HttpException;
|
|
use Slim\Factory\AppFactory;
|
|
use Slim\Routing\RouteCollectorProxy;
|
|
use TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursController;
|
|
use TorstenHettstedt\TimekeepingApi\Middleware\JsonBodyParserMiddleware;
|
|
|
|
$container = new Container();
|
|
|
|
$container->set('databases', function () {
|
|
$dsn = "pgsql:host=${_ENV['DATABASES_HOST']};port=5432;dbname=${_ENV['DATABASES_NAME']}";
|
|
return new PDO($dsn, $_ENV['DATABASES_USER'], $_ENV['DATABASES_PASS']);
|
|
});
|
|
|
|
AppFactory::setContainer($container);
|
|
$app = AppFactory::create();
|
|
$app->add(new JsonBodyParserMiddleware());
|
|
|
|
$app->get(
|
|
'/',
|
|
'TorstenHettstedt\TimekeepingApi\Controller\HelloWorldController:read'
|
|
);
|
|
|
|
$app->get(
|
|
'/views/working-hours/weekly',
|
|
'TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursViewController:browseWeekly'
|
|
);
|
|
|
|
$app->get(
|
|
'/views/working-hours/monthly',
|
|
'TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursViewController:browseMonthly'
|
|
);
|
|
|
|
$app->get(
|
|
'/views/working-hours/yearly',
|
|
'TorstenHettstedt\TimekeepingApi\Controller\WorkingHoursViewController:browseYearly'
|
|
);
|
|
|
|
$app->group('/working-hours', function (RouteCollectorProxy $group) {
|
|
$group->get('', WorkingHoursController::class . ':browse');
|
|
$group->post('', WorkingHoursController::class . ':creat');
|
|
$group->group('/{id:\d\d\d\d-\d\d-\d\d}', function (RouteCollectorProxy $group) {
|
|
$group->get('', WorkingHoursController::class . ':read');
|
|
$group->put('', WorkingHoursController::class . ':update');
|
|
});
|
|
});
|
|
|
|
|
|
// Define Custom Error Handler
|
|
$customErrorHandler = function (
|
|
ServerRequestInterface $request,
|
|
Throwable $exception,
|
|
bool $displayErrorDetails,
|
|
bool $logErrors,
|
|
bool $logErrorDetails,
|
|
?LoggerInterface $logger = null
|
|
) use ($app) {
|
|
if ($logger !== null && $logErrors === true) {
|
|
$logger->error($exception->getMessage());
|
|
}
|
|
$payload = [
|
|
'timestamp' => date('Y-m-d\TH:m:sP'),
|
|
'status' => $exception->getCode(),
|
|
"error" => '',
|
|
'message' => $exception->getMessage(),
|
|
'path' => $exception->getFile()
|
|
];
|
|
|
|
if ($exception instanceof HttpException) {
|
|
$payload['error'] = $exception->getTitle();
|
|
}
|
|
|
|
$response = $app->getResponseFactory()->createResponse($exception->getCode());
|
|
$response->getBody()->write(
|
|
json_encode($payload, JSON_UNESCAPED_UNICODE)
|
|
);
|
|
|
|
return $response;
|
|
};
|
|
|
|
$errorMiddleware = $app->addErrorMiddleware(true, true, true);
|
|
$errorMiddleware->setDefaultErrorHandler($customErrorHandler);
|
|
|
|
$app->run(); |