Commit ebdb478d by Lech Sawon

add api controller

parent f8e57532
......@@ -5,6 +5,7 @@
"php": ">=7.1.3",
"ext-ctype": "*",
"ext-iconv": "*",
"ext-json": "*",
"composer/package-versions-deprecated": "1.11.99.4",
"doctrine/annotations": "^1.0",
"doctrine/doctrine-bundle": "^2.4",
......@@ -35,7 +36,7 @@
"symfony/web-link": "4.4.*",
"symfony/yaml": "4.4.*",
"twig/extra-bundle": "^2.12|^3.0",
"twig/twig": "^2.12|^3.0"
"twig/twig": "^2.12|^3.0",
},
"require-dev": {
"doctrine/doctrine-fixtures-bundle": "^3.4",
......
......@@ -37,6 +37,7 @@ security:
# - { path: ^/admin, roles: ROLE_ADMIN }
# - { path: ^/profile, roles: ROLE_USER }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { 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
public function index(Request $request, RoomRepository $roomRepository): Response
{
$sorting = $request->query->get('sorting');
$queryString = $request->query->get('search');
return $this->render('room/index.html.twig', [
'rooms' => $roomRepository->findSorted($sorting),
'sorting' => $sorting
'rooms' => $roomRepository->findSorted($sorting, $queryString),
'sorting' => $sorting,
'queryString' =>$queryString
]);
}
......
......@@ -23,7 +23,7 @@ class RoomRepository extends ServiceEntityRepository
/**
* @return Room[]
*/
public function findSorted(?string $sorting): array
public function findSorted(?string $sorting, ?string $queryString): array
{
$qb = $this
->createQueryBuilder('room');
......@@ -34,6 +34,11 @@ class RoomRepository extends ServiceEntityRepository
$qb->addOrderBy('room.name', 'DESC');
}
if ($queryString) {
$qb->andWhere('room.name LIKE :queryString');
$qb->setParameter(':queryString', "%$queryString%");
}
$query = $qb->getQuery();
return $query->getResult();
......
......@@ -6,16 +6,21 @@ namespace App\Service\Reservation;
use App\Entity\Reservation;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
final class AddReservation
{
private EntityManagerInterface $manager;
public function __construct(EntityManagerInterface $manager)
private LoggerInterface $logger;
public function __construct(EntityManagerInterface $manager, LoggerInterface $logger)
{
$this->manager = $manager;
$this->logger = $logger;
}
public function add(Reservation $reservation): void
{
//dodatkow logika biznesowa do wykonania w czasie dodania rezerwacji
......
......@@ -5,6 +5,11 @@
{% block body %}
<h1>Room index</h1>
{{ include('_embed/_simple_sorting.html.twig') }}
<form>
<input type="text" name="search"/>
<input type="submit"/>
</form>
<table class="table">
<thead>
<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