Commit 2e9d064e authored by Александр Плохих's avatar Александр Плохих 🌔
Browse files

add controller | action | request

parent 17fe374e
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;
    }
}
+6 −9
Original line number Diff line number Diff line
@@ -2,27 +2,24 @@

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\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
use function App\Repository\countFriday13;

class CountFriday13Controller extends AbstractController
{
    /**
     * git Контроллер вернет все пятницы 13 в году используя countFriday13 функцию
     * @param Request $request
     * @param AllFri13Request $request
     * @param CountFriday13Action $action
     * @return Response
     */
    #[Route('/count/friday13', name: 'app_count_friday13')]
    public function index(Request $request): Response
    public function index(AllFri13Request $request, CountFriday13Action $action): Response
    {
        $year = $request->toArray()['year'];

        $returnableArray = countFriday13($year);

        return new JsonResponse($returnableArray, Response::HTTP_OK);
        return new JsonResponse($action->act($request->serialise()));
    }
}
+0 −23
Original line number Diff line number Diff line
<?php

namespace App\Repository;
use DateTimeImmutable;

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

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

        if ($next13->format("D") === 'Fri'){
            $AllFri13[] = $next13;
        }
    }
    return $AllFri13;
}
+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