diff --git a/README.md b/README.md index 4fb3e81f..d2831812 100644 --- a/README.md +++ b/README.md @@ -31,25 +31,35 @@ Documentation is available at: https://docs.dotkernel.org/api-documentation/ Using your terminal, navigate inside the directory you want to download the project files into. Make sure that the directory is empty before proceeding to the download process. Once there, run the following command: - git clone https://github.com/dotkernel/api.git . +```shell +git clone https://github.com/dotkernel/api.git . +``` ## Step 2: Install project's dependencies - composer install +```shell +composer install +``` ## Step 3: Development mode If you're installing the project for development, make sure you have development mode enabled, by running: - composer development-enable +```shell +composer development-enable +``` You can disable development mode by running: - composer development-disable +```shell +composer development-disable +``` You can check if you have development mode enabled by running: - composer development-status +```shell +composer development-status +``` ## Step 4: Prepare config files @@ -66,11 +76,13 @@ You can check if you have development mode enabled by running: * fill out the database connection params in `config/autoload/local.php` under `$databases['default']` * run the database migrations by using the following command: - php vendor/bin/doctrine-migrations migrate +```shell +php vendor/bin/doctrine-migrations migrate +``` This command will prompt you to confirm that you want to run it: - WARNING! You are about to execute a migration in database "..." that could result in schema changes and data loss. Are you sure you wish to continue? (yes/no) [yes]: +> WARNING! You are about to execute a migration in database "..." that could result in schema changes and data loss. Are you sure you wish to continue? (yes/no) [yes]: Hit `Enter` to confirm the operation. @@ -80,29 +92,39 @@ Hit `Enter` to confirm the operation. To list all the fixtures, run: - php bin/doctrine fixtures:list +```shell +php bin/doctrine fixtures:list +``` This will output all the fixtures in the order of execution. To execute all fixtures, run: - php bin/doctrine fixtures:execute +```shell +php bin/doctrine fixtures:execute +``` To execute a specific fixture, run: - php bin/doctrine fixtures:execute --class=FixtureClassName +```shell +php bin/doctrine fixtures:execute --class=FixtureClassName +``` More details on how fixtures work can be found here: https://github.com/dotkernel/dot-data-fixtures#creating-fixtures ## Step 6: Test the installation - php -S 0.0.0.0:8080 -t public +```shell +php -S 0.0.0.0:8080 -t public +``` Sending a GET request to the [home page](http://0.0.0.0:8080/) should output the following message: - { +```text +{ "message": "DotKernel API version 5" - } +} +``` ## Documentation diff --git a/composer.json b/composer.json index a0fdfa0b..6107a3cf 100644 --- a/composer.json +++ b/composer.json @@ -93,7 +93,9 @@ "Api\\Admin\\": "src/Admin/src/", "Api\\App\\": "src/App/src/", "Api\\User\\": "src/User/src/", - "Api\\Fixtures\\": "data/doctrine/fixtures/" + "Core\\Admin\\": "src/Core/src/Admin/src/", + "Core\\App\\": "src/Core/src/App/src/", + "Core\\User\\": "src/Core/src/User/src/" } }, "autoload-dev": { @@ -109,7 +111,6 @@ "development-disable": "laminas-development-mode disable", "development-enable": "laminas-development-mode enable", "development-status": "laminas-development-mode status", - "mezzio": "mezzio --ansi", "check": [ "@cs-check", "@test", @@ -120,7 +121,6 @@ "cs-fix": "phpcbf", "serve": "php -S 0.0.0.0:8080 -t public/", "static-analysis": "phpstan analyse --memory-limit 1G", - "test": "phpunit --colors=always", - "test-coverage": "phpunit --colors=always --coverage-clover clover.xml" + "test": "phpunit --colors=always" } } diff --git a/config/autoload/authorization.global.php b/config/autoload/authorization.global.php index 543ff5fd..517d15f5 100644 --- a/config/autoload/authorization.global.php +++ b/config/autoload/authorization.global.php @@ -2,8 +2,8 @@ declare(strict_types=1); -use Api\Admin\Entity\AdminRole; -use Api\User\Entity\UserRole; +use Core\Admin\Entity\AdminRole; +use Core\User\Entity\UserRole; return [ /** diff --git a/config/autoload/dependencies.global.php b/config/autoload/dependencies.global.php index e856f63d..1a4d71d2 100644 --- a/config/autoload/dependencies.global.php +++ b/config/autoload/dependencies.global.php @@ -10,13 +10,13 @@ use Api\App\Factory\OAuthScopeRepositoryFactory; use Api\App\Factory\UserIdentityFactory; use Api\App\Factory\UserRepositoryFactory; -use Api\App\Repository\OAuthAccessTokenRepository; -use Api\App\Repository\OAuthAuthCodeRepository; -use Api\App\Repository\OAuthClientRepository; -use Api\App\Repository\OAuthRefreshTokenRepository; -use Api\App\Repository\OAuthScopeRepository; -use Api\App\UserIdentity; -use Api\User\Repository\UserRepository; +use Core\App\Repository\OAuthAccessTokenRepository; +use Core\App\Repository\OAuthAuthCodeRepository; +use Core\App\Repository\OAuthClientRepository; +use Core\App\Repository\OAuthRefreshTokenRepository; +use Core\App\Repository\OAuthScopeRepository; +use Core\User\Repository\UserRepository; +use Core\User\UserIdentity; use Doctrine\Migrations\Tools\Console\Command\ExecuteCommand; use Dot\ErrorHandler\ErrorHandlerInterface; use Dot\ErrorHandler\LogErrorHandler; @@ -41,8 +41,8 @@ ClientRepositoryInterface::class => OAuthClientRepository::class, RefreshTokenRepositoryInterface::class => OAuthRefreshTokenRepository::class, ScopeRepositoryInterface::class => OAuthScopeRepository::class, - ErrorHandlerInterface::class => LogErrorHandler::class, Mezzio\Authentication\UserInterface::class => UserIdentity::class, + ErrorHandlerInterface::class => LogErrorHandler::class, Mezzio\Authorization\AuthorizationInterface::class => Mezzio\Authorization\Rbac\LaminasRbac::class, UserRepositoryInterface::class => UserRepository::class, ], diff --git a/config/autoload/doctrine.global.php b/config/autoload/doctrine.global.php deleted file mode 100644 index fd165f95..00000000 --- a/config/autoload/doctrine.global.php +++ /dev/null @@ -1,69 +0,0 @@ - [ - 'connection' => [ - 'orm_default' => [ - 'doctrine_mapping_types' => [ - UuidBinaryType::NAME => 'binary', - UuidBinaryOrderedTimeType::NAME => 'binary', - ], - ], - ], - 'driver' => [ - 'orm_default' => [ - 'class' => MappingDriverChain::class, - 'drivers' => [], - ], - ], - 'types' => [ - UuidType::NAME => UuidType::class, - UuidBinaryType::NAME => UuidBinaryType::class, - UuidBinaryOrderedTimeType::NAME => UuidBinaryOrderedTimeType::class, - AdminStatusEnumType::NAME => AdminStatusEnumType::class, - UserStatusEnumType::NAME => UserStatusEnumType::class, - UserResetPasswordStatusEnumType::NAME => UserResetPasswordStatusEnumType::class, - ], - 'fixtures' => getcwd() . '/data/doctrine/fixtures', - 'configuration' => [ - 'orm_default' => [ - 'entity_listener_resolver' => EntityListenerResolver::class, - 'result_cache' => 'filesystem', - 'metadata_cache' => 'filesystem', - 'query_cache' => 'filesystem', - 'hydration_cache' => 'array', - 'typed_field_mapper' => null, - 'second_level_cache' => [ - 'enabled' => true, - 'default_lifetime' => 3600, - 'default_lock_lifetime' => 60, - 'file_lock_region_directory' => '', - 'regions' => [], - ], - ], - ], - 'cache' => [ - 'array' => [ - 'class' => ArrayAdapter::class, - ], - 'filesystem' => [ - 'class' => FilesystemAdapter::class, - 'directory' => getcwd() . '/data/cache', - 'namespace' => 'doctrine', - ], - ], - ], -]; diff --git a/config/cli-config.php b/config/cli-config.php index d7f68f4a..80dee1af 100644 --- a/config/cli-config.php +++ b/config/cli-config.php @@ -3,14 +3,14 @@ declare(strict_types=1); use Doctrine\Migrations\Configuration\EntityManager\ExistingEntityManager; -use Doctrine\Migrations\Configuration\Migration\PhpFile; +use Doctrine\Migrations\Configuration\Migration\ConfigurationArray; use Doctrine\Migrations\DependencyFactory; use Doctrine\ORM\EntityManager; $container = require 'config/container.php'; return DependencyFactory::fromEntityManager( - new PhpFile('config/migrations.php'), + new ConfigurationArray($container->get('config')['doctrine']['migrations']), new ExistingEntityManager( $container->get(EntityManager::class) ) diff --git a/config/config.php b/config/config.php index 513ff9d2..5ccb6224 100644 --- a/config/config.php +++ b/config/config.php @@ -48,9 +48,13 @@ class_exists(Mezzio\Tooling\ConfigProvider::class) Dot\Cache\ConfigProvider::class, // Default App module config + Core\Admin\ConfigProvider::class, + Core\App\ConfigProvider::class, + Core\User\ConfigProvider::class, Api\Admin\ConfigProvider::class, Api\App\ConfigProvider::class, Api\User\ConfigProvider::class, + // Load application config in a pre-defined order in such a way that local settings // overwrite global settings. (Loaded as first to last): // - `global.php` diff --git a/config/migrations.php b/config/migrations.php deleted file mode 100644 index cdb3d336..00000000 --- a/config/migrations.php +++ /dev/null @@ -1,18 +0,0 @@ - [ - 'table_name' => 'doctrine_migration_versions', - 'version_column_name' => 'version', - 'version_column_length' => 191, - 'executed_at_column_name' => 'executed_at', - 'execution_time_column_name' => 'execution_time', - ], - 'migrations_paths' => [ - 'Api\Migrations' => 'data/doctrine/migrations', - ], - 'all_or_nothing' => true, - 'check_database_platform' => true, -]; diff --git a/phpcs.xml b/phpcs.xml index 52504edb..c4307090 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -18,6 +18,8 @@ src test + src/Core/src/App/src/Migration/* + diff --git a/src/Admin/src/Command/AdminCreateCommand.php b/src/Admin/src/Command/AdminCreateCommand.php index 777d8df5..efcdac1e 100644 --- a/src/Admin/src/Command/AdminCreateCommand.php +++ b/src/Admin/src/Command/AdminCreateCommand.php @@ -4,14 +4,14 @@ namespace Api\Admin\Command; -use Api\Admin\Entity\AdminRole; use Api\Admin\InputFilter\CreateAdminInputFilter; use Api\Admin\Service\AdminRoleService; use Api\Admin\Service\AdminService; use Api\App\Exception\BadRequestException; use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; -use Api\App\Message; +use Core\Admin\Entity\AdminRole; +use Core\App\Message; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -34,7 +34,7 @@ class AdminCreateCommand extends Command public function __construct( protected AdminService $adminService, - protected AdminRoleService $adminRoleService + protected AdminRoleService $adminRoleService, ) { parent::__construct(self::$defaultName); } diff --git a/src/Admin/src/ConfigProvider.php b/src/Admin/src/ConfigProvider.php index 21deafdb..485da2f4 100644 --- a/src/Admin/src/ConfigProvider.php +++ b/src/Admin/src/ConfigProvider.php @@ -7,23 +7,22 @@ use Api\Admin\Collection\AdminCollection; use Api\Admin\Collection\AdminRoleCollection; use Api\Admin\Command\AdminCreateCommand; -use Api\Admin\Entity\Admin; -use Api\Admin\Entity\AdminRole; use Api\Admin\Factory\AdminCreateCommandFactory; use Api\Admin\Handler\AdminAccountHandler; use Api\Admin\Handler\AdminCollectionHandler; use Api\Admin\Handler\AdminHandler; use Api\Admin\Handler\AdminRoleCollectionHandler; use Api\Admin\Handler\AdminRoleHandler; -use Api\Admin\Repository\AdminRepository; -use Api\Admin\Repository\AdminRoleRepository; use Api\Admin\Service\AdminRoleService; use Api\Admin\Service\AdminRoleServiceInterface; use Api\Admin\Service\AdminService; use Api\Admin\Service\AdminServiceInterface; use Api\App\ConfigProvider as AppConfigProvider; use Api\App\Factory\HandlerDelegatorFactory; -use Doctrine\ORM\Mapping\Driver\AttributeDriver; +use Core\Admin\Entity\Admin; +use Core\Admin\Entity\AdminRole; +use Core\Admin\Repository\AdminRepository; +use Core\Admin\Repository\AdminRoleRepository; use Dot\DependencyInjection\Factory\AttributedRepositoryFactory; use Dot\DependencyInjection\Factory\AttributedServiceFactory; use Mezzio\Application; @@ -35,7 +34,6 @@ public function __invoke(): array { return [ 'dependencies' => $this->getDependencies(), - 'doctrine' => $this->getDoctrineConfig(), MetadataMap::class => $this->getHalConfig(), ]; } @@ -70,24 +68,6 @@ public function getDependencies(): array ]; } - private function getDoctrineConfig(): array - { - return [ - 'driver' => [ - 'orm_default' => [ - 'drivers' => [ - 'Api\Admin\Entity' => 'AdminEntities', - ], - ], - 'AdminEntities' => [ - 'class' => AttributeDriver::class, - 'cache' => 'array', - 'paths' => __DIR__ . '/Entity', - ], - ], - ]; - } - public function getHalConfig(): array { return [ diff --git a/src/Admin/src/Handler/AdminAccountHandler.php b/src/Admin/src/Handler/AdminAccountHandler.php index 74bb3af3..d72ad13e 100644 --- a/src/Admin/src/Handler/AdminAccountHandler.php +++ b/src/Admin/src/Handler/AdminAccountHandler.php @@ -4,13 +4,13 @@ namespace Api\Admin\Handler; -use Api\Admin\Entity\Admin; use Api\Admin\InputFilter\UpdateAdminInputFilter; use Api\Admin\Service\AdminServiceInterface; use Api\App\Exception\BadRequestException; use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; use Api\App\Handler\AbstractHandler; +use Core\Admin\Entity\Admin; use Dot\DependencyInjection\Attribute\Inject; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; diff --git a/src/Admin/src/InputFilter/Input/FirstNameInput.php b/src/Admin/src/InputFilter/Input/FirstNameInput.php index a865f4e8..a1261f6b 100644 --- a/src/Admin/src/InputFilter/Input/FirstNameInput.php +++ b/src/Admin/src/InputFilter/Input/FirstNameInput.php @@ -4,7 +4,7 @@ namespace Api\Admin\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/Admin/src/InputFilter/Input/IdentityInput.php b/src/Admin/src/InputFilter/Input/IdentityInput.php index 82abf6fe..6d1fb50f 100644 --- a/src/Admin/src/InputFilter/Input/IdentityInput.php +++ b/src/Admin/src/InputFilter/Input/IdentityInput.php @@ -4,7 +4,7 @@ namespace Api\Admin\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/Admin/src/InputFilter/Input/LastNameInput.php b/src/Admin/src/InputFilter/Input/LastNameInput.php index 4d000fb8..77851797 100644 --- a/src/Admin/src/InputFilter/Input/LastNameInput.php +++ b/src/Admin/src/InputFilter/Input/LastNameInput.php @@ -4,7 +4,7 @@ namespace Api\Admin\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/Admin/src/InputFilter/Input/PasswordConfirmInput.php b/src/Admin/src/InputFilter/Input/PasswordConfirmInput.php index 1ae9bd1f..386c5c61 100644 --- a/src/Admin/src/InputFilter/Input/PasswordConfirmInput.php +++ b/src/Admin/src/InputFilter/Input/PasswordConfirmInput.php @@ -4,7 +4,7 @@ namespace Api\Admin\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/Admin/src/InputFilter/Input/PasswordInput.php b/src/Admin/src/InputFilter/Input/PasswordInput.php index 9bf25016..22d3cf31 100644 --- a/src/Admin/src/InputFilter/Input/PasswordInput.php +++ b/src/Admin/src/InputFilter/Input/PasswordInput.php @@ -4,7 +4,7 @@ namespace Api\Admin\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/Admin/src/InputFilter/Input/StatusInput.php b/src/Admin/src/InputFilter/Input/StatusInput.php index fe0b5288..5dcfda15 100644 --- a/src/Admin/src/InputFilter/Input/StatusInput.php +++ b/src/Admin/src/InputFilter/Input/StatusInput.php @@ -4,8 +4,8 @@ namespace Api\Admin\InputFilter\Input; -use Api\Admin\Enum\AdminStatusEnum; -use Api\App\Message; +use Core\Admin\Enum\AdminStatusEnum; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/Admin/src/OpenAPI.php b/src/Admin/src/OpenAPI.php index 357136f9..b2a71e3d 100644 --- a/src/Admin/src/OpenAPI.php +++ b/src/Admin/src/OpenAPI.php @@ -6,12 +6,12 @@ use Api\Admin\Collection\AdminCollection; use Api\Admin\Collection\AdminRoleCollection; -use Api\Admin\Entity\Admin; -use Api\Admin\Entity\AdminRole; -use Api\Admin\Enum\AdminStatusEnum; use Api\Admin\Handler\AdminAccountHandler; use Api\Admin\Handler\AdminHandler; use Api\Admin\Handler\AdminRoleHandler; +use Core\Admin\Entity\Admin; +use Core\Admin\Entity\AdminRole; +use Core\Admin\Enum\AdminStatusEnum; use DateTimeImmutable; use Fig\Http\Message\StatusCodeInterface; use OpenApi\Attributes as OA; diff --git a/src/Admin/src/Service/AdminRoleService.php b/src/Admin/src/Service/AdminRoleService.php index bace975a..971d9bac 100644 --- a/src/Admin/src/Service/AdminRoleService.php +++ b/src/Admin/src/Service/AdminRoleService.php @@ -5,11 +5,11 @@ namespace Api\Admin\Service; use Api\Admin\Collection\AdminRoleCollection; -use Api\Admin\Entity\AdminRole; -use Api\Admin\Repository\AdminRoleRepository; use Api\App\Exception\BadRequestException; use Api\App\Exception\NotFoundException; -use Api\App\Message; +use Core\Admin\Entity\AdminRole; +use Core\Admin\Repository\AdminRoleRepository; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use function in_array; @@ -54,6 +54,9 @@ public function getAdminRoles(array $params = []): AdminRoleCollection throw (new BadRequestException())->setMessages([sprintf(Message::INVALID_VALUE, 'order')]); } - return $this->adminRoleRepository->getAdminRoles($params); + $qb = $this->adminRoleRepository->getAdminRoles($params); + $qb->getQuery()->useQueryCache(true); + + return new AdminRoleCollection($qb, false); } } diff --git a/src/Admin/src/Service/AdminRoleServiceInterface.php b/src/Admin/src/Service/AdminRoleServiceInterface.php index a2d1dca8..27671eff 100644 --- a/src/Admin/src/Service/AdminRoleServiceInterface.php +++ b/src/Admin/src/Service/AdminRoleServiceInterface.php @@ -5,9 +5,9 @@ namespace Api\Admin\Service; use Api\Admin\Collection\AdminRoleCollection; -use Api\Admin\Entity\AdminRole; use Api\App\Exception\BadRequestException; use Api\App\Exception\NotFoundException; +use Core\Admin\Entity\AdminRole; interface AdminRoleServiceInterface { diff --git a/src/Admin/src/Service/AdminService.php b/src/Admin/src/Service/AdminService.php index c9c5e045..a865fcd8 100644 --- a/src/Admin/src/Service/AdminService.php +++ b/src/Admin/src/Service/AdminService.php @@ -5,13 +5,13 @@ namespace Api\Admin\Service; use Api\Admin\Collection\AdminCollection; -use Api\Admin\Entity\Admin; -use Api\Admin\Enum\AdminStatusEnum; -use Api\Admin\Repository\AdminRepository; use Api\App\Exception\BadRequestException; use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; -use Api\App\Message; +use Core\Admin\Entity\Admin; +use Core\Admin\Enum\AdminStatusEnum; +use Core\Admin\Repository\AdminRepository; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use function in_array; @@ -110,7 +110,10 @@ public function getAdmins(array $params = []): AdminCollection throw (new BadRequestException())->setMessages([sprintf(Message::INVALID_VALUE, 'order')]); } - return $this->adminRepository->getAdmins($params); + $qb = $this->adminRepository->getAdmins($params); + $qb->getQuery()->useQueryCache(true); + + return new AdminCollection($qb, false); } /** diff --git a/src/Admin/src/Service/AdminServiceInterface.php b/src/Admin/src/Service/AdminServiceInterface.php index 1f0ada40..8deeed3f 100644 --- a/src/Admin/src/Service/AdminServiceInterface.php +++ b/src/Admin/src/Service/AdminServiceInterface.php @@ -5,10 +5,10 @@ namespace Api\Admin\Service; use Api\Admin\Collection\AdminCollection; -use Api\Admin\Entity\Admin; use Api\App\Exception\BadRequestException; use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; +use Core\Admin\Entity\Admin; interface AdminServiceInterface { diff --git a/src/App/src/Attribute/BaseDeprecation.php b/src/App/src/Attribute/BaseDeprecation.php index f50eb028..64196d0d 100644 --- a/src/App/src/Attribute/BaseDeprecation.php +++ b/src/App/src/Attribute/BaseDeprecation.php @@ -5,7 +5,7 @@ namespace Api\App\Attribute; use Api\App\Exception\DeprecationSunsetException; -use Api\App\Message; +use Core\App\Message; use Laminas\Validator\Date; use function sprintf; diff --git a/src/App/src/Command/RouteListCommand.php b/src/App/src/Command/RouteListCommand.php index 2fda470b..a9eaf075 100644 --- a/src/App/src/Command/RouteListCommand.php +++ b/src/App/src/Command/RouteListCommand.php @@ -29,7 +29,7 @@ class RouteListCommand extends Command protected static $defaultName = 'route:list'; public function __construct( - protected Application $application + protected Application $application, ) { parent::__construct(self::$defaultName); } diff --git a/src/App/src/Command/TokenGenerateCommand.php b/src/App/src/Command/TokenGenerateCommand.php index 00f359de..a2640757 100644 --- a/src/App/src/Command/TokenGenerateCommand.php +++ b/src/App/src/Command/TokenGenerateCommand.php @@ -25,7 +25,7 @@ class TokenGenerateCommand extends Command private string $typeErrorReporting = 'error-reporting'; public function __construct( - protected ErrorReportServiceInterface $errorReportService + protected ErrorReportServiceInterface $errorReportService, ) { parent::__construct(self::$defaultName); } diff --git a/src/App/src/ConfigProvider.php b/src/App/src/ConfigProvider.php index 7b8fb5bf..d5a4b993 100644 --- a/src/App/src/ConfigProvider.php +++ b/src/App/src/ConfigProvider.php @@ -6,9 +6,7 @@ use Api\App\Command\RouteListCommand; use Api\App\Command\TokenGenerateCommand; -use Api\App\Entity\EntityListenerResolver; use Api\App\Factory\AuthenticationMiddlewareFactory; -use Api\App\Factory\EntityListenerResolverFactory; use Api\App\Factory\HandlerDelegatorFactory; use Api\App\Factory\RouteListCommandFactory; use Api\App\Factory\TokenGenerateCommandFactory; @@ -20,9 +18,6 @@ use Api\App\Middleware\ErrorResponseMiddleware; use Api\App\Service\ErrorReportService; use Api\App\Service\ErrorReportServiceInterface; -use Doctrine\ORM\EntityManager; -use Doctrine\ORM\EntityManagerInterface; -use Doctrine\ORM\Mapping\Driver\AttributeDriver; use Dot\DependencyInjection\Factory\AttributedServiceFactory; use Dot\Mail\Factory\MailOptionsAbstractFactory; use Dot\Mail\Factory\MailServiceAbstractFactory; @@ -39,7 +34,6 @@ use Mezzio\Twig\TwigExtensionFactory; use Mezzio\Twig\TwigRenderer; use Mezzio\Twig\TwigRendererFactory; -use Roave\PsrContainerDoctrine\EntityManagerFactory; use Twig\Environment; class ConfigProvider @@ -48,7 +42,6 @@ public function __invoke(): array { return [ 'dependencies' => $this->getDependencies(), - 'doctrine' => $this->getDoctrineConfig(), MetadataMap::class => $this->getHalConfig(), ]; } @@ -61,27 +54,23 @@ public function getDependencies(): array ErrorReportHandler::class => [HandlerDelegatorFactory::class], ], 'factories' => [ - 'doctrine.entity_manager.orm_default' => EntityManagerFactory::class, - 'dot-mail.options.default' => MailOptionsAbstractFactory::class, - 'dot-mail.service.default' => MailServiceAbstractFactory::class, - AuthenticationMiddleware::class => AuthenticationMiddlewareFactory::class, - AuthorizationMiddleware::class => AttributedServiceFactory::class, - ContentNegotiationMiddleware::class => AttributedServiceFactory::class, - DeprecationMiddleware::class => AttributedServiceFactory::class, - EntityListenerResolver::class => EntityListenerResolverFactory::class, - Environment::class => TwigEnvironmentFactory::class, - ErrorReportHandler::class => AttributedServiceFactory::class, - ErrorReportService::class => AttributedServiceFactory::class, - ErrorResponseMiddleware::class => AttributedServiceFactory::class, - RouteListCommand::class => RouteListCommandFactory::class, - TokenGenerateCommand::class => TokenGenerateCommandFactory::class, - TwigExtension::class => TwigExtensionFactory::class, - TwigRenderer::class => TwigRendererFactory::class, + 'dot-mail.options.default' => MailOptionsAbstractFactory::class, + 'dot-mail.service.default' => MailServiceAbstractFactory::class, + AuthenticationMiddleware::class => AuthenticationMiddlewareFactory::class, + AuthorizationMiddleware::class => AttributedServiceFactory::class, + ContentNegotiationMiddleware::class => AttributedServiceFactory::class, + DeprecationMiddleware::class => AttributedServiceFactory::class, + Environment::class => TwigEnvironmentFactory::class, + ErrorReportHandler::class => AttributedServiceFactory::class, + ErrorReportService::class => AttributedServiceFactory::class, + ErrorResponseMiddleware::class => AttributedServiceFactory::class, + RouteListCommand::class => RouteListCommandFactory::class, + TokenGenerateCommand::class => TokenGenerateCommandFactory::class, + TwigExtension::class => TwigExtensionFactory::class, + TwigRenderer::class => TwigRendererFactory::class, ], 'aliases' => [ Authentication\AuthenticationInterface::class => Authentication\OAuth2\OAuth2Adapter::class, - EntityManager::class => 'doctrine.entity_manager.orm_default', - EntityManagerInterface::class => 'doctrine.entity_manager.orm_default', ErrorReportServiceInterface::class => ErrorReportService::class, MailService::class => 'dot-mail.service.default', TemplateRendererInterface::class => TwigRenderer::class, @@ -89,24 +78,6 @@ public function getDependencies(): array ]; } - private function getDoctrineConfig(): array - { - return [ - 'driver' => [ - 'orm_default' => [ - 'drivers' => [ - 'Api\App\Entity' => 'AppEntities', - ], - ], - 'AppEntities' => [ - 'class' => AttributeDriver::class, - 'cache' => 'array', - 'paths' => __DIR__ . '/Entity', - ], - ], - ]; - } - public function getHalConfig(): array { return []; diff --git a/src/App/src/Factory/EntityListenerResolverFactory.php b/src/App/src/Factory/EntityListenerResolverFactory.php index d28b36c1..f2c8ea5b 100644 --- a/src/App/src/Factory/EntityListenerResolverFactory.php +++ b/src/App/src/Factory/EntityListenerResolverFactory.php @@ -4,7 +4,7 @@ namespace Api\App\Factory; -use Api\App\Entity\EntityListenerResolver; +use Core\App\Entity\EntityListenerResolver; use Psr\Container\ContainerInterface; class EntityListenerResolverFactory diff --git a/src/App/src/Factory/HandlerDelegatorFactory.php b/src/App/src/Factory/HandlerDelegatorFactory.php index 76408423..13bbd0ac 100644 --- a/src/App/src/Factory/HandlerDelegatorFactory.php +++ b/src/App/src/Factory/HandlerDelegatorFactory.php @@ -6,7 +6,7 @@ use Api\App\Exception\RuntimeException; use Api\App\Handler\AbstractHandler; -use Api\App\Message; +use Core\App\Message; use Mezzio\Hal\HalResponseFactory; use Mezzio\Hal\ResourceGenerator; use Psr\Container\ContainerExceptionInterface; diff --git a/src/App/src/Factory/OAuthAccessTokenRepositoryFactory.php b/src/App/src/Factory/OAuthAccessTokenRepositoryFactory.php index 0f186d35..aabf58a0 100644 --- a/src/App/src/Factory/OAuthAccessTokenRepositoryFactory.php +++ b/src/App/src/Factory/OAuthAccessTokenRepositoryFactory.php @@ -4,7 +4,7 @@ namespace Api\App\Factory; -use Api\App\Entity\OAuthAccessToken; +use Core\App\Entity\OAuthAccessToken; use Doctrine\ORM\EntityManagerInterface; use Doctrine\Persistence\ObjectRepository; use Psr\Container\ContainerExceptionInterface; diff --git a/src/App/src/Factory/OAuthAuthCodeRepositoryFactory.php b/src/App/src/Factory/OAuthAuthCodeRepositoryFactory.php index f42e0547..20d71e99 100644 --- a/src/App/src/Factory/OAuthAuthCodeRepositoryFactory.php +++ b/src/App/src/Factory/OAuthAuthCodeRepositoryFactory.php @@ -4,7 +4,7 @@ namespace Api\App\Factory; -use Api\App\Entity\OAuthAuthCode; +use Core\App\Entity\OAuthAuthCode; use Doctrine\ORM\EntityManagerInterface; use Doctrine\Persistence\ObjectRepository; use Psr\Container\ContainerExceptionInterface; diff --git a/src/App/src/Factory/OAuthClientRepositoryFactory.php b/src/App/src/Factory/OAuthClientRepositoryFactory.php index 6e92917a..7d62571f 100644 --- a/src/App/src/Factory/OAuthClientRepositoryFactory.php +++ b/src/App/src/Factory/OAuthClientRepositoryFactory.php @@ -4,7 +4,7 @@ namespace Api\App\Factory; -use Api\App\Entity\OAuthClient; +use Core\App\Entity\OAuthClient; use Doctrine\ORM\EntityManagerInterface; use Doctrine\Persistence\ObjectRepository; use Psr\Container\ContainerExceptionInterface; diff --git a/src/App/src/Factory/OAuthRefreshTokenRepositoryFactory.php b/src/App/src/Factory/OAuthRefreshTokenRepositoryFactory.php index 9d4c2cf0..f421f156 100644 --- a/src/App/src/Factory/OAuthRefreshTokenRepositoryFactory.php +++ b/src/App/src/Factory/OAuthRefreshTokenRepositoryFactory.php @@ -4,7 +4,7 @@ namespace Api\App\Factory; -use Api\App\Entity\OAuthRefreshToken; +use Core\App\Entity\OAuthRefreshToken; use Doctrine\ORM\EntityManagerInterface; use Doctrine\Persistence\ObjectRepository; use Psr\Container\ContainerExceptionInterface; diff --git a/src/App/src/Factory/OAuthScopeRepositoryFactory.php b/src/App/src/Factory/OAuthScopeRepositoryFactory.php index 04e377d4..61138015 100644 --- a/src/App/src/Factory/OAuthScopeRepositoryFactory.php +++ b/src/App/src/Factory/OAuthScopeRepositoryFactory.php @@ -4,7 +4,7 @@ namespace Api\App\Factory; -use Api\App\Entity\OAuthScope; +use Core\App\Entity\OAuthScope; use Doctrine\ORM\EntityManagerInterface; use Doctrine\Persistence\ObjectRepository; use Psr\Container\ContainerExceptionInterface; diff --git a/src/App/src/Factory/UserIdentityFactory.php b/src/App/src/Factory/UserIdentityFactory.php index 37021bc0..c255d67f 100644 --- a/src/App/src/Factory/UserIdentityFactory.php +++ b/src/App/src/Factory/UserIdentityFactory.php @@ -4,7 +4,7 @@ namespace Api\App\Factory; -use Api\App\UserIdentity; +use Core\User\UserIdentity; use Mezzio\Authentication\UserInterface; use Psr\Container\ContainerInterface; diff --git a/src/App/src/Factory/UserRepositoryFactory.php b/src/App/src/Factory/UserRepositoryFactory.php index c3609436..0180c041 100644 --- a/src/App/src/Factory/UserRepositoryFactory.php +++ b/src/App/src/Factory/UserRepositoryFactory.php @@ -4,7 +4,7 @@ namespace Api\App\Factory; -use Api\User\Entity\User; +use Core\User\Entity\User; use Doctrine\ORM\EntityManagerInterface; use Doctrine\Persistence\ObjectRepository; use Psr\Container\ContainerExceptionInterface; diff --git a/src/App/src/Handler/AbstractHandler.php b/src/App/src/Handler/AbstractHandler.php index 3c3ba5b6..8cf3525d 100644 --- a/src/App/src/Handler/AbstractHandler.php +++ b/src/App/src/Handler/AbstractHandler.php @@ -5,7 +5,6 @@ namespace Api\App\Handler; use Api\App\Collection\CollectionInterface; -use Api\App\Entity\EntityInterface; use Api\App\Exception\BadRequestException; use Api\App\Exception\ConflictException; use Api\App\Exception\ExpiredException; @@ -14,7 +13,8 @@ use Api\App\Exception\NotFoundException; use Api\App\Exception\RuntimeException; use Api\App\Exception\UnauthorizedException; -use Api\App\Message; +use Core\App\Entity\EntityInterface; +use Core\App\Message; use Dot\Mail\Exception\MailException; use Exception; use Fig\Http\Message\StatusCodeInterface; diff --git a/src/App/src/Handler/ErrorReportHandler.php b/src/App/src/Handler/ErrorReportHandler.php index b65ff41f..6939f54c 100644 --- a/src/App/src/Handler/ErrorReportHandler.php +++ b/src/App/src/Handler/ErrorReportHandler.php @@ -7,8 +7,8 @@ use Api\App\Attribute\MethodDeprecation; use Api\App\Exception\ForbiddenException; use Api\App\Exception\UnauthorizedException; -use Api\App\Message; use Api\App\Service\ErrorReportServiceInterface; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use Fig\Http\Message\StatusCodeInterface; use Psr\Http\Message\ResponseInterface; diff --git a/src/App/src/Helper/PaginationHelper.php b/src/App/src/Helper/PaginationHelper.php deleted file mode 100644 index cceb75d9..00000000 --- a/src/App/src/Helper/PaginationHelper.php +++ /dev/null @@ -1,26 +0,0 @@ - 0) { - $offset = ($page - 1) * $limit; - } - - return [ - 'offset' => (int) $offset, - 'limit' => $limit, - ]; - } -} diff --git a/src/App/src/Middleware/AuthenticationMiddleware.php b/src/App/src/Middleware/AuthenticationMiddleware.php index 25ac3c81..cb6f72e2 100644 --- a/src/App/src/Middleware/AuthenticationMiddleware.php +++ b/src/App/src/Middleware/AuthenticationMiddleware.php @@ -4,8 +4,8 @@ namespace Api\App\Middleware; -use Api\App\UserIdentity; -use Api\User\Entity\UserRole; +use Core\User\Entity\UserRole; +use Core\User\UserIdentity; use Mezzio\Authentication\UserInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; diff --git a/src/App/src/Middleware/AuthorizationMiddleware.php b/src/App/src/Middleware/AuthorizationMiddleware.php index 566a3bf3..36b1ad62 100644 --- a/src/App/src/Middleware/AuthorizationMiddleware.php +++ b/src/App/src/Middleware/AuthorizationMiddleware.php @@ -4,14 +4,14 @@ namespace Api\App\Middleware; -use Api\Admin\Entity\Admin; -use Api\Admin\Repository\AdminRepository; -use Api\App\Entity\Guest; -use Api\App\Entity\RoleInterface; -use Api\App\Message; -use Api\App\UserIdentity; -use Api\User\Entity\User; -use Api\User\Repository\UserRepository; +use Core\Admin\Entity\Admin; +use Core\Admin\Repository\AdminRepository; +use Core\App\Entity\Guest; +use Core\App\Entity\RoleInterface; +use Core\App\Message; +use Core\User\Entity\User; +use Core\User\Repository\UserRepository; +use Core\User\UserIdentity; use Dot\DependencyInjection\Attribute\Inject; use Fig\Http\Message\StatusCodeInterface; use Laminas\Diactoros\Response\JsonResponse; diff --git a/src/App/src/Middleware/DeprecationMiddleware.php b/src/App/src/Middleware/DeprecationMiddleware.php index 4dd8923b..4ea7741e 100644 --- a/src/App/src/Middleware/DeprecationMiddleware.php +++ b/src/App/src/Middleware/DeprecationMiddleware.php @@ -7,7 +7,7 @@ use Api\App\Attribute\MethodDeprecation; use Api\App\Attribute\ResourceDeprecation; use Api\App\Exception\DeprecationConflictException; -use Api\App\Message; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use Laminas\Stratigility\MiddlewarePipe; use Mezzio\Middleware\LazyLoadingMiddleware; diff --git a/src/App/src/OpenAPI.php b/src/App/src/OpenAPI.php index 07634f94..65869a46 100644 --- a/src/App/src/OpenAPI.php +++ b/src/App/src/OpenAPI.php @@ -13,7 +13,7 @@ #[OA\Info(version: '1.0', title: 'DotKernel API')] #[OA\Server(url: 'http://api.dotkernel.localhost', description: 'Local development server')] #[OA\SecurityScheme(securityScheme: 'AuthToken', type: 'http', in: 'header', bearerFormat: 'JWT', scheme: 'bearer')] -#[OA\SecurityScheme(securityScheme: 'ErrorReportingToken', type: 'apiKey', in: 'header', name: 'Error-Reporting-Token')] +#[OA\SecurityScheme(securityScheme: 'ErrorReportingToken', type: 'apiKey', name: 'Error-Reporting-Token', in: 'header')] #[OA\ExternalDocumentation( description: 'Dotkernel API documentation', diff --git a/src/App/src/Service/ErrorReportService.php b/src/App/src/Service/ErrorReportService.php index af50afed..ffc9a975 100644 --- a/src/App/src/Service/ErrorReportService.php +++ b/src/App/src/Service/ErrorReportService.php @@ -6,7 +6,7 @@ use Api\App\Exception\ForbiddenException; use Api\App\Exception\UnauthorizedException; -use Api\App\Message; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use Psr\Http\Message\ServerRequestInterface; use RuntimeException; @@ -35,7 +35,7 @@ class ErrorReportService implements ErrorReportServiceInterface "config", )] public function __construct( - protected array $config + protected array $config, ) { $this->fileSystem = new Filesystem(); $this->config = $config[ErrorReportServiceInterface::class] ?? []; diff --git a/src/Core/src/Admin/src/ConfigProvider.php b/src/Core/src/Admin/src/ConfigProvider.php new file mode 100644 index 00000000..40bf6fbb --- /dev/null +++ b/src/Core/src/Admin/src/ConfigProvider.php @@ -0,0 +1,41 @@ + $this->getDoctrineConfig(), + ]; + } + + private function getDoctrineConfig(): array + { + return [ + 'driver' => [ + 'orm_default' => [ + 'drivers' => [ + 'Core\Admin\Entity' => 'AdminEntities', + ], + ], + 'AdminEntities' => [ + 'class' => AttributeDriver::class, + 'cache' => 'array', + 'paths' => getcwd() . '/src/Core/src/Admin/src/Entity', + ], + ], + 'types' => [ + AdminStatusEnumType::NAME => AdminStatusEnumType::class, + ], + ]; + } +} diff --git a/src/Admin/src/DBAL/Types/AdminStatusEnumType.php b/src/Core/src/Admin/src/DBAL/Types/AdminStatusEnumType.php similarity index 73% rename from src/Admin/src/DBAL/Types/AdminStatusEnumType.php rename to src/Core/src/Admin/src/DBAL/Types/AdminStatusEnumType.php index ce6a1ea2..53dd5e82 100644 --- a/src/Admin/src/DBAL/Types/AdminStatusEnumType.php +++ b/src/Core/src/Admin/src/DBAL/Types/AdminStatusEnumType.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Api\Admin\DBAL\Types; +namespace Core\Admin\DBAL\Types; -use Api\Admin\Enum\AdminStatusEnum; -use Api\App\DBAL\Types\AbstractEnumType; +use Core\Admin\Enum\AdminStatusEnum; +use Core\App\DBAL\Types\AbstractEnumType; class AdminStatusEnumType extends AbstractEnumType { diff --git a/src/Admin/src/Entity/Admin.php b/src/Core/src/Admin/src/Entity/Admin.php similarity index 94% rename from src/Admin/src/Entity/Admin.php rename to src/Core/src/Admin/src/Entity/Admin.php index 7f0a3295..683af14e 100644 --- a/src/Admin/src/Entity/Admin.php +++ b/src/Core/src/Admin/src/Entity/Admin.php @@ -2,14 +2,14 @@ declare(strict_types=1); -namespace Api\Admin\Entity; - -use Api\Admin\Enum\AdminStatusEnum; -use Api\Admin\Repository\AdminRepository; -use Api\App\Entity\AbstractEntity; -use Api\App\Entity\PasswordTrait; -use Api\App\Entity\RoleInterface; -use Api\App\Entity\TimestampsTrait; +namespace Core\Admin\Entity; + +use Core\Admin\Enum\AdminStatusEnum; +use Core\Admin\Repository\AdminRepository; +use Core\App\Entity\AbstractEntity; +use Core\App\Entity\PasswordTrait; +use Core\App\Entity\RoleInterface; +use Core\App\Entity\TimestampsTrait; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; diff --git a/src/Admin/src/Entity/AdminRole.php b/src/Core/src/Admin/src/Entity/AdminRole.php similarity index 85% rename from src/Admin/src/Entity/AdminRole.php rename to src/Core/src/Admin/src/Entity/AdminRole.php index 76497cb6..79d384e1 100644 --- a/src/Admin/src/Entity/AdminRole.php +++ b/src/Core/src/Admin/src/Entity/AdminRole.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\Admin\Entity; +namespace Core\Admin\Entity; -use Api\Admin\Repository\AdminRoleRepository; -use Api\App\Entity\AbstractEntity; -use Api\App\Entity\RoleInterface; -use Api\App\Entity\TimestampsTrait; +use Core\Admin\Repository\AdminRoleRepository; +use Core\App\Entity\AbstractEntity; +use Core\App\Entity\RoleInterface; +use Core\App\Entity\TimestampsTrait; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: AdminRoleRepository::class)] diff --git a/src/Admin/src/Enum/AdminStatusEnum.php b/src/Core/src/Admin/src/Enum/AdminStatusEnum.php similarity index 82% rename from src/Admin/src/Enum/AdminStatusEnum.php rename to src/Core/src/Admin/src/Enum/AdminStatusEnum.php index c506544d..be43b203 100644 --- a/src/Admin/src/Enum/AdminStatusEnum.php +++ b/src/Core/src/Admin/src/Enum/AdminStatusEnum.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\Admin\Enum; +namespace Core\Admin\Enum; enum AdminStatusEnum: string { diff --git a/src/Admin/src/Repository/AdminRepository.php b/src/Core/src/Admin/src/Repository/AdminRepository.php similarity index 70% rename from src/Admin/src/Repository/AdminRepository.php rename to src/Core/src/Admin/src/Repository/AdminRepository.php index 5526f24e..ed9c55ef 100644 --- a/src/Admin/src/Repository/AdminRepository.php +++ b/src/Core/src/Admin/src/Repository/AdminRepository.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\Admin\Repository; +namespace Core\Admin\Repository; -use Api\Admin\Collection\AdminCollection; -use Api\Admin\Entity\Admin; -use Api\App\Helper\PaginationHelper; +use Core\Admin\Entity\Admin; +use Core\App\Helper\PaginationHelper; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\QueryBuilder; use Dot\DependencyInjection\Attribute\Entity; /** @@ -30,21 +30,17 @@ public function saveAdmin(Admin $admin): Admin return $admin; } - public function getAdmins(array $filters = []): AdminCollection + public function getAdmins(array $filters = []): QueryBuilder { $page = PaginationHelper::getOffsetAndLimit($filters); - $query = $this + return $this ->getEntityManager() ->createQueryBuilder() ->select(['admin']) ->from(Admin::class, 'admin') ->orderBy($filters['order'] ?? 'admin.created', $filters['dir'] ?? 'desc') ->setFirstResult($page['offset']) - ->setMaxResults($page['limit']) - ->getQuery() - ->useQueryCache(true); - - return new AdminCollection($query, false); + ->setMaxResults($page['limit']); } } diff --git a/src/Admin/src/Repository/AdminRoleRepository.php b/src/Core/src/Admin/src/Repository/AdminRoleRepository.php similarity index 59% rename from src/Admin/src/Repository/AdminRoleRepository.php rename to src/Core/src/Admin/src/Repository/AdminRoleRepository.php index b9f7a1dd..6b10a2b9 100644 --- a/src/Admin/src/Repository/AdminRoleRepository.php +++ b/src/Core/src/Admin/src/Repository/AdminRoleRepository.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\Admin\Repository; +namespace Core\Admin\Repository; -use Api\Admin\Collection\AdminRoleCollection; -use Api\Admin\Entity\AdminRole; -use Api\App\Helper\PaginationHelper; +use Core\Admin\Entity\AdminRole; +use Core\App\Helper\PaginationHelper; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\QueryBuilder; use Dot\DependencyInjection\Attribute\Entity; /** @@ -16,21 +16,17 @@ #[Entity(name: AdminRole::class)] class AdminRoleRepository extends EntityRepository { - public function getAdminRoles(array $filters = []): AdminRoleCollection + public function getAdminRoles(array $filters = []): QueryBuilder { $page = PaginationHelper::getOffsetAndLimit($filters); - $query = $this + return $this ->getEntityManager() ->createQueryBuilder() ->select(['role']) ->from(AdminRole::class, 'role') ->orderBy($filters['order'] ?? 'role.created', $filters['dir'] ?? 'desc') ->setFirstResult($page['offset']) - ->setMaxResults($page['limit']) - ->getQuery() - ->useQueryCache(true); - - return new AdminRoleCollection($query, false); + ->setMaxResults($page['limit']); } } diff --git a/src/Core/src/App/src/ConfigProvider.php b/src/Core/src/App/src/ConfigProvider.php new file mode 100644 index 00000000..dfeffe5c --- /dev/null +++ b/src/Core/src/App/src/ConfigProvider.php @@ -0,0 +1,120 @@ + $this->getDependencies(), + 'doctrine' => $this->getDoctrineConfig(), + 'resultCacheLifetime' => 600, + ]; + } + + public function getDependencies(): array + { + return [ + 'factories' => [ + 'doctrine.entity_manager.orm_default' => EntityManagerFactory::class, + EntityListenerResolver::class => EntityListenerResolverFactory::class, + ], + 'aliases' => [ + EntityManager::class => 'doctrine.entity_manager.orm_default', + EntityManagerInterface::class => 'doctrine.entity_manager.orm_default', + ], + ]; + } + + private function getDoctrineConfig(): array + { + return [ + 'cache' => [ + 'array' => [ + 'class' => ArrayAdapter::class, + ], + 'filesystem' => [ + 'class' => FilesystemAdapter::class, + 'directory' => getcwd() . '/data/cache', + 'namespace' => 'doctrine', + ], + ], + 'configuration' => [ + 'orm_default' => [ + 'entity_listener_resolver' => EntityListenerResolver::class, + 'result_cache' => 'filesystem', + 'metadata_cache' => 'filesystem', + 'query_cache' => 'filesystem', + 'hydration_cache' => 'array', + 'typed_field_mapper' => null, + 'second_level_cache' => [ + 'enabled' => true, + 'default_lifetime' => 3600, + 'default_lock_lifetime' => 60, + 'file_lock_region_directory' => '', + 'regions' => [], + ], + ], + ], + 'connection' => [ + 'orm_default' => [ + 'doctrine_mapping_types' => [ + UuidBinaryType::NAME => 'binary', + UuidBinaryOrderedTimeType::NAME => 'binary', + ], + ], + ], + 'driver' => [ + 'orm_default' => [ + 'class' => MappingDriverChain::class, + 'drivers' => [ + 'Core\App\Entity' => 'AppEntities', + ], + ], + 'AppEntities' => [ + 'class' => AttributeDriver::class, + 'cache' => 'array', + 'paths' => getcwd() . '/src/Core/src/App/src/Entity', + ], + ], + 'fixtures' => getcwd() . '/src/Core/src/App/src/Fixture', + 'migrations' => [ + 'table_storage' => [ + 'table_name' => 'doctrine_migration_versions', + 'version_column_name' => 'version', + 'version_column_length' => 191, + 'executed_at_column_name' => 'executed_at', + 'execution_time_column_name' => 'execution_time', + ], + 'migrations_paths' => [ + 'Core\App\Migration' => 'src/Core/src/App/src/Migration', + ], + 'all_or_nothing' => true, + 'check_database_platform' => true, + ], + 'types' => [ + UuidType::NAME => UuidType::class, + UuidBinaryType::NAME => UuidBinaryType::class, + UuidBinaryOrderedTimeType::NAME => UuidBinaryOrderedTimeType::class, + ], + ]; + } +} diff --git a/src/App/src/DBAL/Types/AbstractEnumType.php b/src/Core/src/App/src/DBAL/Types/AbstractEnumType.php similarity index 98% rename from src/App/src/DBAL/Types/AbstractEnumType.php rename to src/Core/src/App/src/DBAL/Types/AbstractEnumType.php index dffc9291..51265025 100644 --- a/src/App/src/DBAL/Types/AbstractEnumType.php +++ b/src/Core/src/App/src/DBAL/Types/AbstractEnumType.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App\DBAL\Types; +namespace Core\App\DBAL\Types; use BackedEnum; use Doctrine\DBAL\Platforms\AbstractPlatform; diff --git a/src/App/src/Entity/AbstractEntity.php b/src/Core/src/App/src/Entity/AbstractEntity.php similarity index 97% rename from src/App/src/Entity/AbstractEntity.php rename to src/Core/src/App/src/Entity/AbstractEntity.php index d70a01de..e685df8e 100644 --- a/src/App/src/Entity/AbstractEntity.php +++ b/src/Core/src/App/src/Entity/AbstractEntity.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; use Doctrine\ORM\Mapping as ORM; use Laminas\Stdlib\ArraySerializableInterface; diff --git a/src/App/src/Entity/EntityInterface.php b/src/Core/src/App/src/Entity/EntityInterface.php similarity index 70% rename from src/App/src/Entity/EntityInterface.php rename to src/Core/src/App/src/Entity/EntityInterface.php index c519b99d..418e0fd8 100644 --- a/src/App/src/Entity/EntityInterface.php +++ b/src/Core/src/App/src/Entity/EntityInterface.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; interface EntityInterface { diff --git a/src/App/src/Entity/EntityListenerResolver.php b/src/Core/src/App/src/Entity/EntityListenerResolver.php similarity index 88% rename from src/App/src/Entity/EntityListenerResolver.php rename to src/Core/src/App/src/Entity/EntityListenerResolver.php index 329b7015..093fd567 100644 --- a/src/App/src/Entity/EntityListenerResolver.php +++ b/src/Core/src/App/src/Entity/EntityListenerResolver.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; use Doctrine\ORM\Mapping\DefaultEntityListenerResolver; use Psr\Container\ContainerExceptionInterface; @@ -12,7 +12,7 @@ class EntityListenerResolver extends DefaultEntityListenerResolver { public function __construct( - protected ContainerInterface $container + protected ContainerInterface $container, ) { } diff --git a/src/App/src/Entity/Guest.php b/src/Core/src/App/src/Entity/Guest.php similarity index 93% rename from src/App/src/Entity/Guest.php rename to src/Core/src/App/src/Entity/Guest.php index 73878267..ff983101 100644 --- a/src/App/src/Entity/Guest.php +++ b/src/Core/src/App/src/Entity/Guest.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; -use Api\User\Entity\UserRole; +use Core\User\Entity\UserRole; use Doctrine\Common\Collections\ArrayCollection; class Guest diff --git a/src/App/src/Entity/OAuthAccessToken.php b/src/Core/src/App/src/Entity/OAuthAccessToken.php similarity index 98% rename from src/App/src/Entity/OAuthAccessToken.php rename to src/Core/src/App/src/Entity/OAuthAccessToken.php index 1d8e3bd4..73863569 100644 --- a/src/App/src/Entity/OAuthAccessToken.php +++ b/src/Core/src/App/src/Entity/OAuthAccessToken.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; -use Api\App\Repository\OAuthAccessTokenRepository; +use Core\App\Repository\OAuthAccessTokenRepository; use DateTimeImmutable; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; diff --git a/src/App/src/Entity/OAuthAuthCode.php b/src/Core/src/App/src/Entity/OAuthAuthCode.php similarity index 98% rename from src/App/src/Entity/OAuthAuthCode.php rename to src/Core/src/App/src/Entity/OAuthAuthCode.php index c01109b2..32399f3f 100644 --- a/src/App/src/Entity/OAuthAuthCode.php +++ b/src/Core/src/App/src/Entity/OAuthAuthCode.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; -use Api\App\Repository\OAuthAuthCodeRepository; +use Core\App\Repository\OAuthAuthCodeRepository; use DateTimeImmutable; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; diff --git a/src/App/src/Entity/OAuthClient.php b/src/Core/src/App/src/Entity/OAuthClient.php similarity index 96% rename from src/App/src/Entity/OAuthClient.php rename to src/Core/src/App/src/Entity/OAuthClient.php index 0ef5ab0b..d1ca9c0c 100644 --- a/src/App/src/Entity/OAuthClient.php +++ b/src/Core/src/App/src/Entity/OAuthClient.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; -use Api\App\Repository\OAuthClientRepository; -use Api\User\Entity\User; +use Core\App\Repository\OAuthClientRepository; +use Core\User\Entity\User; use Doctrine\ORM\Mapping as ORM; use League\OAuth2\Server\Entities\ClientEntityInterface; diff --git a/src/App/src/Entity/OAuthRefreshToken.php b/src/Core/src/App/src/Entity/OAuthRefreshToken.php similarity index 96% rename from src/App/src/Entity/OAuthRefreshToken.php rename to src/Core/src/App/src/Entity/OAuthRefreshToken.php index 554fe1c4..db987a55 100644 --- a/src/App/src/Entity/OAuthRefreshToken.php +++ b/src/Core/src/App/src/Entity/OAuthRefreshToken.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; -use Api\App\Repository\OAuthRefreshTokenRepository; +use Core\App\Repository\OAuthRefreshTokenRepository; use DateTimeImmutable; use Doctrine\ORM\Mapping as ORM; use League\OAuth2\Server\Entities\AccessTokenEntityInterface; diff --git a/src/App/src/Entity/OAuthScope.php b/src/Core/src/App/src/Entity/OAuthScope.php similarity index 97% rename from src/App/src/Entity/OAuthScope.php rename to src/Core/src/App/src/Entity/OAuthScope.php index 47b88b55..5a2fbf17 100644 --- a/src/App/src/Entity/OAuthScope.php +++ b/src/Core/src/App/src/Entity/OAuthScope.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; -use Api\App\Repository\OAuthScopeRepository; +use Core\App\Repository\OAuthScopeRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\Common\Collections\Criteria; diff --git a/src/App/src/Entity/PasswordTrait.php b/src/Core/src/App/src/Entity/PasswordTrait.php similarity index 95% rename from src/App/src/Entity/PasswordTrait.php rename to src/Core/src/App/src/Entity/PasswordTrait.php index 5287e0be..a25529f9 100644 --- a/src/App/src/Entity/PasswordTrait.php +++ b/src/Core/src/App/src/Entity/PasswordTrait.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; use function password_hash; use function password_verify; diff --git a/src/App/src/Entity/RoleInterface.php b/src/Core/src/App/src/Entity/RoleInterface.php similarity index 89% rename from src/App/src/Entity/RoleInterface.php rename to src/Core/src/App/src/Entity/RoleInterface.php index 05947593..6f744fa4 100644 --- a/src/App/src/Entity/RoleInterface.php +++ b/src/Core/src/App/src/Entity/RoleInterface.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; use Ramsey\Uuid\UuidInterface; diff --git a/src/App/src/Entity/TimestampsTrait.php b/src/Core/src/App/src/Entity/TimestampsTrait.php similarity index 97% rename from src/App/src/Entity/TimestampsTrait.php rename to src/Core/src/App/src/Entity/TimestampsTrait.php index d54be998..ca2ff2af 100644 --- a/src/App/src/Entity/TimestampsTrait.php +++ b/src/Core/src/App/src/Entity/TimestampsTrait.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App\Entity; +namespace Core\App\Entity; use DateTimeImmutable; use Doctrine\ORM\Mapping as ORM; diff --git a/data/doctrine/fixtures/AdminLoader.php b/src/Core/src/App/src/Fixture/AdminLoader.php similarity index 90% rename from data/doctrine/fixtures/AdminLoader.php rename to src/Core/src/App/src/Fixture/AdminLoader.php index bab9007e..48c060b1 100644 --- a/data/doctrine/fixtures/AdminLoader.php +++ b/src/Core/src/App/src/Fixture/AdminLoader.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Api\Fixtures; +namespace Core\App\Fixture; -use Api\Admin\Entity\Admin; -use Api\Admin\Entity\AdminRole; -use Api\Admin\Enum\AdminStatusEnum; +use Core\Admin\Entity\Admin; +use Core\Admin\Entity\AdminRole; +use Core\Admin\Enum\AdminStatusEnum; use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Persistence\ObjectManager; diff --git a/data/doctrine/fixtures/AdminRoleLoader.php b/src/Core/src/App/src/Fixture/AdminRoleLoader.php similarity index 89% rename from data/doctrine/fixtures/AdminRoleLoader.php rename to src/Core/src/App/src/Fixture/AdminRoleLoader.php index 1b4aaf69..6626f608 100644 --- a/data/doctrine/fixtures/AdminRoleLoader.php +++ b/src/Core/src/App/src/Fixture/AdminRoleLoader.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\Fixtures; +namespace Core\App\Fixture; -use Api\Admin\Entity\AdminRole; +use Core\Admin\Entity\AdminRole; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Persistence\ObjectManager; diff --git a/data/doctrine/fixtures/OAuthClientLoader.php b/src/Core/src/App/src/Fixture/OAuthClientLoader.php similarity index 88% rename from data/doctrine/fixtures/OAuthClientLoader.php rename to src/Core/src/App/src/Fixture/OAuthClientLoader.php index 66e8519c..642792f3 100644 --- a/data/doctrine/fixtures/OAuthClientLoader.php +++ b/src/Core/src/App/src/Fixture/OAuthClientLoader.php @@ -2,13 +2,17 @@ declare(strict_types=1); -namespace Api\Fixtures; +namespace Core\App\Fixture; -use Api\App\Entity\OAuthClient; +use Core\App\Entity\OAuthClient; use Doctrine\Common\DataFixtures\AbstractFixture; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Persistence\ObjectManager; +use function password_hash; + +use const PASSWORD_DEFAULT; + class OAuthClientLoader extends AbstractFixture implements FixtureInterface { public function load(ObjectManager $manager): void diff --git a/data/doctrine/fixtures/OAuthScopeLoader.php b/src/Core/src/App/src/Fixture/OAuthScopeLoader.php similarity index 85% rename from data/doctrine/fixtures/OAuthScopeLoader.php rename to src/Core/src/App/src/Fixture/OAuthScopeLoader.php index 7d0be9c2..e9bddda1 100644 --- a/data/doctrine/fixtures/OAuthScopeLoader.php +++ b/src/Core/src/App/src/Fixture/OAuthScopeLoader.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\Fixtures; +namespace Core\App\Fixture; -use Api\App\Entity\OAuthScope; +use Core\App\Entity\OAuthScope; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Persistence\ObjectManager; diff --git a/data/doctrine/fixtures/UserLoader.php b/src/Core/src/App/src/Fixture/UserLoader.php similarity index 90% rename from data/doctrine/fixtures/UserLoader.php rename to src/Core/src/App/src/Fixture/UserLoader.php index af373ea8..76d918d1 100644 --- a/data/doctrine/fixtures/UserLoader.php +++ b/src/Core/src/App/src/Fixture/UserLoader.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\Fixtures; +namespace Core\App\Fixture; -use Api\User\Entity\User; -use Api\User\Entity\UserDetail; -use Api\User\Entity\UserRole; -use Api\User\Enum\UserStatusEnum; +use Core\User\Entity\User; +use Core\User\Entity\UserDetail; +use Core\User\Entity\UserRole; +use Core\User\Enum\UserStatusEnum; use Doctrine\Common\DataFixtures\DependentFixtureInterface; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Persistence\ObjectManager; diff --git a/data/doctrine/fixtures/UserRoleLoader.php b/src/Core/src/App/src/Fixture/UserRoleLoader.php similarity index 88% rename from data/doctrine/fixtures/UserRoleLoader.php rename to src/Core/src/App/src/Fixture/UserRoleLoader.php index 3bda5551..18143881 100644 --- a/data/doctrine/fixtures/UserRoleLoader.php +++ b/src/Core/src/App/src/Fixture/UserRoleLoader.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\Fixtures; +namespace Core\App\Fixture; -use Api\User\Entity\UserRole; +use Core\User\Entity\UserRole; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Persistence\ObjectManager; diff --git a/src/Core/src/App/src/Helper/PaginationHelper.php b/src/Core/src/App/src/Helper/PaginationHelper.php new file mode 100644 index 00000000..b3219353 --- /dev/null +++ b/src/Core/src/App/src/Helper/PaginationHelper.php @@ -0,0 +1,33 @@ + 0) { + $offset = ($page - 1) * self::LIMIT; + $limit = self::LIMIT; + } else { + $offset = 0; + $limit = self::LIMIT; + } + + return [ + 'offset' => $offset, + 'limit' => $limit, + ]; + } +} diff --git a/src/App/src/Message.php b/src/Core/src/App/src/Message.php similarity index 99% rename from src/App/src/Message.php rename to src/Core/src/App/src/Message.php index 5e5f67e9..b0aecd32 100644 --- a/src/App/src/Message.php +++ b/src/Core/src/App/src/Message.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App; +namespace Core\App; class Message { diff --git a/data/doctrine/migrations/Version20241030082958.php b/src/Core/src/App/src/Migration/Version20241130084238.php similarity index 99% rename from data/doctrine/migrations/Version20241030082958.php rename to src/Core/src/App/src/Migration/Version20241130084238.php index 7342c67c..0a0edcc4 100644 --- a/data/doctrine/migrations/Version20241030082958.php +++ b/src/Core/src/App/src/Migration/Version20241130084238.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\Migrations; +namespace Core\App\Migration; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; @@ -10,7 +10,7 @@ /** * Auto-generated Migration: Please modify to your needs! */ -final class Version20241030082958 extends AbstractMigration +final class Version20241130084238 extends AbstractMigration { public function getDescription(): string { diff --git a/src/App/src/Repository/OAuthAccessTokenRepository.php b/src/Core/src/App/src/Repository/OAuthAccessTokenRepository.php similarity index 95% rename from src/App/src/Repository/OAuthAccessTokenRepository.php rename to src/Core/src/App/src/Repository/OAuthAccessTokenRepository.php index 313cbf42..b57eea4d 100644 --- a/src/App/src/Repository/OAuthAccessTokenRepository.php +++ b/src/Core/src/App/src/Repository/OAuthAccessTokenRepository.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\App\Repository; +namespace Core\App\Repository; -use Api\Admin\Entity\Admin; -use Api\App\Entity\OAuthAccessToken; -use Api\App\Entity\OAuthClient; -use Api\User\Entity\User; +use Core\Admin\Entity\Admin; +use Core\App\Entity\OAuthAccessToken; +use Core\App\Entity\OAuthClient; +use Core\User\Entity\User; use Doctrine\ORM\EntityRepository; use Dot\DependencyInjection\Attribute\Entity; use League\OAuth2\Server\Entities\AccessTokenEntityInterface; diff --git a/src/App/src/Repository/OAuthAuthCodeRepository.php b/src/Core/src/App/src/Repository/OAuthAuthCodeRepository.php similarity index 95% rename from src/App/src/Repository/OAuthAuthCodeRepository.php rename to src/Core/src/App/src/Repository/OAuthAuthCodeRepository.php index cf4469c5..fddc5c8d 100644 --- a/src/App/src/Repository/OAuthAuthCodeRepository.php +++ b/src/Core/src/App/src/Repository/OAuthAuthCodeRepository.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Repository; +namespace Core\App\Repository; -use Api\App\Entity\OAuthAuthCode; +use Core\App\Entity\OAuthAuthCode; use Doctrine\ORM\EntityRepository; use Dot\DependencyInjection\Attribute\Entity; use League\OAuth2\Server\Entities\AuthCodeEntityInterface; diff --git a/src/App/src/Repository/OAuthClientRepository.php b/src/Core/src/App/src/Repository/OAuthClientRepository.php similarity index 96% rename from src/App/src/Repository/OAuthClientRepository.php rename to src/Core/src/App/src/Repository/OAuthClientRepository.php index 8b667625..be89f861 100644 --- a/src/App/src/Repository/OAuthClientRepository.php +++ b/src/Core/src/App/src/Repository/OAuthClientRepository.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Repository; +namespace Core\App\Repository; -use Api\App\Entity\OAuthClient; +use Core\App\Entity\OAuthClient; use Doctrine\ORM\EntityRepository; use Dot\DependencyInjection\Attribute\Entity; use League\OAuth2\Server\Entities\ClientEntityInterface; diff --git a/src/App/src/Repository/OAuthRefreshTokenRepository.php b/src/Core/src/App/src/Repository/OAuthRefreshTokenRepository.php similarity index 95% rename from src/App/src/Repository/OAuthRefreshTokenRepository.php rename to src/Core/src/App/src/Repository/OAuthRefreshTokenRepository.php index 65be1ac0..28b5af4e 100644 --- a/src/App/src/Repository/OAuthRefreshTokenRepository.php +++ b/src/Core/src/App/src/Repository/OAuthRefreshTokenRepository.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Repository; +namespace Core\App\Repository; -use Api\App\Entity\OAuthRefreshToken; +use Core\App\Entity\OAuthRefreshToken; use Doctrine\ORM\EntityRepository; use Dot\DependencyInjection\Attribute\Entity; use League\OAuth2\Server\Entities\RefreshTokenEntityInterface; diff --git a/src/App/src/Repository/OAuthScopeRepository.php b/src/Core/src/App/src/Repository/OAuthScopeRepository.php similarity index 94% rename from src/App/src/Repository/OAuthScopeRepository.php rename to src/Core/src/App/src/Repository/OAuthScopeRepository.php index 8e84ddd9..1ec6da85 100644 --- a/src/App/src/Repository/OAuthScopeRepository.php +++ b/src/Core/src/App/src/Repository/OAuthScopeRepository.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\App\Repository; +namespace Core\App\Repository; -use Api\App\Entity\OAuthScope; +use Core\App\Entity\OAuthScope; use Doctrine\ORM\EntityRepository; use Dot\DependencyInjection\Attribute\Entity; use League\OAuth2\Server\Entities\ClientEntityInterface; diff --git a/src/Core/src/User/src/ConfigProvider.php b/src/Core/src/User/src/ConfigProvider.php new file mode 100644 index 00000000..295a864e --- /dev/null +++ b/src/Core/src/User/src/ConfigProvider.php @@ -0,0 +1,43 @@ + $this->getDoctrineConfig(), + ]; + } + + private function getDoctrineConfig(): array + { + return [ + 'driver' => [ + 'orm_default' => [ + 'drivers' => [ + 'Core\User\Entity' => 'UserEntities', + ], + ], + 'UserEntities' => [ + 'class' => AttributeDriver::class, + 'cache' => 'array', + 'paths' => getcwd() . '/src/Core/src/User/src/Entity', + ], + ], + 'types' => [ + UserStatusEnumType::NAME => UserStatusEnumType::class, + UserResetPasswordStatusEnumType::NAME => UserResetPasswordStatusEnumType::class, + ], + ]; + } +} diff --git a/src/User/src/DBAL/Types/UserResetPasswordStatusEnumType.php b/src/Core/src/User/src/DBAL/Types/UserResetPasswordStatusEnumType.php similarity index 74% rename from src/User/src/DBAL/Types/UserResetPasswordStatusEnumType.php rename to src/Core/src/User/src/DBAL/Types/UserResetPasswordStatusEnumType.php index d83525e9..2ffe59e9 100644 --- a/src/User/src/DBAL/Types/UserResetPasswordStatusEnumType.php +++ b/src/Core/src/User/src/DBAL/Types/UserResetPasswordStatusEnumType.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Api\User\DBAL\Types; +namespace Core\User\DBAL\Types; -use Api\App\DBAL\Types\AbstractEnumType; -use Api\User\Enum\UserResetPasswordStatusEnum; +use Core\App\DBAL\Types\AbstractEnumType; +use Core\User\Enum\UserResetPasswordStatusEnum; class UserResetPasswordStatusEnumType extends AbstractEnumType { diff --git a/src/User/src/DBAL/Types/UserStatusEnumType.php b/src/Core/src/User/src/DBAL/Types/UserStatusEnumType.php similarity index 73% rename from src/User/src/DBAL/Types/UserStatusEnumType.php rename to src/Core/src/User/src/DBAL/Types/UserStatusEnumType.php index 67e07a50..5ea8711d 100644 --- a/src/User/src/DBAL/Types/UserStatusEnumType.php +++ b/src/Core/src/User/src/DBAL/Types/UserStatusEnumType.php @@ -2,10 +2,10 @@ declare(strict_types=1); -namespace Api\User\DBAL\Types; +namespace Core\User\DBAL\Types; -use Api\App\DBAL\Types\AbstractEnumType; -use Api\User\Enum\UserStatusEnum; +use Core\App\DBAL\Types\AbstractEnumType; +use Core\User\Enum\UserStatusEnum; class UserStatusEnumType extends AbstractEnumType { diff --git a/src/User/src/Entity/User.php b/src/Core/src/User/src/Entity/User.php similarity index 95% rename from src/User/src/Entity/User.php rename to src/Core/src/User/src/Entity/User.php index 5caad643..c0bad08e 100644 --- a/src/User/src/Entity/User.php +++ b/src/Core/src/User/src/Entity/User.php @@ -2,14 +2,14 @@ declare(strict_types=1); -namespace Api\User\Entity; - -use Api\App\Entity\AbstractEntity; -use Api\App\Entity\PasswordTrait; -use Api\App\Entity\RoleInterface; -use Api\App\Entity\TimestampsTrait; -use Api\User\Enum\UserStatusEnum; -use Api\User\Repository\UserRepository; +namespace Core\User\Entity; + +use Core\App\Entity\AbstractEntity; +use Core\App\Entity\PasswordTrait; +use Core\App\Entity\RoleInterface; +use Core\App\Entity\TimestampsTrait; +use Core\User\Enum\UserStatusEnum; +use Core\User\Repository\UserRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; @@ -245,7 +245,7 @@ public static function generateHash(): string public function getName(): string { - return $this->getDetail()->getFirstName() . ' ' . $this->getDetail()->getLastName(); + return $this->getDetail()->getFirstName() . ' User.php' . $this->getDetail()->getLastName(); } public function isActive(): bool diff --git a/src/User/src/Entity/UserAvatar.php b/src/Core/src/User/src/Entity/UserAvatar.php similarity index 88% rename from src/User/src/Entity/UserAvatar.php rename to src/Core/src/User/src/Entity/UserAvatar.php index fa9d9a2d..83efa35f 100644 --- a/src/User/src/Entity/UserAvatar.php +++ b/src/Core/src/User/src/Entity/UserAvatar.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\User\Entity; +namespace Core\User\Entity; -use Api\App\Entity\AbstractEntity; -use Api\App\Entity\TimestampsTrait; -use Api\User\EventListener\UserAvatarEventListener; -use Api\User\Repository\UserAvatarRepository; +use Core\App\Entity\AbstractEntity; +use Core\App\Entity\TimestampsTrait; +use Core\User\EventListener\UserAvatarEventListener; +use Core\User\Repository\UserAvatarRepository; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: UserAvatarRepository::class)] diff --git a/src/User/src/Entity/UserDetail.php b/src/Core/src/User/src/Entity/UserDetail.php similarity index 93% rename from src/User/src/Entity/UserDetail.php rename to src/Core/src/User/src/Entity/UserDetail.php index 707c29c6..e45650e2 100644 --- a/src/User/src/Entity/UserDetail.php +++ b/src/Core/src/User/src/Entity/UserDetail.php @@ -2,11 +2,11 @@ declare(strict_types=1); -namespace Api\User\Entity; +namespace Core\User\Entity; -use Api\App\Entity\AbstractEntity; -use Api\App\Entity\TimestampsTrait; -use Api\User\Repository\UserDetailRepository; +use Core\App\Entity\AbstractEntity; +use Core\App\Entity\TimestampsTrait; +use Core\User\Repository\UserDetailRepository; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: UserDetailRepository::class)] diff --git a/src/User/src/Entity/UserResetPassword.php b/src/Core/src/User/src/Entity/UserResetPassword.php similarity index 93% rename from src/User/src/Entity/UserResetPassword.php rename to src/Core/src/User/src/Entity/UserResetPassword.php index 59e4f831..98cb90ce 100644 --- a/src/User/src/Entity/UserResetPassword.php +++ b/src/Core/src/User/src/Entity/UserResetPassword.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\User\Entity; +namespace Core\User\Entity; -use Api\App\Entity\AbstractEntity; -use Api\App\Entity\TimestampsTrait; -use Api\User\Enum\UserResetPasswordStatusEnum; -use Api\User\Repository\UserResetPasswordRepository; +use Core\App\Entity\AbstractEntity; +use Core\App\Entity\TimestampsTrait; +use Core\User\Enum\UserResetPasswordStatusEnum; +use Core\User\Repository\UserResetPasswordRepository; use DateInterval; use DateTime; use DateTimeImmutable; diff --git a/src/User/src/Entity/UserRole.php b/src/Core/src/User/src/Entity/UserRole.php similarity index 85% rename from src/User/src/Entity/UserRole.php rename to src/Core/src/User/src/Entity/UserRole.php index 649e55bb..450e5fae 100644 --- a/src/User/src/Entity/UserRole.php +++ b/src/Core/src/User/src/Entity/UserRole.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\User\Entity; +namespace Core\User\Entity; -use Api\App\Entity\AbstractEntity; -use Api\App\Entity\RoleInterface; -use Api\App\Entity\TimestampsTrait; -use Api\User\Repository\UserRoleRepository; +use Core\App\Entity\AbstractEntity; +use Core\App\Entity\RoleInterface; +use Core\App\Entity\TimestampsTrait; +use Core\User\Repository\UserRoleRepository; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: UserRoleRepository::class)] diff --git a/src/User/src/Enum/UserResetPasswordStatusEnum.php b/src/Core/src/User/src/Enum/UserResetPasswordStatusEnum.php similarity index 84% rename from src/User/src/Enum/UserResetPasswordStatusEnum.php rename to src/Core/src/User/src/Enum/UserResetPasswordStatusEnum.php index 995e3a2b..4ed994aa 100644 --- a/src/User/src/Enum/UserResetPasswordStatusEnum.php +++ b/src/Core/src/User/src/Enum/UserResetPasswordStatusEnum.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\User\Enum; +namespace Core\User\Enum; enum UserResetPasswordStatusEnum: string { diff --git a/src/User/src/Enum/UserStatusEnum.php b/src/Core/src/User/src/Enum/UserStatusEnum.php similarity index 85% rename from src/User/src/Enum/UserStatusEnum.php rename to src/Core/src/User/src/Enum/UserStatusEnum.php index a3863515..8972ce32 100644 --- a/src/User/src/Enum/UserStatusEnum.php +++ b/src/Core/src/User/src/Enum/UserStatusEnum.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\User\Enum; +namespace Core\User\Enum; enum UserStatusEnum: string { diff --git a/src/User/src/EventListener/UserAvatarEventListener.php b/src/Core/src/User/src/EventListener/UserAvatarEventListener.php similarity index 89% rename from src/User/src/EventListener/UserAvatarEventListener.php rename to src/Core/src/User/src/EventListener/UserAvatarEventListener.php index 3f96d76d..8b623aff 100644 --- a/src/User/src/EventListener/UserAvatarEventListener.php +++ b/src/Core/src/User/src/EventListener/UserAvatarEventListener.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\User\EventListener; +namespace Core\User\EventListener; -use Api\User\Entity\UserAvatar; +use Core\User\Entity\UserAvatar; use Dot\DependencyInjection\Attribute\Inject; use function rtrim; @@ -16,7 +16,7 @@ class UserAvatarEventListener "config", )] public function __construct( - protected array $config = [] + protected array $config = [], ) { } diff --git a/src/User/src/Repository/UserAvatarRepository.php b/src/Core/src/User/src/Repository/UserAvatarRepository.php similarity index 90% rename from src/User/src/Repository/UserAvatarRepository.php rename to src/Core/src/User/src/Repository/UserAvatarRepository.php index 7987eaa8..9f17abec 100644 --- a/src/User/src/Repository/UserAvatarRepository.php +++ b/src/Core/src/User/src/Repository/UserAvatarRepository.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\User\Repository; +namespace Core\User\Repository; -use Api\User\Entity\UserAvatar; +use Core\User\Entity\UserAvatar; use Doctrine\ORM\EntityRepository; use Dot\DependencyInjection\Attribute\Entity; diff --git a/src/User/src/Repository/UserDetailRepository.php b/src/Core/src/User/src/Repository/UserDetailRepository.php similarity index 79% rename from src/User/src/Repository/UserDetailRepository.php rename to src/Core/src/User/src/Repository/UserDetailRepository.php index 2c8a19d7..89a58fd5 100644 --- a/src/User/src/Repository/UserDetailRepository.php +++ b/src/Core/src/User/src/Repository/UserDetailRepository.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\User\Repository; +namespace Core\User\Repository; -use Api\User\Entity\UserDetail; +use Core\User\Entity\UserDetail; use Doctrine\ORM\EntityRepository; use Dot\DependencyInjection\Attribute\Entity; diff --git a/src/User/src/Repository/UserRepository.php b/src/Core/src/User/src/Repository/UserRepository.php similarity index 92% rename from src/User/src/Repository/UserRepository.php rename to src/Core/src/User/src/Repository/UserRepository.php index f1590bdd..c0cd58d7 100644 --- a/src/User/src/Repository/UserRepository.php +++ b/src/Core/src/User/src/Repository/UserRepository.php @@ -2,16 +2,16 @@ declare(strict_types=1); -namespace Api\User\Repository; - -use Api\Admin\Entity\Admin; -use Api\App\Entity\OAuthClient; -use Api\App\Helper\PaginationHelper; -use Api\App\Message; -use Api\User\Collection\UserCollection; -use Api\User\Entity\User; -use Api\User\Enum\UserStatusEnum; +namespace Core\User\Repository; + +use Core\Admin\Entity\Admin; +use Core\App\Entity\OAuthClient; +use Core\App\Helper\PaginationHelper; +use Core\App\Message; +use Core\User\Entity\User; +use Core\User\Enum\UserStatusEnum; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\QueryBuilder; use Dot\DependencyInjection\Attribute\Entity; use League\OAuth2\Server\Entities\ClientEntityInterface; use League\OAuth2\Server\Exception\OAuthServerException; @@ -32,7 +32,7 @@ public function deleteUser(User $user): void $this->getEntityManager()->flush(); } - public function getUsers(array $filters = []): UserCollection + public function getUsers(array $filters = []): QueryBuilder { $page = PaginationHelper::getOffsetAndLimit($filters); @@ -71,7 +71,7 @@ public function getUsers(array $filters = []): UserCollection $qb->andWhere('user.status != :status')->setParameter('status', UserStatusEnum::Deleted); $qb->getQuery()->useQueryCache(true); - return new UserCollection($qb, false); + return $qb; } public function saveUser(User $user): User diff --git a/src/User/src/Repository/UserResetPasswordRepository.php b/src/Core/src/User/src/Repository/UserResetPasswordRepository.php similarity index 78% rename from src/User/src/Repository/UserResetPasswordRepository.php rename to src/Core/src/User/src/Repository/UserResetPasswordRepository.php index 2143be1d..7796ff1b 100644 --- a/src/User/src/Repository/UserResetPasswordRepository.php +++ b/src/Core/src/User/src/Repository/UserResetPasswordRepository.php @@ -2,9 +2,9 @@ declare(strict_types=1); -namespace Api\User\Repository; +namespace Core\User\Repository; -use Api\User\Entity\UserResetPassword; +use Core\User\Entity\UserResetPassword; use Doctrine\ORM\EntityRepository; use Dot\DependencyInjection\Attribute\Entity; diff --git a/src/User/src/Repository/UserRoleRepository.php b/src/Core/src/User/src/Repository/UserRoleRepository.php similarity index 60% rename from src/User/src/Repository/UserRoleRepository.php rename to src/Core/src/User/src/Repository/UserRoleRepository.php index bb282442..fef088c3 100644 --- a/src/User/src/Repository/UserRoleRepository.php +++ b/src/Core/src/User/src/Repository/UserRoleRepository.php @@ -2,12 +2,12 @@ declare(strict_types=1); -namespace Api\User\Repository; +namespace Core\User\Repository; -use Api\App\Helper\PaginationHelper; -use Api\User\Collection\UserRoleCollection; -use Api\User\Entity\UserRole; +use Core\App\Helper\PaginationHelper; +use Core\User\Entity\UserRole; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\QueryBuilder; use Dot\DependencyInjection\Attribute\Entity; /** @@ -16,21 +16,17 @@ #[Entity(name: UserRole::class)] class UserRoleRepository extends EntityRepository { - public function getRoles(array $params = []): UserRoleCollection + public function getRoles(array $params = []): QueryBuilder { $page = PaginationHelper::getOffsetAndLimit($params); - $query = $this + return $this ->getEntityManager() ->createQueryBuilder() ->select(['role']) ->from(UserRole::class, 'role') ->orderBy($params['order'] ?? 'role.created', $params['dir'] ?? 'desc') ->setFirstResult($page['offset']) - ->setMaxResults($page['limit']) - ->getQuery() - ->useQueryCache(true); - - return new UserRoleCollection($query, false); + ->setMaxResults($page['limit']); } } diff --git a/src/App/src/UserIdentity.php b/src/Core/src/User/src/UserIdentity.php similarity index 97% rename from src/App/src/UserIdentity.php rename to src/Core/src/User/src/UserIdentity.php index 66fa4e27..e9bf72a6 100644 --- a/src/App/src/UserIdentity.php +++ b/src/Core/src/User/src/UserIdentity.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Api\App; +namespace Core\User; use Mezzio\Authentication\UserInterface; diff --git a/src/User/src/ConfigProvider.php b/src/User/src/ConfigProvider.php index e1d6a551..83774acc 100644 --- a/src/User/src/ConfigProvider.php +++ b/src/User/src/ConfigProvider.php @@ -8,10 +8,6 @@ use Api\App\Factory\HandlerDelegatorFactory; use Api\User\Collection\UserCollection; use Api\User\Collection\UserRoleCollection; -use Api\User\Entity\User; -use Api\User\Entity\UserAvatar; -use Api\User\Entity\UserRole; -use Api\User\EventListener\UserAvatarEventListener; use Api\User\Handler\AccountActivateHandler; use Api\User\Handler\AccountAvatarHandler; use Api\User\Handler\AccountHandler; @@ -23,18 +19,21 @@ use Api\User\Handler\UserHandler; use Api\User\Handler\UserRoleCollectionHandler; use Api\User\Handler\UserRoleHandler; -use Api\User\Repository\UserAvatarRepository; -use Api\User\Repository\UserDetailRepository; -use Api\User\Repository\UserRepository; -use Api\User\Repository\UserResetPasswordRepository; -use Api\User\Repository\UserRoleRepository; use Api\User\Service\UserAvatarService; use Api\User\Service\UserAvatarServiceInterface; use Api\User\Service\UserRoleService; use Api\User\Service\UserRoleServiceInterface; use Api\User\Service\UserService; use Api\User\Service\UserServiceInterface; -use Doctrine\ORM\Mapping\Driver\AttributeDriver; +use Core\User\Entity\User; +use Core\User\Entity\UserAvatar; +use Core\User\Entity\UserRole; +use Core\User\EventListener\UserAvatarEventListener; +use Core\User\Repository\UserAvatarRepository; +use Core\User\Repository\UserDetailRepository; +use Core\User\Repository\UserRepository; +use Core\User\Repository\UserResetPasswordRepository; +use Core\User\Repository\UserRoleRepository; use Dot\DependencyInjection\Factory\AttributedRepositoryFactory; use Dot\DependencyInjection\Factory\AttributedServiceFactory; use Mezzio\Application; @@ -46,7 +45,6 @@ public function __invoke(): array { return [ 'dependencies' => $this->getDependencies(), - 'doctrine' => $this->getDoctrineConfig(), MetadataMap::class => $this->getHalConfig(), 'templates' => $this->getTemplates(), ]; @@ -99,24 +97,6 @@ public function getDependencies(): array ]; } - private function getDoctrineConfig(): array - { - return [ - 'driver' => [ - 'orm_default' => [ - 'drivers' => [ - 'Api\User\Entity' => 'UserEntities', - ], - ], - 'UserEntities' => [ - 'class' => AttributeDriver::class, - 'cache' => 'array', - 'paths' => __DIR__ . '/Entity', - ], - ], - ]; - } - public function getHalConfig(): array { return [ diff --git a/src/User/src/Handler/AccountActivateHandler.php b/src/User/src/Handler/AccountActivateHandler.php index bc5f514d..878902ed 100644 --- a/src/User/src/Handler/AccountActivateHandler.php +++ b/src/User/src/Handler/AccountActivateHandler.php @@ -8,9 +8,9 @@ use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; use Api\App\Handler\AbstractHandler; -use Api\App\Message; use Api\User\InputFilter\ActivateAccountInputFilter; use Api\User\Service\UserServiceInterface; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use Dot\Mail\Exception\MailException; use Fig\Http\Message\StatusCodeInterface; diff --git a/src/User/src/Handler/AccountAvatarHandler.php b/src/User/src/Handler/AccountAvatarHandler.php index dd54efbc..fd6433e9 100644 --- a/src/User/src/Handler/AccountAvatarHandler.php +++ b/src/User/src/Handler/AccountAvatarHandler.php @@ -7,10 +7,10 @@ use Api\App\Exception\BadRequestException; use Api\App\Exception\NotFoundException; use Api\App\Handler\AbstractHandler; -use Api\App\Message; -use Api\User\Entity\User; use Api\User\InputFilter\UpdateAvatarInputFilter; use Api\User\Service\UserAvatarServiceInterface; +use Core\App\Message; +use Core\User\Entity\User; use Dot\DependencyInjection\Attribute\Inject; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; diff --git a/src/User/src/Handler/AccountHandler.php b/src/User/src/Handler/AccountHandler.php index 935a2d02..d49be0e6 100644 --- a/src/User/src/Handler/AccountHandler.php +++ b/src/User/src/Handler/AccountHandler.php @@ -8,10 +8,10 @@ use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; use Api\App\Handler\AbstractHandler; -use Api\User\Entity\User; use Api\User\InputFilter\CreateUserInputFilter; use Api\User\InputFilter\UpdateUserInputFilter; use Api\User\Service\UserServiceInterface; +use Core\User\Entity\User; use Dot\DependencyInjection\Attribute\Inject; use Dot\Mail\Exception\MailException; use Psr\Http\Message\ResponseInterface; diff --git a/src/User/src/Handler/AccountRecoveryHandler.php b/src/User/src/Handler/AccountRecoveryHandler.php index 67225012..23532d75 100644 --- a/src/User/src/Handler/AccountRecoveryHandler.php +++ b/src/User/src/Handler/AccountRecoveryHandler.php @@ -7,9 +7,9 @@ use Api\App\Exception\BadRequestException; use Api\App\Exception\NotFoundException; use Api\App\Handler\AbstractHandler; -use Api\App\Message; use Api\User\InputFilter\RecoverIdentityInputFilter; use Api\User\Service\UserServiceInterface; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use Dot\Mail\Exception\MailException; use Psr\Http\Message\ResponseInterface; diff --git a/src/User/src/Handler/AccountResetPasswordHandler.php b/src/User/src/Handler/AccountResetPasswordHandler.php index d389fe90..3bb0f06b 100644 --- a/src/User/src/Handler/AccountResetPasswordHandler.php +++ b/src/User/src/Handler/AccountResetPasswordHandler.php @@ -9,11 +9,11 @@ use Api\App\Exception\ExpiredException; use Api\App\Exception\NotFoundException; use Api\App\Handler\AbstractHandler; -use Api\App\Message; -use Api\User\Entity\User; use Api\User\InputFilter\ResetPasswordInputFilter; use Api\User\InputFilter\UpdatePasswordInputFilter; use Api\User\Service\UserServiceInterface; +use Core\App\Message; +use Core\User\Entity\User; use Dot\DependencyInjection\Attribute\Inject; use Dot\Mail\Exception\MailException; use Fig\Http\Message\StatusCodeInterface; diff --git a/src/User/src/Handler/UserActivateHandler.php b/src/User/src/Handler/UserActivateHandler.php index 8b6e546c..d684998b 100644 --- a/src/User/src/Handler/UserActivateHandler.php +++ b/src/User/src/Handler/UserActivateHandler.php @@ -7,8 +7,8 @@ use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; use Api\App\Handler\AbstractHandler; -use Api\App\Message; use Api\User\Service\UserServiceInterface; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use Dot\Mail\Exception\MailException; use Psr\Http\Message\ResponseInterface; diff --git a/src/User/src/Handler/UserAvatarHandler.php b/src/User/src/Handler/UserAvatarHandler.php index 75879de2..fdc07686 100644 --- a/src/User/src/Handler/UserAvatarHandler.php +++ b/src/User/src/Handler/UserAvatarHandler.php @@ -7,10 +7,10 @@ use Api\App\Exception\BadRequestException; use Api\App\Exception\NotFoundException; use Api\App\Handler\AbstractHandler; -use Api\App\Message; use Api\User\InputFilter\UpdateAvatarInputFilter; use Api\User\Service\UserAvatarServiceInterface; use Api\User\Service\UserServiceInterface; +use Core\App\Message; use Dot\DependencyInjection\Attribute\Inject; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; diff --git a/src/User/src/InputFilter/Input/AvatarInput.php b/src/User/src/InputFilter/Input/AvatarInput.php index fabe0888..1b1435fd 100644 --- a/src/User/src/InputFilter/Input/AvatarInput.php +++ b/src/User/src/InputFilter/Input/AvatarInput.php @@ -4,7 +4,7 @@ namespace Api\User\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\FileInput; diff --git a/src/User/src/InputFilter/Input/EmailInput.php b/src/User/src/InputFilter/Input/EmailInput.php index bc6c2eb8..322311d7 100644 --- a/src/User/src/InputFilter/Input/EmailInput.php +++ b/src/User/src/InputFilter/Input/EmailInput.php @@ -4,7 +4,7 @@ namespace Api\User\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/User/src/InputFilter/Input/IdentityInput.php b/src/User/src/InputFilter/Input/IdentityInput.php index bf69cd63..326441e4 100644 --- a/src/User/src/InputFilter/Input/IdentityInput.php +++ b/src/User/src/InputFilter/Input/IdentityInput.php @@ -4,7 +4,7 @@ namespace Api\User\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/User/src/InputFilter/Input/PasswordConfirmInput.php b/src/User/src/InputFilter/Input/PasswordConfirmInput.php index c2387900..2699d3a4 100644 --- a/src/User/src/InputFilter/Input/PasswordConfirmInput.php +++ b/src/User/src/InputFilter/Input/PasswordConfirmInput.php @@ -4,7 +4,7 @@ namespace Api\User\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/User/src/InputFilter/Input/PasswordInput.php b/src/User/src/InputFilter/Input/PasswordInput.php index 88f3f0a6..1439849d 100644 --- a/src/User/src/InputFilter/Input/PasswordInput.php +++ b/src/User/src/InputFilter/Input/PasswordInput.php @@ -4,7 +4,7 @@ namespace Api\User\InputFilter\Input; -use Api\App\Message; +use Core\App\Message; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/User/src/InputFilter/Input/StatusInput.php b/src/User/src/InputFilter/Input/StatusInput.php index d42e1c07..afbb705e 100644 --- a/src/User/src/InputFilter/Input/StatusInput.php +++ b/src/User/src/InputFilter/Input/StatusInput.php @@ -4,8 +4,8 @@ namespace Api\User\InputFilter\Input; -use Api\App\Message; -use Api\User\Enum\UserStatusEnum; +use Core\App\Message; +use Core\User\Enum\UserStatusEnum; use Laminas\Filter\StringTrim; use Laminas\Filter\StripTags; use Laminas\InputFilter\Input; diff --git a/src/User/src/OpenAPI.php b/src/User/src/OpenAPI.php index 5b5ad2f9..b2fd118c 100644 --- a/src/User/src/OpenAPI.php +++ b/src/User/src/OpenAPI.php @@ -4,13 +4,6 @@ namespace Api\User; -use Api\User\Entity\User; -use Api\User\Entity\UserAvatar; -use Api\User\Entity\UserDetail; -use Api\User\Entity\UserResetPassword; -use Api\User\Entity\UserRole; -use Api\User\Enum\UserResetPasswordStatusEnum; -use Api\User\Enum\UserStatusEnum; use Api\User\Handler\AccountActivateHandler; use Api\User\Handler\AccountAvatarHandler; use Api\User\Handler\AccountHandler; @@ -20,6 +13,13 @@ use Api\User\Handler\UserAvatarHandler; use Api\User\Handler\UserHandler; use Api\User\Handler\UserRoleHandler; +use Core\User\Entity\User; +use Core\User\Entity\UserAvatar; +use Core\User\Entity\UserDetail; +use Core\User\Entity\UserResetPassword; +use Core\User\Entity\UserRole; +use Core\User\Enum\UserResetPasswordStatusEnum; +use Core\User\Enum\UserStatusEnum; use DateTimeImmutable; use Fig\Http\Message\StatusCodeInterface; use OpenApi\Attributes as OA; diff --git a/src/User/src/Service/UserAvatarService.php b/src/User/src/Service/UserAvatarService.php index 4c153dc2..4c446160 100644 --- a/src/User/src/Service/UserAvatarService.php +++ b/src/User/src/Service/UserAvatarService.php @@ -4,9 +4,9 @@ namespace Api\User\Service; -use Api\User\Entity\User; -use Api\User\Entity\UserAvatar; -use Api\User\Repository\UserAvatarRepository; +use Core\User\Entity\User; +use Core\User\Entity\UserAvatar; +use Core\User\Repository\UserAvatarRepository; use Dot\DependencyInjection\Attribute\Inject; use Laminas\Diactoros\UploadedFile; use Psr\Http\Message\UploadedFileInterface; diff --git a/src/User/src/Service/UserAvatarServiceInterface.php b/src/User/src/Service/UserAvatarServiceInterface.php index 98d1c3a5..336841de 100644 --- a/src/User/src/Service/UserAvatarServiceInterface.php +++ b/src/User/src/Service/UserAvatarServiceInterface.php @@ -4,8 +4,8 @@ namespace Api\User\Service; -use Api\User\Entity\User; -use Api\User\Entity\UserAvatar; +use Core\User\Entity\User; +use Core\User\Entity\UserAvatar; use Laminas\Diactoros\UploadedFile; interface UserAvatarServiceInterface diff --git a/src/User/src/Service/UserRoleService.php b/src/User/src/Service/UserRoleService.php index 514d045f..44048938 100644 --- a/src/User/src/Service/UserRoleService.php +++ b/src/User/src/Service/UserRoleService.php @@ -6,10 +6,10 @@ use Api\App\Exception\BadRequestException; use Api\App\Exception\NotFoundException; -use Api\App\Message; use Api\User\Collection\UserRoleCollection; -use Api\User\Entity\UserRole; -use Api\User\Repository\UserRoleRepository; +use Core\App\Message; +use Core\User\Entity\UserRole; +use Core\User\Repository\UserRoleRepository; use Dot\DependencyInjection\Attribute\Inject; use function in_array; @@ -54,6 +54,9 @@ public function getRoles(array $params = []): UserRoleCollection throw (new BadRequestException())->setMessages([sprintf(Message::INVALID_VALUE, 'order')]); } - return $this->roleRepository->getRoles($params); + $qb = $this->roleRepository->getRoles($params); + $qb->getQuery()->useQueryCache(true); + + return new UserRoleCollection($qb, false); } } diff --git a/src/User/src/Service/UserRoleServiceInterface.php b/src/User/src/Service/UserRoleServiceInterface.php index caf9b4aa..76ab09ce 100644 --- a/src/User/src/Service/UserRoleServiceInterface.php +++ b/src/User/src/Service/UserRoleServiceInterface.php @@ -7,7 +7,7 @@ use Api\App\Exception\BadRequestException; use Api\App\Exception\NotFoundException; use Api\User\Collection\UserRoleCollection; -use Api\User\Entity\UserRole; +use Core\User\Entity\UserRole; interface UserRoleServiceInterface { diff --git a/src/User/src/Service/UserService.php b/src/User/src/Service/UserService.php index 3a16711b..1dd1c68c 100644 --- a/src/User/src/Service/UserService.php +++ b/src/User/src/Service/UserService.php @@ -7,17 +7,17 @@ use Api\App\Exception\BadRequestException; use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; -use Api\App\Message; -use Api\App\Repository\OAuthAccessTokenRepository; -use Api\App\Repository\OAuthRefreshTokenRepository; use Api\User\Collection\UserCollection; -use Api\User\Entity\User; -use Api\User\Entity\UserDetail; -use Api\User\Entity\UserResetPassword; -use Api\User\Enum\UserStatusEnum; -use Api\User\Repository\UserDetailRepository; -use Api\User\Repository\UserRepository; -use Api\User\Repository\UserResetPasswordRepository; +use Core\App\Message; +use Core\App\Repository\OAuthAccessTokenRepository; +use Core\App\Repository\OAuthRefreshTokenRepository; +use Core\User\Entity\User; +use Core\User\Entity\UserDetail; +use Core\User\Entity\UserResetPassword; +use Core\User\Enum\UserStatusEnum; +use Core\User\Repository\UserDetailRepository; +use Core\User\Repository\UserRepository; +use Core\User\Repository\UserResetPasswordRepository; use Dot\DependencyInjection\Attribute\Inject; use Dot\Log\LoggerInterface; use Dot\Mail\Exception\MailException; @@ -243,7 +243,10 @@ public function getUsers(array $params = []): UserCollection throw (new BadRequestException())->setMessages([sprintf(Message::INVALID_VALUE, 'order')]); } - return $this->userRepository->getUsers($params); + $qb = $this->userRepository->getUsers($params); + $qb->getQuery()->useQueryCache(true); + + return new UserCollection($qb, false); } /** diff --git a/src/User/src/Service/UserServiceInterface.php b/src/User/src/Service/UserServiceInterface.php index 3e9285b5..8597af08 100644 --- a/src/User/src/Service/UserServiceInterface.php +++ b/src/User/src/Service/UserServiceInterface.php @@ -8,8 +8,8 @@ use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; use Api\User\Collection\UserCollection; -use Api\User\Entity\User; -use Api\User\Entity\UserResetPassword; +use Core\User\Entity\User; +use Core\User\Entity\UserResetPassword; use Dot\Mail\Exception\MailException; use RuntimeException; diff --git a/test/Functional/AbstractFunctionalTest.php b/test/Functional/AbstractFunctionalTest.php index 3149b291..389f6c06 100644 --- a/test/Functional/AbstractFunctionalTest.php +++ b/test/Functional/AbstractFunctionalTest.php @@ -4,16 +4,16 @@ namespace ApiTest\Functional; -use Api\Admin\Entity\Admin; -use Api\Admin\Entity\AdminRole; -use Api\Admin\Enum\AdminStatusEnum; -use Api\App\Entity\RoleInterface; -use Api\User\Entity\User; -use Api\User\Entity\UserDetail; -use Api\User\Entity\UserRole; -use Api\User\Enum\UserStatusEnum; use ApiTest\Functional\Traits\AuthenticationTrait; use ApiTest\Functional\Traits\DatabaseTrait; +use Core\Admin\Entity\Admin; +use Core\Admin\Entity\AdminRole; +use Core\Admin\Enum\AdminStatusEnum; +use Core\App\Entity\RoleInterface; +use Core\User\Entity\User; +use Core\User\Entity\UserDetail; +use Core\User\Entity\UserRole; +use Core\User\Enum\UserStatusEnum; use Doctrine\ORM\EntityManagerInterface; use Fig\Http\Message\RequestMethodInterface; use Fig\Http\Message\StatusCodeInterface; diff --git a/test/Functional/AdminTest.php b/test/Functional/AdminTest.php index a00f7b8c..11811250 100644 --- a/test/Functional/AdminTest.php +++ b/test/Functional/AdminTest.php @@ -4,14 +4,14 @@ namespace ApiTest\Functional; -use Api\Admin\Entity\Admin; -use Api\Admin\Entity\AdminRole; -use Api\App\Message; -use Api\User\Entity\User; -use Api\User\Entity\UserDetail; -use Api\User\Entity\UserRole; -use Api\User\Enum\UserStatusEnum; use BackedEnum; +use Core\Admin\Entity\Admin; +use Core\Admin\Entity\AdminRole; +use Core\App\Message; +use Core\User\Entity\User; +use Core\User\Entity\UserDetail; +use Core\User\Entity\UserRole; +use Core\User\Enum\UserStatusEnum; use Dot\Mail\Service\MailService; use PHPUnit\Framework\MockObject\Exception; use Psr\Container\ContainerExceptionInterface; diff --git a/test/Functional/UserTest.php b/test/Functional/UserTest.php index b74fff00..08bc25ed 100644 --- a/test/Functional/UserTest.php +++ b/test/Functional/UserTest.php @@ -4,13 +4,13 @@ namespace ApiTest\Functional; -use Api\App\Message; -use Api\User\Entity\User; -use Api\User\Entity\UserAvatar; -use Api\User\Entity\UserResetPassword; -use Api\User\Enum\UserResetPasswordStatusEnum; -use Api\User\Enum\UserStatusEnum; use Api\User\Service\UserAvatarService; +use Core\App\Message; +use Core\User\Entity\User; +use Core\User\Entity\UserAvatar; +use Core\User\Entity\UserResetPassword; +use Core\User\Enum\UserResetPasswordStatusEnum; +use Core\User\Enum\UserStatusEnum; use DateInterval; use DateTimeImmutable; use Dot\Mail\Service\MailService; diff --git a/test/Unit/Admin/Service/AdminServiceTest.php b/test/Unit/Admin/Service/AdminServiceTest.php index 52561e5f..303e08ed 100644 --- a/test/Unit/Admin/Service/AdminServiceTest.php +++ b/test/Unit/Admin/Service/AdminServiceTest.php @@ -4,13 +4,13 @@ namespace ApiTest\Unit\Admin\Service; -use Api\Admin\Entity\Admin; -use Api\Admin\Entity\AdminRole; -use Api\Admin\Enum\AdminStatusEnum; -use Api\Admin\Repository\AdminRepository; use Api\Admin\Service\AdminRoleService; use Api\Admin\Service\AdminService as Subject; -use Api\App\Message; +use Core\Admin\Entity\Admin; +use Core\Admin\Entity\AdminRole; +use Core\Admin\Enum\AdminStatusEnum; +use Core\Admin\Repository\AdminRepository; +use Core\App\Message; use Exception; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; diff --git a/test/Unit/App/Middleware/AuthenticationMiddlewareTest.php b/test/Unit/App/Middleware/AuthenticationMiddlewareTest.php index fc95d3b8..5e5121a9 100644 --- a/test/Unit/App/Middleware/AuthenticationMiddlewareTest.php +++ b/test/Unit/App/Middleware/AuthenticationMiddlewareTest.php @@ -5,7 +5,7 @@ namespace ApiTest\Unit\App\Middleware; use Api\App\Middleware\AuthenticationMiddleware as Subject; -use Api\User\Entity\UserRole; +use Core\User\Entity\UserRole; use Laminas\Diactoros\ServerRequest; use Mezzio\Authentication\AuthenticationInterface; use Mezzio\Authentication\UserInterface; diff --git a/test/Unit/App/Middleware/AuthorizationMiddlewareTest.php b/test/Unit/App/Middleware/AuthorizationMiddlewareTest.php index cc6dfd11..6c3903bf 100644 --- a/test/Unit/App/Middleware/AuthorizationMiddlewareTest.php +++ b/test/Unit/App/Middleware/AuthorizationMiddlewareTest.php @@ -4,17 +4,17 @@ namespace ApiTest\Unit\App\Middleware; -use Api\Admin\Entity\Admin; -use Api\Admin\Entity\AdminRole; -use Api\Admin\Enum\AdminStatusEnum; -use Api\Admin\Repository\AdminRepository; -use Api\App\Message; use Api\App\Middleware\AuthorizationMiddleware as Subject; -use Api\App\UserIdentity; -use Api\User\Entity\User; -use Api\User\Entity\UserRole; -use Api\User\Enum\UserStatusEnum; -use Api\User\Repository\UserRepository; +use Core\Admin\Entity\Admin; +use Core\Admin\Entity\AdminRole; +use Core\Admin\Enum\AdminStatusEnum; +use Core\Admin\Repository\AdminRepository; +use Core\App\Message; +use Core\User\Entity\User; +use Core\User\Entity\UserRole; +use Core\User\Enum\UserStatusEnum; +use Core\User\Repository\UserRepository; +use Core\User\UserIdentity; use Fig\Http\Message\StatusCodeInterface; use Laminas\Diactoros\ServerRequest; use Mezzio\Authentication\UserInterface; diff --git a/test/Unit/App/Middleware/DeprecationMiddlewareTest.php b/test/Unit/App/Middleware/DeprecationMiddlewareTest.php index c561891d..f095e34c 100644 --- a/test/Unit/App/Middleware/DeprecationMiddlewareTest.php +++ b/test/Unit/App/Middleware/DeprecationMiddlewareTest.php @@ -8,8 +8,8 @@ use Api\App\Attribute\ResourceDeprecation; use Api\App\Exception\DeprecationConflictException; use Api\App\Handler\AbstractHandler; -use Api\App\Message; use Api\App\Middleware\DeprecationMiddleware as Subject; +use Core\App\Message; use Fig\Http\Message\RequestMethodInterface; use Laminas\Diactoros\Response\EmptyResponse; use Laminas\Stratigility\MiddlewarePipe; diff --git a/test/Unit/User/Service/UserAvatarServiceTest.php b/test/Unit/User/Service/UserAvatarServiceTest.php index 43d9d07b..e1bcbd39 100644 --- a/test/Unit/User/Service/UserAvatarServiceTest.php +++ b/test/Unit/User/Service/UserAvatarServiceTest.php @@ -4,10 +4,10 @@ namespace ApiTest\Unit\User\Service; -use Api\User\Entity\User; -use Api\User\Entity\UserAvatar; -use Api\User\Repository\UserAvatarRepository; use Api\User\Service\UserAvatarService; +use Core\User\Entity\User; +use Core\User\Entity\UserAvatar; +use Core\User\Repository\UserAvatarRepository; use Laminas\Diactoros\UploadedFile; use PHPUnit\Framework\MockObject\Exception; use PHPUnit\Framework\MockObject\MockObject; diff --git a/test/Unit/User/Service/UserServiceTest.php b/test/Unit/User/Service/UserServiceTest.php index 5d1228e9..59319c08 100644 --- a/test/Unit/User/Service/UserServiceTest.php +++ b/test/Unit/User/Service/UserServiceTest.php @@ -6,17 +6,17 @@ use Api\App\Exception\ConflictException; use Api\App\Exception\NotFoundException; -use Api\App\Repository\OAuthAccessTokenRepository; -use Api\App\Repository\OAuthRefreshTokenRepository; -use Api\User\Entity\User; -use Api\User\Entity\UserDetail; -use Api\User\Entity\UserRole; -use Api\User\Enum\UserStatusEnum; -use Api\User\Repository\UserDetailRepository; -use Api\User\Repository\UserRepository; -use Api\User\Repository\UserResetPasswordRepository; use Api\User\Service\UserRoleService; use Api\User\Service\UserService as Subject; +use Core\App\Repository\OAuthAccessTokenRepository; +use Core\App\Repository\OAuthRefreshTokenRepository; +use Core\User\Entity\User; +use Core\User\Entity\UserDetail; +use Core\User\Entity\UserRole; +use Core\User\Enum\UserStatusEnum; +use Core\User\Repository\UserDetailRepository; +use Core\User\Repository\UserRepository; +use Core\User\Repository\UserResetPasswordRepository; use Dot\Log\LoggerInterface; use Dot\Mail\Service\MailService; use Exception;