Die Gemeinsamkeiten der Controller wurde in eine abstrakte Klasse gepackt.

This commit is contained in:
2021-04-07 12:59:51 +02:00
parent 9430f3c74c
commit 0a59cb60db
3 changed files with 56 additions and 89 deletions
@@ -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);
}
}