diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/iqdevTranningProgram.iml b/.idea/iqdevTranningProgram.iml
new file mode 100644
index 0000000000000000000000000000000000000000..54d8720cc242bb9e2d9c1e29990d5988f667bb5b
--- /dev/null
+++ b/.idea/iqdevTranningProgram.iml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="App\" />
+      <sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" packagePrefix="App\Tests\" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/collections" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/dbal" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/deprecations" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/doctrine-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/doctrine-migrations-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/migrations" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/orm" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/persistence" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/sql-formatter" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/egulias/email-validator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/masterminds/html5" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/monolog/monolog" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/manifest" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/version" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-docblock" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpstan/phpdoc-parser" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-code-coverage" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-file-iterator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-invoker" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-text-template" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-timer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/phpunit" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/clock" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/event-dispatcher" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/link" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/cli-parser" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/complexity" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/diff" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/environment" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/exporter" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/global-state" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/lines-of-code" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-enumerator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-reflector" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/recursion-context" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/resource-operations" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/type" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/version" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/asset" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/asset-mapper" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/browser-kit" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/cache" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/cache-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/clock" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/config" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/console" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/css-selector" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/debug-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/dependency-injection" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/deprecation-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/doctrine-bridge" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/doctrine-messenger" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/dom-crawler" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/dotenv" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/error-handler" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/expression-language" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/filesystem" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/finder" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/flex" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/form" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/framework-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-client" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-client-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-kernel" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/intl" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/mailer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/maker-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/messenger" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/mime" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/monolog-bridge" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/monolog-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/notifier" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/options-resolver" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/password-hasher" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/phpunit-bridge" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-grapheme" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-icu" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-idn" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-intl-normalizer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php83" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/process" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/property-access" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/property-info" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/routing" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/runtime" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/security-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/security-core" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/security-csrf" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/security-http" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/serializer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/service-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/stimulus-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/stopwatch" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/string" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation-contracts" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/twig-bridge" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/twig-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/ux-turbo" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/validator" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/var-dumper" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/var-exporter" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/web-link" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/web-profiler-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/symfony/yaml" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/theseer/tokenizer" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/twig/extra-bundle" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/twig/twig" />
+      <excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/assert" />
+      <excludeFolder url="file://$MODULE_DIR$/var" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aedf51d4705090b3af7b4d50da524da260b488fd
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/iqdevTranningProgram.iml" filepath="$PROJECT_DIR$/.idea/iqdevTranningProgram.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/php.xml b/.idea/php.xml
new file mode 100644
index 0000000000000000000000000000000000000000..762b2dfb47f89213485944d42f43f98703d63d19
--- /dev/null
+++ b/.idea/php.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="MessDetectorOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PHPCSFixerOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PHPCodeSnifferOptionsConfiguration">
+    <option name="highlightLevel" value="WARNING" />
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PhpIncludePathManager">
+    <include_path>
+      <path value="$PROJECT_DIR$/vendor/psr/cache" />
+      <path value="$PROJECT_DIR$/vendor/psr/link" />
+      <path value="$PROJECT_DIR$/vendor/psr/log" />
+      <path value="$PROJECT_DIR$/vendor/psr/container" />
+      <path value="$PROJECT_DIR$/vendor/psr/clock" />
+      <path value="$PROJECT_DIR$/vendor/psr/event-dispatcher" />
+      <path value="$PROJECT_DIR$/vendor/twig/twig" />
+      <path value="$PROJECT_DIR$/vendor/twig/extra-bundle" />
+      <path value="$PROJECT_DIR$/vendor/nikic/php-parser" />
+      <path value="$PROJECT_DIR$/vendor/egulias/email-validator" />
+      <path value="$PROJECT_DIR$/vendor/monolog/monolog" />
+      <path value="$PROJECT_DIR$/vendor/myclabs/deep-copy" />
+      <path value="$PROJECT_DIR$/vendor/phar-io/manifest" />
+      <path value="$PROJECT_DIR$/vendor/phar-io/version" />
+      <path value="$PROJECT_DIR$/vendor/phpstan/phpdoc-parser" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-text-template" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-invoker" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/phpunit" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-code-coverage" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-file-iterator" />
+      <path value="$PROJECT_DIR$/vendor/phpunit/php-timer" />
+      <path value="$PROJECT_DIR$/vendor/symfony/dom-crawler" />
+      <path value="$PROJECT_DIR$/vendor/symfony/intl" />
+      <path value="$PROJECT_DIR$/vendor/symfony/cache" />
+      <path value="$PROJECT_DIR$/vendor/symfony/dependency-injection" />
+      <path value="$PROJECT_DIR$/vendor/symfony/mime" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-grapheme" />
+      <path value="$PROJECT_DIR$/vendor/symfony/string" />
+      <path value="$PROJECT_DIR$/vendor/symfony/asset" />
+      <path value="$PROJECT_DIR$/vendor/symfony/security-http" />
+      <path value="$PROJECT_DIR$/vendor/symfony/security-csrf" />
+      <path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/dotenv" />
+      <path value="$PROJECT_DIR$/vendor/symfony/translation" />
+      <path value="$PROJECT_DIR$/vendor/symfony/translation-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/yaml" />
+      <path value="$PROJECT_DIR$/vendor/symfony/serializer" />
+      <path value="$PROJECT_DIR$/vendor/symfony/doctrine-messenger" />
+      <path value="$PROJECT_DIR$/vendor/symfony/error-handler" />
+      <path value="$PROJECT_DIR$/vendor/symfony/http-foundation" />
+      <path value="$PROJECT_DIR$/vendor/symfony/security-bundle" />
+      <path value="$PROJECT_DIR$/vendor/symfony/web-profiler-bundle" />
+      <path value="$PROJECT_DIR$/vendor/symfony/var-dumper" />
+      <path value="$PROJECT_DIR$/vendor/symfony/config" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-php83" />
+      <path value="$PROJECT_DIR$/vendor/symfony/finder" />
+      <path value="$PROJECT_DIR$/vendor/symfony/ux-turbo" />
+      <path value="$PROJECT_DIR$/vendor/symfony/cache-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-mbstring" />
+      <path value="$PROJECT_DIR$/vendor/symfony/css-selector" />
+      <path value="$PROJECT_DIR$/vendor/symfony/security-core" />
+      <path value="$PROJECT_DIR$/vendor/symfony/property-access" />
+      <path value="$PROJECT_DIR$/vendor/symfony/validator" />
+      <path value="$PROJECT_DIR$/vendor/symfony/mailer" />
+      <path value="$PROJECT_DIR$/vendor/symfony/monolog-bridge" />
+      <path value="$PROJECT_DIR$/vendor/symfony/debug-bundle" />
+      <path value="$PROJECT_DIR$/vendor/symfony/filesystem" />
+      <path value="$PROJECT_DIR$/vendor/symfony/console" />
+      <path value="$PROJECT_DIR$/vendor/symfony/twig-bridge" />
+      <path value="$PROJECT_DIR$/vendor/symfony/process" />
+      <path value="$PROJECT_DIR$/vendor/symfony/service-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/messenger" />
+      <path value="$PROJECT_DIR$/vendor/symfony/deprecation-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/http-client-contracts" />
+      <path value="$PROJECT_DIR$/vendor/symfony/var-exporter" />
+      <path value="$PROJECT_DIR$/vendor/symfony/monolog-bundle" />
+      <path value="$PROJECT_DIR$/vendor/symfony/http-client" />
+      <path value="$PROJECT_DIR$/vendor/symfony/clock" />
+      <path value="$PROJECT_DIR$/vendor/symfony/doctrine-bridge" />
+      <path value="$PROJECT_DIR$/vendor/symfony/phpunit-bridge" />
+      <path value="$PROJECT_DIR$/vendor/symfony/routing" />
+      <path value="$PROJECT_DIR$/vendor/symfony/web-link" />
+      <path value="$PROJECT_DIR$/vendor/symfony/notifier" />
+      <path value="$PROJECT_DIR$/vendor/symfony/property-info" />
+      <path value="$PROJECT_DIR$/vendor/symfony/asset-mapper" />
+      <path value="$PROJECT_DIR$/vendor/symfony/expression-language" />
+      <path value="$PROJECT_DIR$/vendor/symfony/http-kernel" />
+      <path value="$PROJECT_DIR$/vendor/symfony/browser-kit" />
+      <path value="$PROJECT_DIR$/vendor/symfony/flex" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-idn" />
+      <path value="$PROJECT_DIR$/vendor/symfony/twig-bundle" />
+      <path value="$PROJECT_DIR$/vendor/symfony/stopwatch" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-icu" />
+      <path value="$PROJECT_DIR$/vendor/symfony/polyfill-intl-normalizer" />
+      <path value="$PROJECT_DIR$/vendor/symfony/event-dispatcher" />
+      <path value="$PROJECT_DIR$/vendor/symfony/stimulus-bundle" />
+      <path value="$PROJECT_DIR$/vendor/symfony/options-resolver" />
+      <path value="$PROJECT_DIR$/vendor/symfony/password-hasher" />
+      <path value="$PROJECT_DIR$/vendor/symfony/maker-bundle" />
+      <path value="$PROJECT_DIR$/vendor/symfony/runtime" />
+      <path value="$PROJECT_DIR$/vendor/symfony/framework-bundle" />
+      <path value="$PROJECT_DIR$/vendor/symfony/form" />
+      <path value="$PROJECT_DIR$/vendor/theseer/tokenizer" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/cache" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/doctrine-bundle" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/event-manager" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/collections" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/deprecations" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/lexer" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/persistence" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/orm" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/inflector" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/sql-formatter" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/doctrine-migrations-bundle" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/instantiator" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/dbal" />
+      <path value="$PROJECT_DIR$/vendor/doctrine/migrations" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/environment" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/diff" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/resource-operations" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/recursion-context" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/cli-parser" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/code-unit" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/object-enumerator" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/object-reflector" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/complexity" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/comparator" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/lines-of-code" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/version" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/exporter" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/type" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/global-state" />
+      <path value="$PROJECT_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
+      <path value="$PROJECT_DIR$/vendor/webmozart/assert" />
+      <path value="$PROJECT_DIR$/vendor/masterminds/html5" />
+      <path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-common" />
+      <path value="$PROJECT_DIR$/vendor/phpdocumentor/type-resolver" />
+      <path value="$PROJECT_DIR$/vendor/phpdocumentor/reflection-docblock" />
+      <path value="$PROJECT_DIR$/vendor/composer" />
+    </include_path>
+  </component>
+  <component name="PhpProjectSharedConfiguration" php_language_level="8.1" />
+  <component name="PhpStanOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+  <component name="PhpUnit">
+    <phpunit_settings>
+      <PhpUnitSettings configuration_file_path="$PROJECT_DIR$/phpunit.xml.dist" custom_loader_path="$PROJECT_DIR$/vendor/autoload.php" use_configuration_file="true" />
+    </phpunit_settings>
+  </component>
+  <component name="PsalmOptionsConfiguration">
+    <option name="transferred" value="true" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4f8104cfb166aed9afb9fa8317271ebd4f44e5cb
--- /dev/null
+++ b/.idea/phpunit.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="PHPUnit">
+    <option name="directories">
+      <list>
+        <option value="$PROJECT_DIR$/tests" />
+      </list>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4 b/.idea/sonarlint/issuestore/0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4
new file mode 100644
index 0000000000000000000000000000000000000000..ef18277ec815ab66f9347e4276513938f9fc5984
--- /dev/null
+++ b/.idea/sonarlint/issuestore/0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4
@@ -0,0 +1,2 @@
+
+f	php:S4833"QReplace "require_once" with namespace import mechanism through the "use" keyword.(úÕ§ò
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/1/1/11fc5ee351c0edf973b3158acd40705a072901f7 b/.idea/sonarlint/issuestore/1/1/11fc5ee351c0edf973b3158acd40705a072901f7
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.idea/sonarlint/issuestore/7/c/7c103dcd8c0314a8821f84f7886754511983a720 b/.idea/sonarlint/issuestore/7/c/7c103dcd8c0314a8821f84f7886754511983a720
new file mode 100644
index 0000000000000000000000000000000000000000..49baffe2daef275d9641cc73fbdcc8705cfd0037
--- /dev/null
+++ b/.idea/sonarlint/issuestore/7/c/7c103dcd8c0314a8821f84f7886754511983a720
@@ -0,0 +1,2 @@
+
+Œphp:S112"FDefine and throw a dedicated exception instead of using a generic one.(÷¾Þ–ýÿÿÿÿ8¼Èñýë1J$639b0b04-18e2-4d6f-b884-25955f0cf69c
\ No newline at end of file
diff --git a/.idea/sonarlint/issuestore/d/a/dacdf19231dacf48f340f1ddb51182a025c0e074 b/.idea/sonarlint/issuestore/d/a/dacdf19231dacf48f340f1ddb51182a025c0e074
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb
new file mode 100644
index 0000000000000000000000000000000000000000..952c8a69794caa637ef4b2d74236ebf8f3ae2674
--- /dev/null
+++ b/.idea/sonarlint/issuestore/index.pb
@@ -0,0 +1,11 @@
+
+_
+/src/Controller/ReadFileLineByLineController.php,1/1/11fc5ee351c0edf973b3158acd40705a072901f7
+F
+public/HelloWorld.html,d/a/dacdf19231dacf48f340f1ddb51182a025c0e074
+@
+public/index.php,0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4
+_
+/src/Repository/ReadFileLineByLineRepository.php,7/c/7c103dcd8c0314a8821f84f7886754511983a720
+X
+(src/Actions/ReadFileLineByLineAction.php,b/b/bb599184d4f741824c29e585018cdb8069747a80
\ No newline at end of file
diff --git a/.idea/sonarlint/securityhotspotstore/0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4 b/.idea/sonarlint/securityhotspotstore/0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.idea/sonarlint/securityhotspotstore/1/1/11fc5ee351c0edf973b3158acd40705a072901f7 b/.idea/sonarlint/securityhotspotstore/1/1/11fc5ee351c0edf973b3158acd40705a072901f7
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.idea/sonarlint/securityhotspotstore/7/c/7c103dcd8c0314a8821f84f7886754511983a720 b/.idea/sonarlint/securityhotspotstore/7/c/7c103dcd8c0314a8821f84f7886754511983a720
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.idea/sonarlint/securityhotspotstore/d/a/dacdf19231dacf48f340f1ddb51182a025c0e074 b/.idea/sonarlint/securityhotspotstore/d/a/dacdf19231dacf48f340f1ddb51182a025c0e074
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.idea/sonarlint/securityhotspotstore/index.pb b/.idea/sonarlint/securityhotspotstore/index.pb
new file mode 100644
index 0000000000000000000000000000000000000000..952c8a69794caa637ef4b2d74236ebf8f3ae2674
--- /dev/null
+++ b/.idea/sonarlint/securityhotspotstore/index.pb
@@ -0,0 +1,11 @@
+
+_
+/src/Controller/ReadFileLineByLineController.php,1/1/11fc5ee351c0edf973b3158acd40705a072901f7
+F
+public/HelloWorld.html,d/a/dacdf19231dacf48f340f1ddb51182a025c0e074
+@
+public/index.php,0/e/0e61f67641b441bb3ee38e903c594d99cafa14b4
+_
+/src/Repository/ReadFileLineByLineRepository.php,7/c/7c103dcd8c0314a8821f84f7886754511983a720
+X
+(src/Actions/ReadFileLineByLineAction.php,b/b/bb599184d4f741824c29e585018cdb8069747a80
\ No newline at end of file
diff --git a/.idea/symfony2.xml b/.idea/symfony2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..329806066e98b4e5d3cac43f8b4f3f10d55bec96
--- /dev/null
+++ b/.idea/symfony2.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Symfony2PluginSettings">
+    <option name="pluginEnabled" value="true" />
+    <option name="lastServiceGeneratorLanguage" value="yaml" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/public/HelloWorld.html b/app/public/HelloWorld.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/app/public/helloWorld.html b/app/public/helloWorld.html
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/Actions/CountFriday13Action.php b/src/Actions/CountFriday13Action.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7986cd84ca2880d10e25b391da5d684f6e02888
--- /dev/null
+++ b/src/Actions/CountFriday13Action.php
@@ -0,0 +1,27 @@
+<?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;
+    }
+}
diff --git a/src/Actions/DiffDaysAction.php b/src/Actions/DiffDaysAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..c3ee3c28a3e86c759e6627eb79b4fbcc9f4f4fa7
--- /dev/null
+++ b/src/Actions/DiffDaysAction.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Actions;
+
+use DateTimeImmutable;
+
+class DiffDaysAction
+{
+    /**
+     * Вернет кол-во дней между датами
+     * @param DateTimeImmutable $dateStart дата начала
+     * @param DateTimeImmutable $dateEnd дата окончания
+     * @return int
+     * */
+    public function act(
+        DateTimeImmutable $dateStart,
+        DateTimeImmutable $dateEnd
+    ): int {
+        return (int) $dateStart->diff($dateEnd)->format('%a');
+    }
+}
diff --git a/src/Actions/HowDaysToNYAction.php b/src/Actions/HowDaysToNYAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..3c133ed921bc0eeaa7d38b13f083b3315a846786
--- /dev/null
+++ b/src/Actions/HowDaysToNYAction.php
@@ -0,0 +1,20 @@
+<?php
+
+namespace App\Actions;
+
+use DateTimeImmutable;
+
+class HowDaysToNYAction
+{
+    /**
+     * Функция рассчитывает кол-во дней до нового года
+     * @param DateTime $date дата от которой, необходимо рассчитать кол-во дней
+     * @return int
+     */
+    public function act(DateTimeImmutable $date): int
+    {
+        $dateOfNY = $date->modify('first day of Jan +1 year');
+
+        return (int) $dateOfNY->diff($date)->format('%a');
+    }
+}
\ No newline at end of file
diff --git a/src/Actions/IdSearchAction.php b/src/Actions/IdSearchAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..695329150f8356cafbe37813f6c032ff44fd337b
--- /dev/null
+++ b/src/Actions/IdSearchAction.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Actions;
+
+class IdSearchAction
+{
+    /**
+     * Найдет элемент с указаным id
+     * @param array $array - массив, содержащий элементы со структурой
+     * [
+     * 'id' => 30,
+     * 'name' => 'Jhon',
+     * 'age' => 23,
+     * ]
+     * @param $id - ид искомого элемента
+     * @return array|null - найденный элемент/ вернет null при его отсутствии
+     */
+    public static function act(array $array): ?array
+    {
+
+        foreach ($array['users'] as $item){
+            if ($item['id'] === $array['id']){
+                return $item;
+            }
+        }
+
+        return null;
+    }
+}
diff --git a/src/Actions/PrepareMenuAction.php b/src/Actions/PrepareMenuAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c819831ff2c5e757354a29e2325268c881ea3fb
--- /dev/null
+++ b/src/Actions/PrepareMenuAction.php
@@ -0,0 +1,35 @@
+<?php
+
+namespace App\Actions;
+
+class PrepareMenuAction
+{
+    /**
+     * Группирует подразедлы в верхние разделы меню
+     * Дочерние элементы помещает в массив родителя с ключом submenu
+     * Значение под ключом depth определяет уровень раздела
+     * Массив $aMenu всегда должен начинается с элемента depth = 0,
+     * все последующие элементы с depth = 1 являются его дочерними элементами
+     *
+     * @param array $menu
+     * @return array
+     */
+    public function act(array $menu): array
+    {
+        $returnableAMenu = [];
+        foreach ($menu as $menuPoint) {
+
+            $depth = $menuPoint["depth"];
+
+            if ($depth === 1) {
+                $tempArray = array_pop($returnableAMenu);
+                $tempArray['submenu'][] = $menuPoint;
+                $returnableAMenu[] = $tempArray;
+            } else {
+                $returnableAMenu[] = $menuPoint;
+            }
+        }
+
+        return $returnableAMenu;
+    }
+}
diff --git a/src/Actions/ReadFileLineByLineAction.php b/src/Actions/ReadFileLineByLineAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..cf7f1f6fd14f715c057fe14ef46e7734e2fb468e
--- /dev/null
+++ b/src/Actions/ReadFileLineByLineAction.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Actions;
+
+use Generator;
+
+class ReadFileLineByLineAction
+{
+    /**
+     * Принимает путь до файла,
+     * проверяет, что файл существует и выводит пользователю построчный вывод используя yield
+     * (файл можешь создать любой)
+     *
+     * @param string $filePath путь до файла
+     * @return string|Generator  */
+    public function act(string $filePath): Generator
+    {
+        if (!file_exists($filePath)) {
+            throw new Exception("неверный путь");
+        }
+
+        $file = fopen($filePath, 'r');
+        while (!feof($file)) {
+            yield fgets($file);
+        }
+
+        fclose($file);
+    }
+}
diff --git a/src/Actions/ReadLogFileAction.php b/src/Actions/ReadLogFileAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..ba63dd798f6508def3c58b48b1fbff4ed593adb2
--- /dev/null
+++ b/src/Actions/ReadLogFileAction.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Actions;
+
+use Exception;
+
+class ReadLogFileAction
+{
+    /**
+     * Принимает путь до файла,
+     * проверяет, что файл существует и выводит пользователю весь контент файла
+     * (файл можешь создать любой)
+     *
+     * @param string $filePath путь до файла
+     * @return false|string
+     * @throws Exception при отсутсвии фаила по переданному пути
+     */
+    public function act(string $filePath)
+    {
+        if (!file_exists($filePath)) {
+            throw new Exception("По данному пути ничего не найдено: $filePath");
+        }
+
+        return file_get_contents($filePath);
+    }
+}
diff --git a/src/Actions/SortPriceAction.php b/src/Actions/SortPriceAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..067f67ed9020bbdfacb7f88dfae057eec402b6fc
--- /dev/null
+++ b/src/Actions/SortPriceAction.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Actions;
+
+class SortPriceAction
+{
+    /**
+     * Выполняет сортировку массива по убыванию цены
+     * @param array $array
+     * @return array отсортированный
+     */
+    public function act(array $array): array
+    {
+        $priceColumn = array_column($array, "price");
+        $countColumn = array_column($array, "count");
+
+        array_multisort(
+            $priceColumn,
+            SORT_DESC,
+            $countColumn,
+            SORT_ASC,
+            $array,
+        );
+
+        return $array;
+    }
+}
diff --git a/src/Actions/UniqElementsAction.php b/src/Actions/UniqElementsAction.php
new file mode 100644
index 0000000000000000000000000000000000000000..3aa0e139f1779dcbe693c239f8b58a5ef0f3845d
--- /dev/null
+++ b/src/Actions/UniqElementsAction.php
@@ -0,0 +1,16 @@
+<?php
+
+namespace App\Actions;
+
+class UniqElementsAction
+{
+    /**
+     * Удаляет дубликаты, оставив только уникальные значения
+     * @param array $array
+     * @return array
+     */
+    public static function act(array $array): array
+    {
+        return array_unique($array, SORT_REGULAR);
+    }
+}
\ No newline at end of file
diff --git a/src/Controller/CountFriday13Controller.php b/src/Controller/CountFriday13Controller.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc3e7418aa51adf6719b9ca799e9f6381693f8fb
--- /dev/null
+++ b/src/Controller/CountFriday13Controller.php
@@ -0,0 +1,25 @@
+<?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()));
+    }
+}
diff --git a/src/Controller/DiffDaysController.php b/src/Controller/DiffDaysController.php
new file mode 100644
index 0000000000000000000000000000000000000000..7dc8cd80893a2738cbc5eec8998572c3bee67e7c
--- /dev/null
+++ b/src/Controller/DiffDaysController.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Controller;
+
+use App\Actions\DiffDaysAction;
+use App\Requests\DiffDaysRequest;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Attribute\Route;
+
+class DiffDaysController extends AbstractController
+{
+    /**
+     * Контроллер вернет кол-во дней между датами
+     * @param DiffDaysRequest $request
+     * @param DiffDaysAction $action
+     * @return Response
+     */
+    #[Route('/diff/days', name: 'app_diff_days', methods: ['POST'])]
+    public function index(DiffDaysRequest $request, DiffDaysAction $action): Response
+    {
+        $array = $request->serialise();
+        return new JsonResponse($action->act($array['startDate'], $array['endDate']));
+    }
+}
diff --git a/src/Controller/HowDaysToNYController.php b/src/Controller/HowDaysToNYController.php
new file mode 100644
index 0000000000000000000000000000000000000000..8311dcef842015f0f0fcbafea037d03fd26f89be
--- /dev/null
+++ b/src/Controller/HowDaysToNYController.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Controller;
+
+use App\Actions\HowDaysToNYAction;
+use App\Requests\BeforeNYDateRequest;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Attribute\Route;
+
+class HowDaysToNYController extends AbstractController
+{
+    /**
+     * Контролер рассчитывает кол-во дней до нового года используюя howDaysToNy
+     * @param BeforeNYDateRequest $request
+     * @param HowDaysToNYAction $action
+     * @return Response
+     */
+    #[Route('/howdaystony', name: 'app_how_days_to_n_y')]
+    public function index(BeforeNYDateRequest $request, HowDaysToNYAction $action): Response
+    {
+        return new JsonResponse($action->act($request->serialise()));
+    }
+}
diff --git a/src/Controller/IdSearchController.php b/src/Controller/IdSearchController.php
new file mode 100644
index 0000000000000000000000000000000000000000..3dd1716b17df2919d4f5fc5ca78d4930393cd9b2
--- /dev/null
+++ b/src/Controller/IdSearchController.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Controller;
+
+use App\Actions\IdSearchAction;
+use App\Requests\UsersRequest;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\Routing\Attribute\Route;
+
+class IdSearchController extends AbstractController
+{
+    /**
+     * Контроллер найдет элемент с указаным id используя sortPrice
+     * @param UsersRequest $request
+     * @param IdSearchAction $action
+     * @return JsonResponse
+     */
+    #[Route('/search', name: 'app_search', methods: ['POST'])]
+    public function index(UsersRequest $request, IdSearchAction $action): JsonResponse
+    {
+        return new JsonResponse($action->act($request->serialise()));
+    }
+}
\ No newline at end of file
diff --git a/src/Controller/PrepareMenuController.php b/src/Controller/PrepareMenuController.php
new file mode 100644
index 0000000000000000000000000000000000000000..49a74dd59b5600f956078046d942b7f9dfab405e
--- /dev/null
+++ b/src/Controller/PrepareMenuController.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace App\Controller;
+
+use App\Actions\PrepareMenuAction;
+use App\Requests\MenuRequest;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Attribute\Route;
+
+class PrepareMenuController extends AbstractController
+{
+    /**
+     * Контроллер реструктурирует массив меню добавляя вложенность по значению depth
+     * используюя prepareMenu функцию
+     * @param MenuRequest $request
+     * @param PrepareMenuAction $action
+     * @return Response
+     */
+    #[Route('/prepare/menu', name: 'app_prepare_menu', methods: ['POST'])]
+    public function index(MenuRequest $request, PrepareMenuAction $action): Response
+    {
+        return new JsonResponse($action->act($request->serialise()));
+    }
+}
diff --git a/src/Controller/ReadFileLineByLineController.php b/src/Controller/ReadFileLineByLineController.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6d0f0398a031505d844e51636a858ad469b7bc7
--- /dev/null
+++ b/src/Controller/ReadFileLineByLineController.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace App\Controller;
+
+use App\Actions\ReadFileLineByLineAction;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Attribute\Route;
+
+class ReadFileLineByLineController extends AbstractController
+{
+    /**
+     * Принимает путь до файла,
+     * проверяет, что файл существует и выводит пользователю построчный вывод используя yield
+     *
+     * @param string $filePath путь до файла
+     * @return Response  */
+    #[Route('/readbyline', name: 'app_read_file_line_by_line', methods: ['POST'])]
+    public function index(
+        Request $request,
+        ReadFileLineByLineAction $action
+    ) : Response {
+        $file = $request->files->get('File');
+        $content = "";
+        try{
+            foreach ($action->act($file->getRealPath()) as $line) {
+                $content .= $line;
+            }
+        } catch (\Exception $exception) {
+            return new Response($exception->getMessage(), Response::HTTP_NOT_FOUND);
+        }
+
+        return new Response($content);
+    }
+}
diff --git a/src/Controller/ReadLogFileController.php b/src/Controller/ReadLogFileController.php
new file mode 100644
index 0000000000000000000000000000000000000000..809cf6439f59dbc6117f3a7d180a7702f643a785
--- /dev/null
+++ b/src/Controller/ReadLogFileController.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Controller;
+use App\Actions\ReadLogFileAction;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Attribute\Route;
+
+class ReadLogFileController extends AbstractController
+{
+    /**
+     * Принимает путь до файла,
+     * проверяет, что файл существует и выводит пользователю весь контент файла
+     * (файл можешь создать любой)
+     *
+     * @param Request $request
+     * @param ReadLogFileAction $action
+     * @return Response
+     */
+    #[Route('/read', name: 'app_read_log_file', methods: ['POST'])]
+    public function index(Request $request, ReadLogFileAction $action): Response
+    {
+        $file = $request->files->get("File");
+        return new Response($action->act($file->getPathname()));
+    }
+
+    }
+
diff --git a/src/Controller/SortPriceController.php b/src/Controller/SortPriceController.php
new file mode 100644
index 0000000000000000000000000000000000000000..0f1d250b6c31ea3f0dee3f4581c722d10adb2cdf
--- /dev/null
+++ b/src/Controller/SortPriceController.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Controller;
+
+use App\Actions\SortPriceAction;
+use App\Requests\PricesRequest;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\Routing\Attribute\Route;
+
+class SortPriceController extends AbstractController
+{
+    /**
+     * Контроллер волняет сортировку массива по убыванию цены используя sortPrice
+     * @param PricesRequest $request
+     * @param SortPriceAction $action
+     * @return JsonResponse
+     */
+    #[Route('/sort/price', name: 'app_sort_price', methods: ['POST'])]
+    public function index(PricesRequest $request, SortPriceAction $action): JsonResponse
+    {
+        return new JsonResponse($action->act($request->serialise()));
+    }
+}
diff --git a/src/Controller/UniqElementsController.php b/src/Controller/UniqElementsController.php
new file mode 100644
index 0000000000000000000000000000000000000000..442c9d706cd88d708688f9dc1a5ecb3260d812a1
--- /dev/null
+++ b/src/Controller/UniqElementsController.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Controller;
+
+use App\Actions\UniqElementsAction;
+use App\Requests\UniqElementsRequest;
+use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Response;
+use Symfony\Component\Routing\Attribute\Route;
+
+class UniqElementsController extends AbstractController
+{
+    #[Route('/uniq/elements', name: 'app_uniq_elements', methods: ['POST'])]
+    public function index(UniqElementsRequest $request, UniqElementsAction $action): Response
+    {
+        return new JsonResponse($action->act($request->serialise()));
+    }
+}
diff --git a/src/Requests/AllFri13Request.php b/src/Requests/AllFri13Request.php
new file mode 100644
index 0000000000000000000000000000000000000000..d98cebb598d5216595bfd7c89d2b6e2b91662619
--- /dev/null
+++ b/src/Requests/AllFri13Request.php
@@ -0,0 +1,21 @@
+<?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
diff --git a/src/Requests/BaseRequest.php b/src/Requests/BaseRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b2fb49ed286c374885e1b073732ab13a0366d5a0
--- /dev/null
+++ b/src/Requests/BaseRequest.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace App\Requests;
+
+use Symfony\Component\HttpFoundation\JsonResponse;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Validator\Exception\ValidatorException;
+use Symfony\Component\Validator\Validator\ValidatorInterface;
+
+abstract class BaseRequest
+{
+    /**
+     * активация автовалидации
+     * перезаписать на false для отключение автовалидации
+     */
+    protected const AUTO_VALIDATE = true;
+
+    public function __construct(protected ValidatorInterface $validator)
+    {
+        $this->populate();
+
+        if (self::AUTO_VALIDATE) {
+            $this->validate();
+        }
+    }
+
+    protected function populate(): void
+    {
+        foreach ($this->getRequest()->toArray() as $property => $value) {
+            if (property_exists($this, $property)) {
+                $this->{$property} = $value;
+            }
+        }
+    }
+
+    /**
+     * валидация и выброкса ошибки при валидации
+     * @return void
+     */
+    public function validate()
+    {
+        $errors = $this->validator->validate($this);
+
+        $messages = [
+            'message' => 'validation_failed',
+            'errors' => []
+        ];
+
+        foreach ($errors as $error) {
+            $messages['errors'][] = [
+                'property' => $error->getPropertyPath(),
+                'value' => $error->getInvalidValue(),
+                'message' => $error->getMessage(),
+            ];
+        }
+
+        if (count($messages['errors']) > 0) {
+            $response = new JsonResponse($messages, 201);
+            $response->send();
+
+            throw new ValidatorException('Validation failed', $messages);
+        }
+    }
+
+    public function getRequest(): Request
+    {
+        return Request::createFromGlobals();
+    }
+
+    abstract public function serialise(): mixed;
+}
\ No newline at end of file
diff --git a/src/Requests/BeforeNYDateRequest.php b/src/Requests/BeforeNYDateRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..445bc20f34656a0551f6a13947206872e4db6aa6
--- /dev/null
+++ b/src/Requests/BeforeNYDateRequest.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Requests;
+
+use DateTimeImmutable;
+use Symfony\Component\Validator\Constraints\Date;
+use Symfony\Component\Validator\Constraints\Type;
+
+class BeforeNYDateRequest extends BaseRequest
+{
+    #[Date()]
+    #[Type('string')]
+    public $date;
+
+    public function serialise(): mixed
+    {
+        return new DateTimeImmutable($this->date);
+    }
+}
diff --git a/src/Requests/DiffDaysRequest.php b/src/Requests/DiffDaysRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..95295fd7bba664592cb6358dac546176dd9d6ea7
--- /dev/null
+++ b/src/Requests/DiffDaysRequest.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace App\Requests;
+
+use DateTimeImmutable;
+use Symfony\Component\Validator\Constraints\Date;
+use Symfony\Component\Validator\Constraints\NotBlank;
+
+class DiffDaysRequest extends BaseRequest
+{
+    #[Date]
+    #[NotBlank]
+    public $startDate;
+
+    #[Date]
+    #[NotBlank]
+    public $endDate;
+
+    /**
+     * @return mixed
+     */
+    public function serialise(): mixed
+    {
+        return [
+            'startDate' => new DateTimeImmutable($this->startDate),
+            'endDate' => new DateTimeImmutable($this->endDate),
+        ];
+    }
+}
\ No newline at end of file
diff --git a/src/Requests/MenuRequest.php b/src/Requests/MenuRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..99bf7832858bdbab9739ab66d52845988756873d
--- /dev/null
+++ b/src/Requests/MenuRequest.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace App\Requests;
+
+use Symfony\Component\Validator\Constraints\All;
+use Symfony\Component\Validator\Constraints\Collection;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Symfony\Component\Validator\Constraints\Type;
+
+class MenuRequest extends BaseRequest
+{
+
+    #[Type('array')]
+    #[All(
+        constraints: new Collection(fields:[
+            'name' => [
+                new NotBlank(),
+                new Type('string'),
+            ],
+            'depth' => [
+                new NotBlank(),
+                new Type('integer'),
+            ]
+        ])
+    )]
+    public $menu;
+
+    public function serialise(): mixed
+    {
+        return $this->menu;
+    }
+}
diff --git a/src/Requests/PricesRequest.php b/src/Requests/PricesRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..dadac42991ac8f9fab940eccac3de760d24cbff3
--- /dev/null
+++ b/src/Requests/PricesRequest.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Requests;
+
+use Symfony\Component\Validator\Constraints\All;
+use Symfony\Component\Validator\Constraints\Collection;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Symfony\Component\Validator\Constraints\Type;
+use Symfony\Contracts\Service\Attribute\Required;
+
+class PricesRequest extends BaseRequest
+{
+    #[Type('array')]
+    #[NotBlank()]
+    #[Required()]
+    #[All(
+        constraints: [
+            new Collection(
+                fields: [
+                    'price' => [
+                        new NotBlank(),
+                        new Type('integer'),
+                    ],
+                    'count' => [
+                        new NotBlank(),
+                        new Type('integer'),
+                    ],
+                ],
+            )
+        ]
+    )]
+    public $prices;
+
+    /**
+     * серализация реквеста под массив
+     * @return mixed
+     */
+    public function serialise(): mixed
+    {
+        return $this->prices;
+    }
+}
diff --git a/src/Requests/UniqElementsRequest.php b/src/Requests/UniqElementsRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..111731374bbdde336e946a1623fdb42512fe8939
--- /dev/null
+++ b/src/Requests/UniqElementsRequest.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Requests;
+
+use Symfony\Component\Validator\Constraints\Type;
+use Symfony\Contracts\Service\Attribute\Required;
+
+class UniqElementsRequest extends BaseRequest
+{
+    #[Type('array')]
+    #[Required]
+    public $data;
+
+    /**
+     * @return mixed
+     */
+    public function serialise(): mixed
+    {
+        return $this->data;
+    }
+}
diff --git a/src/Requests/UsersRequest.php b/src/Requests/UsersRequest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1d5bd95f0d2b5f3840e001e6247e272c555a8d82
--- /dev/null
+++ b/src/Requests/UsersRequest.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Requests;
+
+use Symfony\Component\Validator\Constraints\All;
+use Symfony\Component\Validator\Constraints\Collection;
+use Symfony\Component\Validator\Constraints\NotBlank;
+use Symfony\Component\Validator\Constraints\Optional;
+use Symfony\Component\Validator\Constraints\Type;
+
+class UsersRequest extends BaseRequest
+{
+    #[Type('integer')]
+    #[NotBlank]
+    public $id;
+
+    #[Type('array')]
+    #[All(
+        constraints: new Collection(fields: [
+                'id' => [
+                    new Type('integer'),
+                    new NotBlank(),
+                ],
+                'name' => [
+                    new Type('string'),
+                    new NotBlank(),
+                ],
+                'age' => new Optional([
+                    new Type('integer'),
+                ])
+            ])
+    )]
+    public $users;
+
+    /**
+     * @return array
+     */
+    public function serialise(): array
+    {
+        return [
+            'id' => $this->id,
+            'users' => $this->users,
+        ];
+    }
+}
\ No newline at end of file
diff --git a/templates/count_friday13/index.html.twig b/templates/count_friday13/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..e90908d4154aa6ea087da53532a9996b0a1573f3
--- /dev/null
+++ b/templates/count_friday13/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello CountFriday13Controller!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/CountFriday13Controller.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/count_friday13/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}
diff --git a/templates/diff_days/index.html.twig b/templates/diff_days/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..462ac0bbc54b6e9311447613b99e5457433851c0
--- /dev/null
+++ b/templates/diff_days/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello DiffDaysController!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/DiffDaysController.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/diff_days/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}
diff --git a/templates/how_days_to_ny/index.html.twig b/templates/how_days_to_ny/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..4058510b94b0920e26da7a99e4def23bac7be5d2
--- /dev/null
+++ b/templates/how_days_to_ny/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello HowDaysToNYController!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/HowDaysToNYController.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/how_days_to_ny/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}
diff --git a/templates/prepare_menu/index.html.twig b/templates/prepare_menu/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..ddfd6d14ef4b7191b4413d38aa67b9f4a6bd8137
--- /dev/null
+++ b/templates/prepare_menu/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello PrepareMenuController!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/PrepareMenuController.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/prepare_menu/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}
diff --git a/templates/read_file_line_by_line/index.html.twig b/templates/read_file_line_by_line/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..68aed515aad05ba67fe66ac06faeec8307a21a4f
--- /dev/null
+++ b/templates/read_file_line_by_line/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello ReadFileLineByLineController!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/ReadFileLineByLineController.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/read_file_line_by_line/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}
diff --git a/templates/read_log_file/index.html.twig b/templates/read_log_file/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..9f08f19af529af6e8a648246ba6606cce8dcb9fe
--- /dev/null
+++ b/templates/read_log_file/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello ReadLogFileController!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/ReadLogFileController.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/read_log_file/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}
diff --git a/templates/search/index.html.twig b/templates/search/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..bd465aa05ce19d1de5e42d822bcf4fb7a6b6e239
--- /dev/null
+++ b/templates/search/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello SearchController!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/SearchController.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/search/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}
diff --git a/templates/sort_price/index.html.twig b/templates/sort_price/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..cd62397e96e6d43936ad35e95dec013ea992cb21
--- /dev/null
+++ b/templates/sort_price/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello SortPriceController!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/SortPriceController.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/sort_price/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}
diff --git a/templates/uniq_elements/index.html.twig b/templates/uniq_elements/index.html.twig
new file mode 100644
index 0000000000000000000000000000000000000000..d56494b7519d691246e25955e4d51e8d7523b566
--- /dev/null
+++ b/templates/uniq_elements/index.html.twig
@@ -0,0 +1,20 @@
+{% extends 'base.html.twig' %}
+
+{% block title %}Hello UniqElementsController!{% endblock %}
+
+{% block body %}
+<style>
+    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
+    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
+</style>
+
+<div class="example-wrapper">
+    <h1>Hello {{ controller_name }}! ✅</h1>
+
+    This friendly message is coming from:
+    <ul>
+        <li>Your controller at <code>/home/tamanit/myProj/iqdevTranningProgram/src/Controller/UniqElementsController.php</code></li>
+        <li>Your template at <code>/home/tamanit/myProj/iqdevTranningProgram/templates/uniq_elements/index.html.twig</code></li>
+    </ul>
+</div>
+{% endblock %}