Commit ebdb478d by Lech Sawon

add api controller

parent f8e57532
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
"php": ">=7.1.3", "php": ">=7.1.3",
"ext-ctype": "*", "ext-ctype": "*",
"ext-iconv": "*", "ext-iconv": "*",
"ext-json": "*",
"composer/package-versions-deprecated": "1.11.99.4", "composer/package-versions-deprecated": "1.11.99.4",
"doctrine/annotations": "^1.0", "doctrine/annotations": "^1.0",
"doctrine/doctrine-bundle": "^2.4", "doctrine/doctrine-bundle": "^2.4",
...@@ -35,7 +36,7 @@ ...@@ -35,7 +36,7 @@
"symfony/web-link": "4.4.*", "symfony/web-link": "4.4.*",
"symfony/yaml": "4.4.*", "symfony/yaml": "4.4.*",
"twig/extra-bundle": "^2.12|^3.0", "twig/extra-bundle": "^2.12|^3.0",
"twig/twig": "^2.12|^3.0" "twig/twig": "^2.12|^3.0",
}, },
"require-dev": { "require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.4", "doctrine/doctrine-fixtures-bundle": "^3.4",
......
...@@ -37,6 +37,7 @@ security: ...@@ -37,6 +37,7 @@ security:
# - { path: ^/admin, roles: ROLE_ADMIN } # - { path: ^/admin, roles: ROLE_ADMIN }
# - { path: ^/profile, roles: ROLE_USER } # - { path: ^/profile, roles: ROLE_USER }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/ , roles: ROLE_USER } - { path: ^/ , roles: ROLE_USER }
<?php
declare(strict_types=1);
namespace App\Controller\Api;
use App\Entity\Reservation;
use App\Entity\Room;
use App\Repository\RoomRepository;
use App\Service\Reservation\AddReservation;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
final class AddReservationController
{
/**
* @Route("/api/reservation", name="api_add_reservation", methods={"POST"})
*/
public function __invoke(
Request $request,
AddReservation $addReservation,
RoomRepository $roomRepository
): JsonResponse {
// ten kod mógłby być bardziej elegancki, ale jako przykład jest good enough
$array = json_decode($request->getContent(), true);
$room = $roomRepository->find($array['roomId']);
if (!$room instanceof Room) {
//było by lepiej użyć własnego exception
throw new \RuntimeException('Room not found');
}
$reservation = new Reservation();
$reservation
->setRoom($room)
->setDateFrom(new \DateTime($array['dateFrom']))
->setDateEnd(new \DateTime($array['dateTo']))
;
$addReservation->add($reservation);
return new JsonResponse(['status' => 'ok']);
}
}
...@@ -21,10 +21,12 @@ class RoomController extends AbstractController ...@@ -21,10 +21,12 @@ class RoomController extends AbstractController
public function index(Request $request, RoomRepository $roomRepository): Response public function index(Request $request, RoomRepository $roomRepository): Response
{ {
$sorting = $request->query->get('sorting'); $sorting = $request->query->get('sorting');
$queryString = $request->query->get('search');
return $this->render('room/index.html.twig', [ return $this->render('room/index.html.twig', [
'rooms' => $roomRepository->findSorted($sorting), 'rooms' => $roomRepository->findSorted($sorting, $queryString),
'sorting' => $sorting 'sorting' => $sorting,
'queryString' =>$queryString
]); ]);
} }
......
...@@ -23,7 +23,7 @@ class RoomRepository extends ServiceEntityRepository ...@@ -23,7 +23,7 @@ class RoomRepository extends ServiceEntityRepository
/** /**
* @return Room[] * @return Room[]
*/ */
public function findSorted(?string $sorting): array public function findSorted(?string $sorting, ?string $queryString): array
{ {
$qb = $this $qb = $this
->createQueryBuilder('room'); ->createQueryBuilder('room');
...@@ -34,6 +34,11 @@ class RoomRepository extends ServiceEntityRepository ...@@ -34,6 +34,11 @@ class RoomRepository extends ServiceEntityRepository
$qb->addOrderBy('room.name', 'DESC'); $qb->addOrderBy('room.name', 'DESC');
} }
if ($queryString) {
$qb->andWhere('room.name LIKE :queryString');
$qb->setParameter(':queryString', "%$queryString%");
}
$query = $qb->getQuery(); $query = $qb->getQuery();
return $query->getResult(); return $query->getResult();
......
...@@ -6,16 +6,21 @@ namespace App\Service\Reservation; ...@@ -6,16 +6,21 @@ namespace App\Service\Reservation;
use App\Entity\Reservation; use App\Entity\Reservation;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
final class AddReservation final class AddReservation
{ {
private EntityManagerInterface $manager; private EntityManagerInterface $manager;
public function __construct(EntityManagerInterface $manager) private LoggerInterface $logger;
public function __construct(EntityManagerInterface $manager, LoggerInterface $logger)
{ {
$this->manager = $manager; $this->manager = $manager;
$this->logger = $logger;
} }
public function add(Reservation $reservation): void public function add(Reservation $reservation): void
{ {
//dodatkow logika biznesowa do wykonania w czasie dodania rezerwacji //dodatkow logika biznesowa do wykonania w czasie dodania rezerwacji
......
...@@ -5,6 +5,11 @@ ...@@ -5,6 +5,11 @@
{% block body %} {% block body %}
<h1>Room index</h1> <h1>Room index</h1>
{{ include('_embed/_simple_sorting.html.twig') }} {{ include('_embed/_simple_sorting.html.twig') }}
<form>
<input type="text" name="search"/>
<input type="submit"/>
</form>
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment