Commit 04588a09 authored by Адлан Шамавов's avatar Адлан Шамавов
Browse files

refactoring

parent 53345d34
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -39,7 +39,7 @@
        "symfony/translation": "7.0.*",
        "symfony/twig-bundle": "7.0.*",
        "symfony/ux-turbo": "^2.16",
        "symfony/validator": "7.0.*",
        "symfony/validator": "6.4.*",
        "symfony/web-link": "7.0.*",
        "symfony/yaml": "7.0.*",
        "twig/extra-bundle": "^2.12|^3.0",
+58 −49
Original line number Diff line number Diff line
@@ -4,7 +4,7 @@
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
        "This file is @generated automatically"
    ],
    "content-hash": "168d5f8561d288fe5cd6fd2b406687e2",
    "content-hash": "91b0c89268c08e0b881610c8ba320eb8",
    "packages": [
        {
            "name": "composer/semver",
@@ -1375,16 +1375,16 @@
        },
        {
            "name": "monolog/monolog",
            "version": "3.5.0",
            "version": "3.6.0",
            "source": {
                "type": "git",
                "url": "https://github.com/Seldaek/monolog.git",
                "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448"
                "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448",
                "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448",
                "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654",
                "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654",
                "shasum": ""
            },
            "require": {
@@ -1407,7 +1407,7 @@
                "phpstan/phpstan": "^1.9",
                "phpstan/phpstan-deprecation-rules": "^1.0",
                "phpstan/phpstan-strict-rules": "^1.4",
                "phpunit/phpunit": "^10.1",
                "phpunit/phpunit": "^10.5.17",
                "predis/predis": "^1.1 || ^2",
                "ruflin/elastica": "^7",
                "symfony/mailer": "^5.4 || ^6",
@@ -1460,7 +1460,7 @@
            ],
            "support": {
                "issues": "https://github.com/Seldaek/monolog/issues",
                "source": "https://github.com/Seldaek/monolog/tree/3.5.0"
                "source": "https://github.com/Seldaek/monolog/tree/3.6.0"
            },
            "funding": [
                {
@@ -1472,7 +1472,7 @@
                    "type": "tidelift"
                }
            ],
            "time": "2023-10-27T15:32:31+00:00"
            "time": "2024-04-12T21:02:21+00:00"
        },
        {
            "name": "phpdocumentor/reflection-common",
@@ -1529,28 +1529,35 @@
        },
        {
            "name": "phpdocumentor/reflection-docblock",
            "version": "5.3.0",
            "version": "5.4.0",
            "source": {
                "type": "git",
                "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
                "reference": "298d2febfe79d03fe714eb871d5538da55205b1a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
                "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
                "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/298d2febfe79d03fe714eb871d5538da55205b1a",
                "reference": "298d2febfe79d03fe714eb871d5538da55205b1a",
                "shasum": ""
            },
            "require": {
                "doctrine/deprecations": "^1.1",
                "ext-filter": "*",
                "php": "^7.2 || ^8.0",
                "php": "^7.4 || ^8.0",
                "phpdocumentor/reflection-common": "^2.2",
                "phpdocumentor/type-resolver": "^1.3",
                "phpdocumentor/type-resolver": "^1.7",
                "phpstan/phpdoc-parser": "^1.7",
                "webmozart/assert": "^1.9.1"
            },
            "require-dev": {
                "mockery/mockery": "~1.3.2",
                "psalm/phar": "^4.8"
                "mockery/mockery": "~1.3.5",
                "phpstan/extension-installer": "^1.1",
                "phpstan/phpstan": "^1.8",
                "phpstan/phpstan-mockery": "^1.1",
                "phpstan/phpstan-webmozart-assert": "^1.2",
                "phpunit/phpunit": "^9.5",
                "vimeo/psalm": "^5.13"
            },
            "type": "library",
            "extra": {
@@ -1574,15 +1581,15 @@
                },
                {
                    "name": "Jaap van Otterdijk",
                    "email": "account@ijaap.nl"
                    "email": "opensource@ijaap.nl"
                }
            ],
            "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
            "support": {
                "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
                "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.0"
            },
            "time": "2021-10-19T17:43:47+00:00"
            "time": "2024-04-09T21:13:58+00:00"
        },
        {
            "name": "phpdocumentor/type-resolver",
@@ -6820,53 +6827,55 @@
        },
        {
            "name": "symfony/validator",
            "version": "v7.0.6",
            "version": "v6.4.6",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/validator.git",
                "reference": "a2df2c63b7944a162dee86ab8065f2f91b7d6e36"
                "reference": "ca1d78e8677e966e307a63799677b64b194d735d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/validator/zipball/a2df2c63b7944a162dee86ab8065f2f91b7d6e36",
                "reference": "a2df2c63b7944a162dee86ab8065f2f91b7d6e36",
                "url": "https://api.github.com/repos/symfony/validator/zipball/ca1d78e8677e966e307a63799677b64b194d735d",
                "reference": "ca1d78e8677e966e307a63799677b64b194d735d",
                "shasum": ""
            },
            "require": {
                "php": ">=8.2",
                "php": ">=8.1",
                "symfony/deprecation-contracts": "^2.5|^3",
                "symfony/polyfill-ctype": "~1.8",
                "symfony/polyfill-mbstring": "~1.0",
                "symfony/polyfill-php83": "^1.27",
                "symfony/translation-contracts": "^2.5|^3"
            },
            "conflict": {
                "doctrine/annotations": "<1.13",
                "doctrine/lexer": "<1.1",
                "symfony/dependency-injection": "<6.4",
                "symfony/doctrine-bridge": "<7.0",
                "symfony/expression-language": "<6.4",
                "symfony/http-kernel": "<6.4",
                "symfony/intl": "<6.4",
                "symfony/property-info": "<6.4",
                "symfony/translation": "<6.4.3|>=7.0,<7.0.3",
                "symfony/yaml": "<6.4"
                "symfony/dependency-injection": "<5.4",
                "symfony/expression-language": "<5.4",
                "symfony/http-kernel": "<5.4",
                "symfony/intl": "<5.4",
                "symfony/property-info": "<5.4",
                "symfony/translation": "<5.4.35|>=6.0,<6.3.12|>=6.4,<6.4.3|>=7.0,<7.0.3",
                "symfony/yaml": "<5.4"
            },
            "require-dev": {
                "doctrine/annotations": "^1.13|^2",
                "egulias/email-validator": "^2.1.10|^3|^4",
                "symfony/cache": "^6.4|^7.0",
                "symfony/config": "^6.4|^7.0",
                "symfony/console": "^6.4|^7.0",
                "symfony/dependency-injection": "^6.4|^7.0",
                "symfony/expression-language": "^6.4|^7.0",
                "symfony/finder": "^6.4|^7.0",
                "symfony/http-client": "^6.4|^7.0",
                "symfony/http-foundation": "^6.4|^7.0",
                "symfony/http-kernel": "^6.4|^7.0",
                "symfony/intl": "^6.4|^7.0",
                "symfony/mime": "^6.4|^7.0",
                "symfony/property-access": "^6.4|^7.0",
                "symfony/property-info": "^6.4|^7.0",
                "symfony/translation": "^6.4.3|^7.0.3",
                "symfony/yaml": "^6.4|^7.0"
                "symfony/cache": "^5.4|^6.0|^7.0",
                "symfony/config": "^5.4|^6.0|^7.0",
                "symfony/console": "^5.4|^6.0|^7.0",
                "symfony/dependency-injection": "^5.4|^6.0|^7.0",
                "symfony/expression-language": "^5.4|^6.0|^7.0",
                "symfony/finder": "^5.4|^6.0|^7.0",
                "symfony/http-client": "^5.4|^6.0|^7.0",
                "symfony/http-foundation": "^5.4|^6.0|^7.0",
                "symfony/http-kernel": "^5.4|^6.0|^7.0",
                "symfony/intl": "^5.4|^6.0|^7.0",
                "symfony/mime": "^5.4|^6.0|^7.0",
                "symfony/property-access": "^5.4|^6.0|^7.0",
                "symfony/property-info": "^5.4|^6.0|^7.0",
                "symfony/translation": "^5.4.35|~6.3.12|^6.4.3|^7.0.3",
                "symfony/yaml": "^5.4|^6.0|^7.0"
            },
            "type": "library",
            "autoload": {
@@ -6894,7 +6903,7 @@
            "description": "Provides tools to validate values",
            "homepage": "https://symfony.com",
            "support": {
                "source": "https://github.com/symfony/validator/tree/v7.0.6"
                "source": "https://github.com/symfony/validator/tree/v6.4.6"
            },
            "funding": [
                {
@@ -6910,7 +6919,7 @@
                    "type": "tidelift"
                }
            ],
            "time": "2024-03-28T09:20:36+00:00"
            "time": "2024-03-27T22:00:14+00:00"
        },
        {
            "name": "symfony/var-dumper",
+0 −8
Original line number Diff line number Diff line
@@ -11,7 +11,6 @@ class Functions
     * @param array $array
     * @return array
     */

    public function sortPrice(array $array): array
    {
        $prices = array_column($array, 'price');
@@ -24,11 +23,4 @@ class Functions
        );
        return $array;
    }

    /**
     * На выход должна вернуть отсортированный массив по ключу *price* DESC
     * и во вторую очередь по *count* ASC:
     * [['price'=>12, 'count'=>4],  ['price'=>10, 'count'=>2],  ['price'=>8, 'count'=>4],
     * ['price'=>8, 'count'=>5],  ['price'=>5, 'count'=>5],]
     */
}
 No newline at end of file
+5 −15
Original line number Diff line number Diff line
@@ -3,29 +3,19 @@
namespace App\Controller;

use App\Action\Functions;
use App\Validation\ArrayValidation;
use App\Requests\SortPriceRequest;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Attribute\Route;

class HomeController extends AbstractController
{
    private Functions $functions;
    public function __construct(private Functions $functions) {}

    public function __construct(Functions $functions)
    #[Route('/sortPrice', name: 'sortPrice', methods: ['POST'])]
    public function sortPrice(SortPriceRequest $request): Response
    {
        $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);
        $array = $this->functions->sortPrice($request->getRequest()->toArray()['items']);
        return $this->json($array);
    }
}
+62 −0
Original line number Diff line number Diff line
<?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
Loading