diff --git a/src/Actions/DiffDaysAction.php b/src/Actions/DiffDaysAction.php new file mode 100644 index 0000000000000000000000000000000000000000..c3ee3c28a3e86c759e6627eb79b4fbcc9f4f4fa7 --- /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 a5c7c11774c4f7d8486dcba89b0a899fe7ed4328..8c74584181b08fe12fc08062469cb9b4c2c1d33b 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 0000000000000000000000000000000000000000..95295fd7bba664592cb6358dac546176dd9d6ea7 --- /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