1
0

index.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. declare(strict_types=1);
  3. use Monolog\Formatter\JsonFormatter;
  4. use Monolog\Handler\StreamHandler;
  5. use Monolog\Logger;
  6. use Psr\Http\Message\ResponseInterface as Response;
  7. use Psr\Http\Message\ServerRequestInterface as Request;
  8. use Slim\Factory\AppFactory;
  9. require __DIR__ . '/../vendor/autoload.php';
  10. $settings = require __DIR__ . '/../config/settings.php';
  11. $logger = new Logger('api');
  12. $handler = new StreamHandler('php://stdout', $settings['log_level']);
  13. $handler->setFormatter(new JsonFormatter());
  14. $logger->pushHandler($handler);
  15. $app = AppFactory::create();
  16. $app->addRoutingMiddleware();
  17. $app->addBodyParsingMiddleware();
  18. $app->addErrorMiddleware($settings['app_env'] === 'development', true, true, $logger);
  19. $app->get('/healthz', function (Request $request, Response $response): Response {
  20. // Stub healthcheck. Later milestones extend this with `db` and `jobs` fields.
  21. $response->getBody()->write((string) json_encode(['status' => 'ok']));
  22. return $response->withHeader('Content-Type', 'application/json');
  23. });
  24. $app->map(
  25. ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
  26. '/{routes:.+}',
  27. function (Request $request, Response $response): Response {
  28. $response->getBody()->write((string) json_encode(['error' => 'not_found']));
  29. return $response
  30. ->withHeader('Content-Type', 'application/json')
  31. ->withStatus(404);
  32. }
  33. );
  34. $app->run();