Commit ecb8369a authored by Nikita Chernykh's avatar Nikita Chernykh
Browse files

Merge branch 'PTPS|Controller_6' into 'main'

make controller

See merge request !6
parents 8b931829 2e9d064e
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
<?php

namespace App\Actions;

use DateTimeImmutable;

class CountFriday13Action
{
    /**
     * Вернет все пятницы 13 в году
     * @param int $year год, в котором необходимо произвести расчет
     * @return DateTimeImmutable[]
     */
    public function act(int $year): array
    {
        $AllFri13 = [];

        for ($i = 1; $i <= 12; $i++) {
            $next13 = (new DateTimeImmutable())->setDate($year, $i, 13);

            if ($next13->format("D") === "Fri") {
                $AllFri13[] = $next13;
            }
        }
        return $AllFri13;
    }
}
+25 −0
Original line number Diff line number Diff line
<?php

namespace App\Controller;

use App\Actions\CountFriday13Action;
use App\Requests\AllFri13Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

class CountFriday13Controller extends AbstractController
{
    /**
     * git Контроллер вернет все пятницы 13 в году используя countFriday13 функцию
     * @param AllFri13Request $request
     * @param CountFriday13Action $action
     * @return Response
     */
    #[Route('/count/friday13', name: 'app_count_friday13')]
    public function index(AllFri13Request $request, CountFriday13Action $action): Response
    {
        return new JsonResponse($action->act($request->serialise()));
    }
}
+21 −0
Original line number Diff line number Diff line
<?php

namespace App\Requests;

use Symfony\Component\Validator\Constraints\Positive;
use Symfony\Component\Validator\Constraints\Type;

class AllFri13Request extends BaseRequest
{
    #[Type('integer')]
    #[Positive]
    public $year;

    /**
     * @return mixed
     */
    public function serialise(): int
    {
        return (int) $this->year;
    }
}
 No newline at end of file