diff --git a/api/html/index.php b/api/html/index.php index 9400c20..3330c7b 100644 --- a/api/html/index.php +++ b/api/html/index.php @@ -17,7 +17,25 @@ $container->set('databases', function () { AppFactory::setContainer($container); $app = AppFactory::create(); -$app->get('/', 'TorstenHettstedt\TimekeepingApi\Controller\HelloWorldController:read'); +$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->addErrorMiddleware(true, true, true); diff --git a/api/src/Controller/NotDatabasesException.php b/api/src/Controller/NotDatabasesException.php new file mode 100644 index 0000000..515fd85 --- /dev/null +++ b/api/src/Controller/NotDatabasesException.php @@ -0,0 +1,11 @@ +container = $container; + } + + /** + * @param Request $request + * @param Response $response + * @param mixed[] $args + * + * @return Response + * + * @noinspection PhpUnusedParameterInspection + * @throws NotDatabasesException + * @throws Exception + */ + public function browseWeekly(Request $request, Response $response, array $args): Response + { + if ($this->container->has('databases') === false) { + throw new NotDatabasesException('Datenbank ist nicht Vorhanden'); + } + $repository = new WorkingHoursWeeklyViewRepository($this->container->get('databases')); + return $this->printResponse($response, $repository->findAll()); + } + + /** + * @param Request $request + * @param Response $response + * @param mixed[] $args + * + * @return Response + * + * @noinspection PhpUnusedParameterInspection + * @throws Exception + */ + public function browseMonthly(Request $request, Response $response, array $args): Response + { + if ($this->container->has('databases') === false) { + throw new NotDatabasesException('Datenbank ist nicht Vorhanden'); + } + $repository = new WorkingHoursMonthlyViewRepository($this->container->get('databases')); + return $this->printResponse($response, $repository->findAll()); + } + + /** + * @param Request $request + * @param Response $response + * @param mixed[] $args + * + * @return Response + * + * @noinspection PhpUnusedParameterInspection + * @throws Exception + */ + public function browseYearly(Request $request, Response $response, array $args): Response + { + if ($this->container->has('databases') === false) { + throw new NotDatabasesException('Datenbank ist nicht Vorhanden'); + } + $repository = new WorkingHoursYearlyViewRepository($this->container->get('databases')); + return $this->printResponse($response, $repository->findAll()); + } + + /** + * @param Response $response + * @param WorkingHoursView[] $data + * + * @return Response + */ + protected function printResponse( Response $response, array $data): Response + { + $payload = json_encode($data); + + $response->getBody()->write($payload); + + return $response + ->withHeader('Content-Type', 'application/json') + ->withStatus(200); + } + +} \ No newline at end of file