From 0a59cb60dbff61247b8f7592e566a091f6b5811a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20L=C3=BCcke?= Date: Wed, 7 Apr 2021 12:59:51 +0200 Subject: [PATCH] Die Gemeinsamkeiten der Controller wurde in eine abstrakte Klasse gepackt. --- api/src/Controller/AbstractController.php | 47 +++++++++++++++ api/src/Controller/WorkingHoursController.php | 40 +------------ .../Controller/WorkingHoursViewController.php | 58 +++---------------- 3 files changed, 56 insertions(+), 89 deletions(-) create mode 100644 api/src/Controller/AbstractController.php diff --git a/api/src/Controller/AbstractController.php b/api/src/Controller/AbstractController.php new file mode 100644 index 0000000..c0cf8a9 --- /dev/null +++ b/api/src/Controller/AbstractController.php @@ -0,0 +1,47 @@ +has('databases') === false) { + throw new NotDatabasesException('Datenbank ist nicht Vorhanden'); + } + $this->databases = $container->get('databases'); + } + + /** + * @param Response $response + * @param JsonSerializable|JsonSerializable[] $data + * @param int $status_code + * + * @return Response + */ + protected function printResponse(Response $response, mixed $data, int $status_code): Response { + $payload = json_encode($data); + + $response->getBody()->write($payload); + + return $response + ->withHeader('Content-Type', 'application/json') + ->withStatus($status_code); + } + +} \ No newline at end of file diff --git a/api/src/Controller/WorkingHoursController.php b/api/src/Controller/WorkingHoursController.php index ce567ab..16cb385 100644 --- a/api/src/Controller/WorkingHoursController.php +++ b/api/src/Controller/WorkingHoursController.php @@ -2,13 +2,10 @@ namespace TorstenHettstedt\TimekeepingApi\Controller; - use DateInterval; use DateTime; use Exception; use Fig\Http\Message\StatusCodeInterface; -use PDO; -use Psr\Container\ContainerInterface; use Slim\Exception\HttpBadRequestException; use Slim\Exception\HttpInternalServerErrorException; use Slim\Exception\HttpNotFoundException; @@ -19,26 +16,9 @@ use TorstenHettstedt\TimekeepingApi\Repositories\RepositoryRecordAlreadyExistExc use TorstenHettstedt\TimekeepingApi\Repositories\RepositoryRecordNotFoundException; use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursRepository; -class WorkingHoursController +class WorkingHoursController extends AbstractController { - protected PDO $databases; - - /** - * WorkingHoursController constructor. - * - * @param ContainerInterface $container - * - * @throws NotDatabasesException - */ - public function __construct(ContainerInterface $container) - { - if ($container->has('databases') === false) { - throw new NotDatabasesException('Datenbank ist nicht Vorhanden'); - } - $this->databases = $container->get('databases'); - } - /** * @param Request $request * @param Response $response @@ -131,24 +111,6 @@ class WorkingHoursController return $this->printResponse($response, $model, StatusCodeInterface::STATUS_CREATED); } - /** - * @param Response $response - * @param mixed $data - * @param int $status_code - * - * @return Response - */ - protected function printResponse(Response $response, mixed $data, int $status_code): Response - { - $payload = json_encode($data); - - $response->getBody()->write($payload); - - return $response - ->withHeader('Content-Type', 'application/json') - ->withStatus($status_code); - } - /** * @param Request $request * @param string $date diff --git a/api/src/Controller/WorkingHoursViewController.php b/api/src/Controller/WorkingHoursViewController.php index fbd3b45..917b163 100644 --- a/api/src/Controller/WorkingHoursViewController.php +++ b/api/src/Controller/WorkingHoursViewController.php @@ -4,41 +4,16 @@ namespace TorstenHettstedt\TimekeepingApi\Controller; use Exception; -use PDO; -use Psr\Container\ContainerInterface; +use Fig\Http\Message\StatusCodeInterface; use Slim\Exception\HttpInternalServerErrorException; use Slim\Psr7\Request; use Slim\Psr7\Response; -use TorstenHettstedt\TimekeepingApi\Models\WorkingHoursView; use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursMonthlyViewRepository; use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursWeeklyViewRepository; use TorstenHettstedt\TimekeepingApi\Repositories\WorkingHoursYearlyViewRepository; -class WorkingHoursViewController +class WorkingHoursViewController extends AbstractController { - protected PDO $databases; - - /** - * @var ContainerInterface - */ - protected ContainerInterface $container; - - /** - * WorkingHoursViewController constructor. - * - * @param ContainerInterface $container - * - * @throws NotDatabasesException - */ - public function __construct(ContainerInterface $container) - { - $this->container = $container; - if ($container->has('databases') === false) { - throw new NotDatabasesException('Datenbank ist nicht Vorhanden'); - } - $this->databases = $container->get('databases'); - } - /** * @param Request $request * @param Response $response @@ -51,9 +26,9 @@ class WorkingHoursViewController */ public function browseWeekly(Request $request, Response $response, array $args): Response { - $repository = new WorkingHoursWeeklyViewRepository($this->container->get('databases')); + $repository = new WorkingHoursWeeklyViewRepository($this->databases); try { - return $this->printResponse($response, $repository->findAll()); + return $this->printResponse($response, $repository->findAll(), StatusCodeInterface::STATUS_OK); } catch (Exception $exception) { throw new HttpInternalServerErrorException($request, 'Der Wert für das Datum oder die Zeit ist falsch in der Datenbank', $exception); @@ -72,9 +47,9 @@ class WorkingHoursViewController */ public function browseMonthly(Request $request, Response $response, array $args): Response { - $repository = new WorkingHoursMonthlyViewRepository($this->container->get('databases')); + $repository = new WorkingHoursMonthlyViewRepository($this->databases); try { - return $this->printResponse($response, $repository->findAll()); + return $this->printResponse($response, $repository->findAll(), StatusCodeInterface::STATUS_OK); } catch (Exception $exception) { throw new HttpInternalServerErrorException($request, 'Der Wert für das Datum oder die Zeit ist falsch in der Datenbank', $exception); @@ -93,30 +68,13 @@ class WorkingHoursViewController */ public function browseYearly(Request $request, Response $response, array $args): Response { - $repository = new WorkingHoursYearlyViewRepository($this->container->get('databases')); + $repository = new WorkingHoursYearlyViewRepository($this->databases); try { - return $this->printResponse($response, $repository->findAll()); + return $this->printResponse($response, $repository->findAll(), StatusCodeInterface::STATUS_OK); } catch (Exception $exception) { throw new HttpInternalServerErrorException($request, 'Der Wert für das Datum oder die Zeit ist falsch in der Datenbank', $exception); } } - /** - * @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