From 48b0e95da20d7859eb912cffa1f96f0beb7467b9 Mon Sep 17 00:00:00 2001 From: "Alex. Plokhikh" <a.plohih@iqdev.digital> Date: Tue, 16 Apr 2024 03:24:28 +0500 Subject: [PATCH] add diff days action | controller | req --- src/Actions/DiffDaysAction.php | 21 +++++++++++++++++++ src/Controller/DiffDaysController.php | 14 ++++++------- src/Requests/DiffDaysRequest.php | 29 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 src/Actions/DiffDaysAction.php create mode 100644 src/Requests/DiffDaysRequest.php diff --git a/src/Actions/DiffDaysAction.php b/src/Actions/DiffDaysAction.php new file mode 100644 index 0000000..c3ee3c2 --- /dev/null +++ b/src/Actions/DiffDaysAction.php @@ -0,0 +1,21 @@ +<?php + +namespace App\Actions; + +use DateTimeImmutable; + +class DiffDaysAction +{ + /** + * Вернет кол-во дней между датами + * @param DateTimeImmutable $dateStart дата начала + * @param DateTimeImmutable $dateEnd дата Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ + * @return int + * */ + public function act( + DateTimeImmutable $dateStart, + DateTimeImmutable $dateEnd + ): int { + return (int) $dateStart->diff($dateEnd)->format('%a'); + } +} diff --git a/src/Controller/DiffDaysController.php b/src/Controller/DiffDaysController.php index a5c7c11..8c74584 100644 --- a/src/Controller/DiffDaysController.php +++ b/src/Controller/DiffDaysController.php @@ -2,6 +2,8 @@ namespace App\Controller; +use App\Actions\DiffDaysAction; +use App\Requests\DiffDaysRequest; use DateTimeImmutable; use HttpResponse; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; @@ -14,16 +16,14 @@ class DiffDaysController extends AbstractController { /** * Контроллер вернет кол-во дней между датами - * @param Request $request + * @param DiffDaysRequest $request + * @param DiffDaysAction $action * @return Response */ #[Route('/diff/days', name: 'app_diff_days', methods: ['POST'])] - public function index(Request $request): Response + public function index(DiffDaysRequest $request, DiffDaysAction $action): Response { - $dateStart = new DateTimeImmutable($request->toArray()['date_start']); - $dateEnd = new DateTimeImmutable($request->toArray()['date_end']); - - return new JsonResponse(["interval"=>($dateStart->diff($dateEnd)->format("%a"))] - , Response::HTTP_OK); + $array = $request->serialise(); + return new JsonResponse($action->act($array[0], $array[1])); } } diff --git a/src/Requests/DiffDaysRequest.php b/src/Requests/DiffDaysRequest.php new file mode 100644 index 0000000..95295fd --- /dev/null +++ b/src/Requests/DiffDaysRequest.php @@ -0,0 +1,29 @@ +<?php + +namespace App\Requests; + +use DateTimeImmutable; +use Symfony\Component\Validator\Constraints\Date; +use Symfony\Component\Validator\Constraints\NotBlank; + +class DiffDaysRequest extends BaseRequest +{ + #[Date] + #[NotBlank] + public $startDate; + + #[Date] + #[NotBlank] + public $endDate; + + /** + * @return mixed + */ + public function serialise(): mixed + { + return [ + 'startDate' => new DateTimeImmutable($this->startDate), + 'endDate' => new DateTimeImmutable($this->endDate), + ]; + } +} \ No newline at end of file -- GitLab