From a1f251233940843796239f015343d89bdcde04d2 Mon Sep 17 00:00:00 2001 From: "a.shamavov" <a.shamavov@iqdev.digital> Date: Tue, 16 Apr 2024 10:13:42 +0500 Subject: [PATCH] temp commit --- src/Requests/BaseRequest.php | 62 ++++++++++++++++++++++++++++ src/Requests/DiffDaysRequest.php | 14 +++++++ src/Requests/MenuRequest.php | 16 +++++++ src/Requests/SearchRequest.php | 20 +++++++++ src/Requests/SortPriceRequest.php | 16 +++++++ src/Requests/UniqElementsRequest.php | 16 +++++++ src/Validation/ArrayValidation.php | 26 ------------ src/Validation/DateValidation.php | 14 ------- 8 files changed, 144 insertions(+), 40 deletions(-) create mode 100644 src/Requests/BaseRequest.php create mode 100644 src/Requests/DiffDaysRequest.php create mode 100644 src/Requests/MenuRequest.php create mode 100644 src/Requests/SearchRequest.php create mode 100644 src/Requests/SortPriceRequest.php create mode 100644 src/Requests/UniqElementsRequest.php delete mode 100644 src/Validation/ArrayValidation.php delete mode 100644 src/Validation/DateValidation.php diff --git a/src/Requests/BaseRequest.php b/src/Requests/BaseRequest.php new file mode 100644 index 0000000..9bebc7d --- /dev/null +++ b/src/Requests/BaseRequest.php @@ -0,0 +1,62 @@ +<?php + +namespace App\Requests; + +use Symfony\Component\HttpFoundation\JsonResponse; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\Validator\ValidatorInterface; + +abstract class BaseRequest +{ + public function __construct(protected ValidatorInterface $validator) + { + $this->populate(); + + if ($this->autoValidateRequest()) { + $this->validate(); + } + } + + public function validate(): void + { + $errors = $this->validator->validate($this); + + $messages = ['message' => 'validation_failed', 'errors' => []]; + + /** @var ConstraintViolation $errors */ + foreach ($errors as $message) { + $messages['errors'][] = [ + 'property' => $message->getPropertyPath(), + 'value' => $message->getInvalidValue(), + 'message' => $message->getMessage(), + ]; + } + + if (count($messages['errors']) > 0) { + $response = new JsonResponse($messages, 201); + $response->send(); + + exit; + } + } + + public function getRequest(): Request + { + return Request::createFromGlobals(); + } + + protected function populate(): void + { + foreach ($this->getRequest()->request->all() as $property => $value) { + if (property_exists($this, $property)) { + $this->{$property} = $value; + } + } + } + + protected function autoValidateRequest(): bool + { + return true; + } +} \ No newline at end of file diff --git a/src/Requests/DiffDaysRequest.php b/src/Requests/DiffDaysRequest.php new file mode 100644 index 0000000..8cba54e --- /dev/null +++ b/src/Requests/DiffDaysRequest.php @@ -0,0 +1,14 @@ +<?php + +namespace App\Requests; + +use Symfony\Component\Validator\Constraints as Assert; + +class DiffDaysRequest extends BaseRequest +{ + #[Assert\Type('date')] + public $startDate; + + #[Assert\Type('date')] + public $endDate; +} \ No newline at end of file diff --git a/src/Requests/MenuRequest.php b/src/Requests/MenuRequest.php new file mode 100644 index 0000000..e012d13 --- /dev/null +++ b/src/Requests/MenuRequest.php @@ -0,0 +1,16 @@ +<?php + +namespace App\Requests; + +use Symfony\Component\Validator\Constraints as Assert; + +class MenuRequest extends BaseRequest +{ + #[Assert\All([ + new Assert\Collection([ + 'name' => new Assert\Type('string'), + 'depth' => new Assert\Type('int'), + ]) + ])] + public array $items; +} \ No newline at end of file diff --git a/src/Requests/SearchRequest.php b/src/Requests/SearchRequest.php new file mode 100644 index 0000000..eb03843 --- /dev/null +++ b/src/Requests/SearchRequest.php @@ -0,0 +1,20 @@ +<?php + +namespace App\Requests; + +use Symfony\Component\Validator\Constraints as Assert; + +class SearchRequest extends BaseRequest +{ + #[Assert\All([ + new Assert\Collection([ + 'id' => new Assert\Type('int'), + 'name' => new Assert\Type('string'), + 'age' => new Assert\Type('int'), + ]) + ])] + public array $items; + + #[Assert\Type('int')] + public int $id; +} \ No newline at end of file diff --git a/src/Requests/SortPriceRequest.php b/src/Requests/SortPriceRequest.php new file mode 100644 index 0000000..38bdf00 --- /dev/null +++ b/src/Requests/SortPriceRequest.php @@ -0,0 +1,16 @@ +<?php + +namespace App\Requests; + +use Symfony\Component\Validator\Constraints as Assert; + +class SortPriceRequest extends BaseRequest +{ + #[Assert\All([ + new Assert\Collection([ + 'price' => new Assert\Type('int'), + 'count' => new Assert\Type('int') + ]) + ])] + public array $items; +} \ No newline at end of file diff --git a/src/Requests/UniqElementsRequest.php b/src/Requests/UniqElementsRequest.php new file mode 100644 index 0000000..f53156b --- /dev/null +++ b/src/Requests/UniqElementsRequest.php @@ -0,0 +1,16 @@ +<?php + +namespace App\Requests; + +use Symfony\Component\Validator\Constraints as Assert; + +class UniqElementsRequest extends BaseRequest +{ + #[Assert\All([ + new Assert\Type('array'), + new Assert\All([ + new Assert\Type('string'), + ]) + ])] + public array $items; +} \ No newline at end of file diff --git a/src/Validation/ArrayValidation.php b/src/Validation/ArrayValidation.php deleted file mode 100644 index 5807a44..0000000 --- a/src/Validation/ArrayValidation.php +++ /dev/null @@ -1,26 +0,0 @@ -<?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 deleted file mode 100644 index 18046f8..0000000 --- a/src/Validation/DateValidation.php +++ /dev/null @@ -1,14 +0,0 @@ -<?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 -- GitLab