diff --git a/src/Action/Functions.php b/src/Action/Functions.php index 51b043bc7efdefaf8ab640a2bb8883159db7f60d..34e4ecd525ce9fe84b7317fcca7203f7da0e28df 100644 --- a/src/Action/Functions.php +++ b/src/Action/Functions.php @@ -9,7 +9,6 @@ use DateTime; use DateInterval; use DatePeriod; use Exception; -use RuntimeException; class Functions { @@ -72,13 +71,13 @@ class Functions } /** - * Выходной маÑÑив: - * Array ( - * [0] => Array([0] => laravel, [1] => php) - * [1] => Array([0] => codeigniter, [1] => php) - * [3] => Array([0] => c++, [1] => java)) - * ) - */ + * Выходной маÑÑив: + * Array ( + * [0] => Array([0] => laravel, [1] => php) + * [1] => Array([0] => codeigniter, [1] => php) + * [3] => Array([0] => c++, [1] => java)) + * ) + */ /** * Сгруппировать подразедлы в верхние разделы меню @@ -159,7 +158,6 @@ class Functions return (int)$dateInterval->format("%a") + 1; } - /** * Вернет вÑе пÑтницы 13 в году * @param int $year год, в котором необходимо произвеÑти раÑчет @@ -215,5 +213,4 @@ class Functions throw new RuntimeException("File not found: $filePath"); } } -} - +} \ No newline at end of file diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php index 803667d75db9e87714f38df7aec324050f7055dd..e2899a3c6a9f0093d97e12006f657dd4742347ee 100644 --- a/src/Controller/HomeController.php +++ b/src/Controller/HomeController.php @@ -3,9 +3,11 @@ namespace App\Controller; use App\Action\Functions; +use App\Validation\{ArrayValidation, DateValidation}; +use DateTimeImmutable; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; -use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Attribute\Route; class HomeController extends AbstractController @@ -17,6 +19,91 @@ class HomeController extends AbstractController $this->functions = $functions; } + #[Route('/func1', name: 'home', methods: ['POST'])] + public function func1(Request $request): Response + { + $array = $request->get('arr'); + if (!ArrayValidation::validateFunc1($array)) { + return new Response("Invalid array"); + } + $array = $this->functions->sortPrice($array); + return $this->json($array); + } + + #[Route('/func2', name: 'func2', methods: ['POST'])] + public function func2(Request $request): Response + { + $id = $request->query->getInt('id'); + $array = $request->get('arr'); + if (!ArrayValidation::validateFunc2($array)) { + return new Response("Invalid array"); + } + $result = $this->functions->search($array, $id); + return $this->json($result); + } + + #[Route('/func3', name: 'func3', methods: ['POST'])] + public function home(Request $request): Response + { + $array = $request->get('arr'); + $result = $this->functions->uniqElements($array); + return $this->json($result); + } + + #[Route('/func4', name: 'func4', methods: ['POST'])] + public function func4(Request $request): Response + { + $array = $request->get('arr'); + if (!ArrayValidation::validateFunc4($array)) { + return new Response("Invalid array"); + } + $result = $this->functions->prepareMenu($array); + return $this->json($result); + } + + #[Route('/func5/{day}/{month}/{year}', name: 'func5')] + public function func5(int $day, int $month, int $year): Response + { + $dateAsString = $year . "-" . $month . "-" . $day; + try { + $result = $this->functions->howDaysToNy(new DateTimeImmutable($dateAsString)); + } catch (\Exception $e) { + return new Response($e->getMessage()); + } + return $this->json(["Days before NY:" => $result]); + } + + #[Route('/func6/{year}', name: 'func6', methods: ['GET'])] + public function func6(int $year): Response + { + $fridays = array(); + try { + foreach ($this->functions->countFriday13($year) as $date) { + $fridays[] = $date->format("Y-m-d l"); + } + } catch (\Exception $e) { + return new Response($e->getMessage()); + } + return $this->json($fridays); + } + + #[Route('/func7/{startDate}/{endDate}', name: 'home')] // 01-01-2024 + public function func7(string $startDate, string $endDate): Response + { + if (DateValidation::validate($startDate) && DateValidation::validate($endDate)) { + try { + $result = $this->functions->diffDays( + new DateTimeImmutable($startDate), + new DateTimeImmutable($endDate) + ); + return $this->json(["The difference of days:" => $result]); + } catch (\Exception $e) { + return new Response($e->getMessage()); + } + } + return new Response("Invalid date format"); + } + #[Route('/{fileName}', name: 'home')] public function home(string $fileName): Response // text.txt { diff --git a/src/Validation/ArrayValidation.php b/src/Validation/ArrayValidation.php new file mode 100644 index 0000000000000000000000000000000000000000..5807a447814593f64ecf069980c81099b8be861d --- /dev/null +++ b/src/Validation/ArrayValidation.php @@ -0,0 +1,26 @@ +<?php + +namespace App\Validation; + +class ArrayValidation +{ + public static function validateFunc1(array $array): bool + { + $prices = array_column($array, 'price'); + $counts = array_column($array, 'count'); + return ctype_digit(implode('',$prices)) && ctype_digit(implode('', $counts)); + } + + public static function validateFunc2(array $array): bool + { + $ids = array_column($array, 'id'); + $ages = array_column($array, 'age'); + return ctype_digit(implode('', $ids)) && ctype_digit(implode('', $ages)); + } + + public static function validateFunc4(array $array): bool + { + $depths = array_column($array, 'depth'); + return ctype_digit(implode('', $depths)); + } +} \ No newline at end of file diff --git a/src/Validation/DateValidation.php b/src/Validation/DateValidation.php new file mode 100644 index 0000000000000000000000000000000000000000..18046f84a0fef64f875f2f4c4a25c452d43df8c2 --- /dev/null +++ b/src/Validation/DateValidation.php @@ -0,0 +1,14 @@ +<?php + +namespace App\Validation; + +class DateValidation +{ + public static function validate(string $date): bool + { + if (strtotime($date)) { + return true; + } + return false; + } +} \ No newline at end of file