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 new file mode 100644 index 0000000000000000000000000000000000000000..7dc8cd80893a2738cbc5eec8998572c3bee67e7c --- /dev/null +++ b/src/Controller/DiffDaysController.php @@ -0,0 +1,26 @@ +<?php + +namespace App\Controller; + +use App\Actions\DiffDaysAction; +use App\Requests\DiffDaysRequest; +use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Attribute\Route; + +class DiffDaysController extends AbstractController +{ + /** + * Контроллер вернет кол-во дней между датами + * @param DiffDaysRequest $request + * @param DiffDaysAction $action + * @return Response + */ + #[Route('/diff/days', name: 'app_diff_days', methods: ['POST'])] + public function index(DiffDaysRequest $request, DiffDaysAction $action): Response + { + $array = $request->serialise(); + return new JsonResponse($action->act($array['startDate'], $array['endDate'])); + } +} 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