api-erstellen #1

Merged
TorstenHettstedt merged 52 commits from api-erstellen into master 2021-04-07 13:00:46 +02:00
3 changed files with 131 additions and 1 deletions
Showing only changes of commit 09ffadc596 - Show all commits
+19 -1
View File
@@ -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);
@@ -0,0 +1,11 @@
<?php
namespace TorstenHettstedt\TimekeepingApi\Controller;
use Exception;
class NotDatabasesException extends Exception
{
}
@@ -0,0 +1,101 @@
<?php
namespace TorstenHettstedt\TimekeepingApi\Controller;
use Exception;
use Psr\Container\ContainerInterface;
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
{
/**
* @var ContainerInterface
*/
protected ContainerInterface $container;
public function __construct(ContainerInterface $container) {
$this->container = $container;
}
/**
* @param Request $request
* @param Response $response
* @param mixed[] $args
*
* @return Response
*
* @noinspection PhpUnusedParameterInspection
* @throws NotDatabasesException
* @throws Exception
TorstenHettstedt marked this conversation as resolved Outdated
Outdated
Review

Das Verhalten ist in WorkingHoursController besser gelöst.

Das Verhalten ist in `WorkingHoursController` besser gelöst.
*/
public function browseWeekly(Request $request, Response $response, array $args): Response
{
if ($this->container->has('databases') === false) {
TorstenHettstedt marked this conversation as resolved Outdated
Outdated
Review

Das kann ähnlich dem WorkingHoursController in den Konstruktor.

Das kann ähnlich dem `WorkingHoursController` in den Konstruktor.
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
TorstenHettstedt marked this conversation as resolved Outdated
Outdated
Review

Das Verhalten ist in WorkingHoursController besser gelöst.

Das Verhalten ist in `WorkingHoursController` besser gelöst.
*/
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
TorstenHettstedt marked this conversation as resolved Outdated
Outdated
Review

Das Verhalten ist in WorkingHoursController besser gelöst.

Das Verhalten ist in `WorkingHoursController` besser gelöst.
*/
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
TorstenHettstedt marked this conversation as resolved Outdated
Outdated
Review

Da in beiden Controllern die fast gleiche Methode aufgerufen wird, kann diese Methode auch in eine Abstrakte Klasse verschoben werden.

Da in beiden Controllern die fast gleiche Methode aufgerufen wird, kann diese Methode auch in eine Abstrakte Klasse verschoben werden.
{
$payload = json_encode($data);
$response->getBody()->write($payload);
return $response
->withHeader('Content-Type', 'application/json')
->withStatus(200);
}
}