diff --git a/documentation/Dotkernel_API.postman_collection.json b/documentation/Dotkernel_API.postman_collection.json index 3360a72..595fdba 100644 --- a/documentation/Dotkernel_API.postman_collection.json +++ b/documentation/Dotkernel_API.postman_collection.json @@ -73,7 +73,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"identity\": \"{{$randomUserName}}\",\r\n \"password\": \"dotkernel\",\r\n \"passwordConfirm\": \"dotkernel\",\r\n \"firstName\": \"{{$randomFirstName}}\",\r\n \"lastName\": \"{{$randomLastName}}\",\r\n \"status\": \"active\",\r\n \"roles\": [\r\n {\r\n \"uuid\": \"{{$randomUUID}}\"\r\n }\r\n ]\r\n}", + "raw": "{\r\n \"identity\": \"{{$randomUserName}}\",\r\n \"password\": \"dotkernel\",\r\n \"passwordConfirm\": \"dotkernel\",\r\n \"firstName\": \"{{$randomFirstName}}\",\r\n \"lastName\": \"{{$randomLastName}}\",\r\n \"status\": \"active\",\r\n \"roles\": [\r\n {\r\n \"id\": \"{{$randomUUID}}\"\r\n }\r\n ]\r\n}", "options": { "raw": { "language": "json" @@ -178,7 +178,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"password\": \"dotkernel\",\r\n \"passwordConfirm\": \"dotkernel\",\r\n \"firstName\": \"{{$randomFirstName}}\",\r\n \"lastName\": \"{{$randomLastName}}\",\r\n \"roles\": [\r\n {\r\n \"uuid\": \"{{$randomUUID}}\"\r\n }\r\n ],\r\n \"status\": \"active\"\r\n}", + "raw": "{\r\n \"password\": \"dotkernel\",\r\n \"passwordConfirm\": \"dotkernel\",\r\n \"firstName\": \"{{$randomFirstName}}\",\r\n \"lastName\": \"{{$randomLastName}}\",\r\n \"roles\": [\r\n {\r\n \"id\": \"{{$randomUUID}}\"\r\n }\r\n ],\r\n \"status\": \"active\"\r\n}", "options": { "raw": { "language": "json" @@ -209,7 +209,8 @@ "" ], "type": "text/javascript", - "packages": {} + "packages": {}, + "requests": {} } } ], @@ -1176,7 +1177,9 @@ "exec": [ "" ], - "type": "text/javascript" + "type": "text/javascript", + "packages": {}, + "requests": {} } } ], @@ -1185,7 +1188,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"identity\": \"{{$randomUserName}}\",\r\n \"password\": \"dotkernel\",\r\n \"passwordConfirm\": \"dotkernel\",\r\n \"status\": \"pending\",\r\n \"detail\": {\r\n \"firstName\": \"{{$randomFirstName}}\",\r\n \"lastName\": \"{{$randomLastName}}\",\r\n \"email\": \"{{$randomExampleEmail}}\"\r\n },\r\n \"roles\": [\r\n {\r\n \"uuid\": \"{{$randomUUID}}\"\r\n }\r\n ]\r\n}", + "raw": "{\r\n \"identity\": \"{{$randomUserName}}\",\r\n \"password\": \"dotkernel\",\r\n \"passwordConfirm\": \"dotkernel\",\r\n \"status\": \"pending\",\r\n \"detail\": {\r\n \"firstName\": \"{{$randomFirstName}}\",\r\n \"lastName\": \"{{$randomLastName}}\",\r\n \"email\": \"{{$randomExampleEmail}}\"\r\n },\r\n \"roles\": [\r\n {\r\n \"id\": \"{{$randomUUID}}\"\r\n }\r\n ]\r\n}", "options": { "raw": { "language": "json" @@ -1314,7 +1317,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"password\": \"dotkernel\",\r\n \"passwordConfirm\": \"dotkernel\",\r\n \"status\": \"active\",\r\n \"detail\": {\r\n \"firstName\": \"{{$randomFirstName}}\",\r\n \"lastName\": \"{{$randomLastName}}\",\r\n \"email\": \"{{$randomExampleEmail}}\"\r\n },\r\n \"roles\": [\r\n {\r\n \"uuid\": \"{{$randomUUID}}\"\r\n }\r\n ]\r\n}", + "raw": "{\r\n \"password\": \"dotkernel\",\r\n \"passwordConfirm\": \"dotkernel\",\r\n \"status\": \"active\",\r\n \"detail\": {\r\n \"firstName\": \"{{$randomFirstName}}\",\r\n \"lastName\": \"{{$randomLastName}}\",\r\n \"email\": \"{{$randomExampleEmail}}\"\r\n },\r\n \"roles\": [\r\n {\r\n \"id\": \"{{$randomUUID}}\"\r\n }\r\n ]\r\n}", "options": { "raw": { "language": "json" diff --git a/src/Admin/src/Command/AdminCreateCommand.php b/src/Admin/src/Command/AdminCreateCommand.php index 7e9010e..d251e80 100644 --- a/src/Admin/src/Command/AdminCreateCommand.php +++ b/src/Admin/src/Command/AdminCreateCommand.php @@ -99,7 +99,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int * firstName: string, * lastName: string, * status: 'active', - * roles: array{uuid: non-empty-string}[], + * roles: array{id: non-empty-string}[], * } * @throws Exception */ @@ -118,7 +118,7 @@ private function getData(InputInterface $input): array 'lastName' => trim($input->getOption('lastName')), 'status' => AdminStatusEnum::Active->value, 'roles' => [ - ['uuid' => $adminRole->getUuid()->toString()], + ['id' => $adminRole->getId()->toString()], ], ]; } diff --git a/src/Admin/src/InputFilter/AdminRoleInputFilter.php b/src/Admin/src/InputFilter/AdminRoleInputFilter.php index 2e1c962..82c10f0 100644 --- a/src/Admin/src/InputFilter/AdminRoleInputFilter.php +++ b/src/Admin/src/InputFilter/AdminRoleInputFilter.php @@ -9,7 +9,7 @@ /** * @phpstan-type AdminRoleDataType array{ - * uuid: non-empty-string, + * id: non-empty-string, * } * @extends AbstractInputFilter */ @@ -17,6 +17,6 @@ class AdminRoleInputFilter extends AbstractInputFilter { public function __construct() { - $this->add(new UuidInput('uuid')); + $this->add(new UuidInput('id')); } } diff --git a/src/Admin/src/OpenAPI.php b/src/Admin/src/OpenAPI.php index 4207cea..7ceb480 100644 --- a/src/Admin/src/OpenAPI.php +++ b/src/Admin/src/OpenAPI.php @@ -118,9 +118,9 @@ property: 'roles', type: 'array', items: new OA\Items( - required: ['uuid'], + required: ['id'], properties: [ - new OA\Property(property: 'uuid', type: 'string'), + new OA\Property(property: 'id', type: 'string'), ], ), ), @@ -157,15 +157,15 @@ * @see DeleteAdminResourceHandler::handle() */ #[OA\Delete( - path: '/admin/{uuid}', - description: 'Authenticated (super)admin deletes an admin account identified by its UUID', + path: '/admin/{id}', + description: 'Authenticated (super)admin deletes an admin account identified by its id', summary: 'Admin deletes an admin account', security: [['AuthToken' => []]], tags: ['Admin'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'Admin UUID', + name: 'id', + description: 'Admin id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -187,15 +187,15 @@ * @see GetAdminResourceHandler::handle() */ #[OA\Get( - path: '/admin/{uuid}', - description: 'Authenticated (super)admin fetches an admin account identified by its UUID', + path: '/admin/{id}', + description: 'Authenticated (super)admin fetches an admin account identified by its id', summary: 'Admin fetches an admin account', security: [['AuthToken' => []]], tags: ['Admin'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'Admin UUID', + name: 'id', + description: 'Admin id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -218,7 +218,7 @@ * @see PatchAdminResourceHandler::handle() */ #[OA\Patch( - path: '/admin/{uuid}', + path: '/admin/{id}', description: 'Authenticated (super)admin updates an existing admin account', summary: 'Admin updates an admin account', security: [['AuthToken' => []]], @@ -236,9 +236,9 @@ property: 'roles', type: 'array', items: new OA\Items( - required: ['uuid'], + required: ['id'], properties: [ - new OA\Property(property: 'uuid', type: 'string'), + new OA\Property(property: 'id', type: 'string'), ], ), ), @@ -249,8 +249,8 @@ tags: ['Admin'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'Admin UUID', + name: 'id', + description: 'Admin id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -352,15 +352,15 @@ * @see GetAdminRoleResourceHandler::handle() */ #[OA\Get( - path: '/admin/role/{uuid}', - description: 'Authenticated (super)admin fetches an admin role identified by its UUID', + path: '/admin/role/{id}', + description: 'Authenticated (super)admin fetches an admin role identified by its id', summary: 'Admin fetches an admin role', security: [['AuthToken' => []]], tags: ['AdminRole'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'Admin role UUID', + name: 'id', + description: 'Admin role id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -418,9 +418,9 @@ property: 'roles', type: 'array', items: new OA\Items( - required: ['uuid'], + required: ['id'], properties: [ - new OA\Property(property: 'uuid', type: 'string'), + new OA\Property(property: 'id', type: 'string'), ], ), ), @@ -444,7 +444,7 @@ #[OA\Schema( schema: 'Admin', properties: [ - new OA\Property(property: 'uuid', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), + new OA\Property(property: 'id', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), new OA\Property(property: 'identity', type: 'string'), new OA\Property(property: 'firstName', type: 'string'), new OA\Property(property: 'lastName', type: 'string'), @@ -454,7 +454,7 @@ type: 'array', items: new OA\Items( properties: [ - new OA\Property(property: 'uuid', type: 'string'), + new OA\Property(property: 'id', type: 'string'), new OA\Property(property: 'name', type: 'string', example: AdminRoleEnum::Admin->value), ], type: 'object', @@ -489,7 +489,7 @@ #[OA\Schema( schema: 'AdminRole', properties: [ - new OA\Property(property: 'uuid', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), + new OA\Property(property: 'id', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), new OA\Property(property: 'name', type: 'string', example: AdminRoleEnum::Admin->value), new OA\Property( property: '_links', diff --git a/src/Admin/src/RoutesDelegator.php b/src/Admin/src/RoutesDelegator.php index 35a6e75..fbcce60 100644 --- a/src/Admin/src/RoutesDelegator.php +++ b/src/Admin/src/RoutesDelegator.php @@ -28,7 +28,7 @@ class RoutesDelegator */ public function __invoke(ContainerInterface $container, string $serviceName, callable $callback): Application { - $uuid = ConfigProvider::REGEXP_UUID; + $id = ConfigProvider::REGEXP_UUID; /** @var RouteCollectorInterface $routeCollector */ $routeCollector = $container->get(RouteCollectorInterface::class); @@ -37,14 +37,14 @@ public function __invoke(ContainerInterface $container, string $serviceName, cal ->get('', GetAdminCollectionHandler::class, 'admin::list-admin') ->post('', PostAdminResourceHandler::class, 'admin::create-admin'); - $routeCollector->group('/admin/' . $uuid) + $routeCollector->group('/admin/' . $id) ->delete('', DeleteAdminResourceHandler::class, 'admin::delete-admin') ->get('', GetAdminResourceHandler::class, 'admin::view-admin') ->patch('', PatchAdminResourceHandler::class, 'admin::update-admin'); $routeCollector->group('/admin/role') ->get('', GetAdminRoleCollectionHandler::class, 'admin::list-role') - ->get('/' . $uuid, GetAdminRoleResourceHandler::class, 'admin::view-role'); + ->get('/' . $id, GetAdminRoleResourceHandler::class, 'admin::view-role'); $routeCollector->group('/admin/account') ->get('', GetAdminAccountResourceHandler::class, 'admin::view-account') diff --git a/src/Admin/src/Service/AdminService.php b/src/Admin/src/Service/AdminService.php index 8864b6e..24b33cc 100644 --- a/src/Admin/src/Service/AdminService.php +++ b/src/Admin/src/Service/AdminService.php @@ -47,9 +47,9 @@ public function deleteAdmin(Admin $admin): void /** * @throws NotFoundException */ - public function findAdmin(string $uuid): Admin + public function findAdmin(string $id): Admin { - $admin = $this->adminRepository->find($uuid); + $admin = $this->adminRepository->find($id); if (! $admin instanceof Admin) { throw NotFoundException::create(Message::ADMIN_NOT_FOUND); } @@ -119,12 +119,12 @@ public function saveAdmin(array $data, ?Admin $admin = null): Admin $admin->setStatus($status); } - $this->validateUniqueAdmin((string) $admin->getIdentity(), $admin->getUuid()); + $this->validateUniqueAdmin((string) $admin->getIdentity(), $admin->getId()); if (array_key_exists('roles', $data) && count($data['roles']) > 0) { $admin->resetRoles(); foreach ($data['roles'] as $roleData) { - $adminRole = $this->adminRoleRepository->find($roleData['uuid']); + $adminRole = $this->adminRoleRepository->find($roleData['id']); if (! $adminRole instanceof AdminRole) { throw NotFoundException::create(Message::ROLE_NOT_FOUND); } @@ -144,14 +144,14 @@ public function saveAdmin(array $data, ?Admin $admin = null): Admin /** * @throws ConflictException */ - public function validateUniqueAdmin(string $identity, ?UuidInterface $uuid = null): void + public function validateUniqueAdmin(string $identity, ?UuidInterface $id = null): void { $admin = $this->adminRepository->findOneBy(['identity' => $identity]); if ($admin instanceof Admin) { - if ($uuid === null) { + if ($id === null) { throw ConflictException::create(Message::DUPLICATE_IDENTITY); } - if ($admin->getUuid()->toString() !== $uuid->toString()) { + if (! $admin->getId()->equals($id)) { throw ConflictException::create(Message::DUPLICATE_IDENTITY); } } diff --git a/src/Admin/src/Service/AdminServiceInterface.php b/src/Admin/src/Service/AdminServiceInterface.php index 42e01ac..b721a76 100644 --- a/src/Admin/src/Service/AdminServiceInterface.php +++ b/src/Admin/src/Service/AdminServiceInterface.php @@ -20,7 +20,7 @@ public function deleteAdmin(Admin $admin): void; /** * @throws NotFoundException */ - public function findAdmin(string $uuid): Admin; + public function findAdmin(string $id): Admin; /** * @param array $params diff --git a/src/App/src/Attribute/Resource.php b/src/App/src/Attribute/Resource.php index 7fef438..7ca0e8a 100644 --- a/src/App/src/Attribute/Resource.php +++ b/src/App/src/Attribute/Resource.php @@ -18,8 +18,8 @@ */ public function __construct( public string $entity, - public string $identifier = 'uuid', - public string $placeholder = 'uuid', + public string $identifier = 'id', + public string $placeholder = 'id', public ?string $guard = null, ) { } diff --git a/src/App/src/ConfigProvider.php b/src/App/src/ConfigProvider.php index 31504d0..77ef179 100644 --- a/src/App/src/ConfigProvider.php +++ b/src/App/src/ConfigProvider.php @@ -127,8 +127,8 @@ public static function getCollection(string $collectionClass, string $route, str public static function getResource( string $resourceClass, string $route, - string $resourceIdentifier = 'uuid', - string $resourceIdentifierPlaceholder = 'uuid' + string $resourceIdentifier = 'id', + string $resourceIdentifierPlaceholder = 'id' ): array { return [ '__class__' => RouteBasedResourceMetadata::class, diff --git a/src/Core/src/Admin/src/Entity/Admin.php b/src/Core/src/Admin/src/Entity/Admin.php index cb2bd08..b9badb8 100644 --- a/src/Core/src/Admin/src/Entity/Admin.php +++ b/src/Core/src/Admin/src/Entity/Admin.php @@ -10,6 +10,7 @@ use Core\App\Entity\PasswordTrait; use Core\App\Entity\RoleInterface; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Core\Setting\Entity\Setting; use DateTimeImmutable; use Doctrine\Common\Collections\ArrayCollection; @@ -29,6 +30,7 @@ class Admin extends AbstractEntity implements UserEntityInterface { use PasswordTrait; use TimestampsTrait; + use UuidIdentifierTrait; /** @var non-empty-string|null $identity */ #[ORM\Column(name: 'identity', type: 'string', length: 191, unique: true)] @@ -53,8 +55,8 @@ enumType: AdminStatusEnum::class, /** @var Collection $roles */ #[ORM\ManyToMany(targetEntity: AdminRole::class)] #[ORM\JoinTable(name: 'admin_roles')] - #[ORM\JoinColumn(name: 'userUuid', referencedColumnName: 'uuid')] - #[ORM\InverseJoinColumn(name: 'roleUuid', referencedColumnName: 'uuid')] + #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')] + #[ORM\InverseJoinColumn(name: 'role_id', referencedColumnName: 'id')] protected Collection $roles; /** @var Collection $settings */ @@ -65,7 +67,6 @@ public function __construct() { parent::__construct(); - $this->created(); $this->roles = new ArrayCollection(); $this->settings = new ArrayCollection(); } @@ -219,7 +220,7 @@ public function getIdentifier(): string /** * @return array{ - * uuid: non-empty-string, + * id: non-empty-string, * identity: non-empty-string|null, * firstName: string|null, * lastName: string|null, @@ -232,7 +233,7 @@ public function getIdentifier(): string public function getArrayCopy(): array { return [ - 'uuid' => $this->uuid->toString(), + 'id' => $this->id->toString(), 'identity' => $this->identity, 'firstName' => $this->firstName, 'lastName' => $this->lastName, diff --git a/src/Core/src/Admin/src/Entity/AdminIdentity.php b/src/Core/src/Admin/src/Entity/AdminIdentity.php index dc3f50d..27559b1 100644 --- a/src/Core/src/Admin/src/Entity/AdminIdentity.php +++ b/src/Core/src/Admin/src/Entity/AdminIdentity.php @@ -14,7 +14,7 @@ class AdminIdentity implements UserInterface * @param array $details */ public function __construct( - public string $uuid, + public string $id, public string $identity, public AdminStatusEnum $status, public array $roles = [], @@ -22,9 +22,9 @@ public function __construct( ) { } - public function getUuid(): string + public function getId(): string { - return $this->uuid; + return $this->id; } public function getIdentity(): string diff --git a/src/Core/src/Admin/src/Entity/AdminLogin.php b/src/Core/src/Admin/src/Entity/AdminLogin.php index 46b1790..870ddcf 100644 --- a/src/Core/src/Admin/src/Entity/AdminLogin.php +++ b/src/Core/src/Admin/src/Entity/AdminLogin.php @@ -7,6 +7,7 @@ use Core\Admin\Repository\AdminLoginRepository; use Core\App\Entity\AbstractEntity; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Core\App\Enum\SuccessFailureEnum; use Core\App\Enum\YesNoEnum; use DateTimeImmutable; @@ -18,6 +19,7 @@ class AdminLogin extends AbstractEntity { use TimestampsTrait; + use UuidIdentifierTrait; #[ORM\Column(name: 'identity', type: 'string', length: 191, nullable: true)] protected ?string $identity = null; @@ -70,13 +72,6 @@ class AdminLogin extends AbstractEntity #[ORM\Column(type: 'success_failure_enum', nullable: true, enumType: SuccessFailureEnum::class)] protected SuccessFailureEnum $loginStatus = SuccessFailureEnum::Fail; - public function __construct() - { - parent::__construct(); - - $this->created(); - } - public function getIdentity(): ?string { return $this->identity; @@ -283,7 +278,7 @@ public function setLoginStatus(SuccessFailureEnum $loginStatus): self /** * @return array{ - * uuid: non-empty-string, + * id: non-empty-string, * identity: string|null, * adminIp: string|null, * country: string|null, @@ -308,7 +303,7 @@ public function setLoginStatus(SuccessFailureEnum $loginStatus): self public function getArrayCopy(): array { return [ - 'uuid' => $this->uuid->toString(), + 'id' => $this->id->toString(), 'identity' => $this->identity, 'adminIp' => $this->adminIp, 'country' => $this->country, diff --git a/src/Core/src/Admin/src/Entity/AdminRole.php b/src/Core/src/Admin/src/Entity/AdminRole.php index fb36102..d26fab0 100644 --- a/src/Core/src/Admin/src/Entity/AdminRole.php +++ b/src/Core/src/Admin/src/Entity/AdminRole.php @@ -10,6 +10,7 @@ use Core\App\Entity\AbstractEntity; use Core\App\Entity\RoleInterface; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Doctrine\ORM\Mapping as ORM; /** @@ -21,6 +22,7 @@ class AdminRole extends AbstractEntity implements RoleInterface { use TimestampsTrait; + use UuidIdentifierTrait; #[ORM\Column( name: 'name', @@ -31,13 +33,6 @@ enumType: AdminRoleEnum::class, )] protected AdminRoleEnum $name = AdminRoleEnum::Admin; - public function __construct() - { - parent::__construct(); - - $this->created(); - } - public function getName(): AdminRoleEnum { return $this->name; @@ -59,7 +54,7 @@ public function setName(BackedEnum $name): self public function getArrayCopy(): array { return [ - 'uuid' => $this->uuid->toString(), + 'id' => $this->id->toString(), 'name' => $this->name->value, 'created' => $this->created, 'updated' => $this->updated, diff --git a/src/Core/src/Admin/src/Repository/AdminRepository.php b/src/Core/src/Admin/src/Repository/AdminRepository.php index f366ac5..d700264 100644 --- a/src/Core/src/Admin/src/Repository/AdminRepository.php +++ b/src/Core/src/Admin/src/Repository/AdminRepository.php @@ -60,7 +60,7 @@ public function getAdmins(array $params = [], array $filters = []): QueryBuilder ->orderBy($params['sort'], $params['dir']) ->setFirstResult($params['offset']) ->setMaxResults($params['limit']) - ->groupBy('admin.uuid'); + ->groupBy('admin.id'); $queryBuilder->getQuery()->useQueryCache(true); return $queryBuilder; diff --git a/src/Core/src/App/src/Command/RouteListCommand.php b/src/Core/src/App/src/Command/RouteListCommand.php index d399ed5..95133ec 100644 --- a/src/Core/src/App/src/Command/RouteListCommand.php +++ b/src/Core/src/App/src/Command/RouteListCommand.php @@ -101,7 +101,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int str_pad((string) $index++, 4, ' ', STR_PAD_LEFT), $route['method'], $route['name'], - str_replace(ConfigProvider::REGEXP_UUID, '{uuid}', $route['path']), + str_replace(ConfigProvider::REGEXP_UUID, '{id}', $route['path']), ]); } $table->render(); diff --git a/src/Core/src/App/src/ConfigProvider.php b/src/Core/src/App/src/ConfigProvider.php index 918ac03..e19f4bf 100644 --- a/src/Core/src/App/src/ConfigProvider.php +++ b/src/Core/src/App/src/ConfigProvider.php @@ -6,6 +6,7 @@ use Core\App\Command\RouteListCommand; use Core\App\DBAL\Types\SuccessFailureEnumType; +use Core\App\DBAL\Types\UuidType; use Core\App\DBAL\Types\YesNoEnumType; use Core\App\Event\TablePrefixEventListener; use Core\App\Factory\EntityListenerResolverFactory; @@ -26,9 +27,6 @@ use Dot\Mail\Factory\MailServiceAbstractFactory; use Dot\Mail\Service\MailService as DotMailService; use Mezzio\Application; -use Ramsey\Uuid\Doctrine\UuidBinaryOrderedTimeType; -use Ramsey\Uuid\Doctrine\UuidBinaryType; -use Ramsey\Uuid\Doctrine\UuidType; use Roave\PsrContainerDoctrine\EntityManagerFactory; use Symfony\Component\Cache\Adapter\AdapterInterface; @@ -68,11 +66,6 @@ * }, * }, * }, - * connection: array{ - * orm_default: array{ - * doctrine_mapping_types: array, - * }, - * }, * driver: array{ * orm_default: array{ * class: class-string, @@ -100,7 +93,7 @@ */ class ConfigProvider { - public const REGEXP_UUID = '{uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}}'; + public const REGEXP_UUID = '{id:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}}'; /** * @return ConfigType @@ -174,14 +167,6 @@ private function getDoctrineConfig(): array ], ], ], - 'connection' => [ - 'orm_default' => [ - 'doctrine_mapping_types' => [ - UuidBinaryType::NAME => 'binary', - UuidBinaryOrderedTimeType::NAME => 'binary', - ], - ], - ], 'driver' => [ // The default metadata driver aggregates all other drivers into a single one. // Override `orm_default` only if you know what you're doing. @@ -205,11 +190,9 @@ private function getDoctrineConfig(): array 'check_database_platform' => true, ], 'types' => [ - UuidType::NAME => UuidType::class, - UuidBinaryType::NAME => UuidBinaryType::class, - UuidBinaryOrderedTimeType::NAME => UuidBinaryOrderedTimeType::class, - SuccessFailureEnumType::NAME => SuccessFailureEnumType::class, - YesNoEnumType::NAME => YesNoEnumType::class, + UuidType::NAME => UuidType::class, + SuccessFailureEnumType::NAME => SuccessFailureEnumType::class, + YesNoEnumType::NAME => YesNoEnumType::class, ], ]; } diff --git a/src/Core/src/App/src/DBAL/Types/UuidType.php b/src/Core/src/App/src/DBAL/Types/UuidType.php new file mode 100644 index 0000000..852e1d2 --- /dev/null +++ b/src/Core/src/App/src/DBAL/Types/UuidType.php @@ -0,0 +1,17 @@ +uuid = Uuid::uuid7(); + $this->initId(); } - public function getUuid(): UuidInterface + protected function initId(): void { - return $this->uuid; } /** diff --git a/src/Core/src/App/src/Entity/EntityInterface.php b/src/Core/src/App/src/Entity/EntityInterface.php index 80ce609..3b37b86 100644 --- a/src/Core/src/App/src/Entity/EntityInterface.php +++ b/src/Core/src/App/src/Entity/EntityInterface.php @@ -9,7 +9,7 @@ interface EntityInterface { - public function getUuid(): UuidInterface; + public function getId(): UuidInterface; public function getCreated(): ?DateTimeImmutable; diff --git a/src/Core/src/App/src/Entity/NumericIdentifierTrait.php b/src/Core/src/App/src/Entity/NumericIdentifierTrait.php new file mode 100644 index 0000000..54fb41a --- /dev/null +++ b/src/Core/src/App/src/Entity/NumericIdentifierTrait.php @@ -0,0 +1,27 @@ + true])] + #[ORM\GeneratedValue(strategy: 'AUTO')] + protected ?int $id; + + public function getId(): ?int + { + return $this->id; + } + + public function setId(int $id): static + { + $this->id = $id; + + return $this; + } +} diff --git a/src/Core/src/App/src/Entity/RoleInterface.php b/src/Core/src/App/src/Entity/RoleInterface.php index 2a2e138..7c2c601 100644 --- a/src/Core/src/App/src/Entity/RoleInterface.php +++ b/src/Core/src/App/src/Entity/RoleInterface.php @@ -9,7 +9,7 @@ /** * @phpstan-type RoleType array{ - * uuid: non-empty-string, + * id: non-empty-string, * name: non-empty-string, * created: DateTimeImmutable, * updated: DateTimeImmutable|null diff --git a/src/Core/src/App/src/Entity/UuidIdentifierTrait.php b/src/Core/src/App/src/Entity/UuidIdentifierTrait.php new file mode 100644 index 0000000..9e6f2ef --- /dev/null +++ b/src/Core/src/App/src/Entity/UuidIdentifierTrait.php @@ -0,0 +1,33 @@ +id; + } + + public function setId(UuidInterface $id): static + { + $this->id = $id; + + return $this; + } + + protected function initId(): void + { + $this->id = Uuid::uuid7(); + } +} diff --git a/src/Core/src/Security/src/Entity/OAuthAccessToken.php b/src/Core/src/Security/src/Entity/OAuthAccessToken.php index efb6f28..db7af22 100644 --- a/src/Core/src/Security/src/Entity/OAuthAccessToken.php +++ b/src/Core/src/Security/src/Entity/OAuthAccessToken.php @@ -4,6 +4,7 @@ namespace Core\Security\Entity; +use Core\App\Entity\NumericIdentifierTrait; use Core\Security\Repository\OAuthAccessTokenRepository; use DateTimeImmutable; use Doctrine\Common\Collections\ArrayCollection; @@ -26,10 +27,7 @@ #[ORM\Table(name: 'oauth_access_tokens')] class OAuthAccessToken implements AccessTokenEntityInterface { - #[ORM\Id] - #[ORM\Column(name: 'id', type: 'integer', options: ['unsigned' => true])] - #[ORM\GeneratedValue(strategy: 'IDENTITY')] - private int $id; + use NumericIdentifierTrait; #[ORM\ManyToOne(targetEntity: OAuthClient::class)] #[ORM\JoinColumn(name: 'client_id', referencedColumnName: 'id')] @@ -64,18 +62,6 @@ public function __construct() $this->scopes = new ArrayCollection(); } - public function setId(int $id): self - { - $this->id = $id; - - return $this; - } - - public function getId(): ?int - { - return $this->id; - } - public function setClient(ClientEntityInterface $client): self { $this->client = $client; diff --git a/src/Core/src/Security/src/Entity/OAuthAuthCode.php b/src/Core/src/Security/src/Entity/OAuthAuthCode.php index 72369c2..2b184ea 100644 --- a/src/Core/src/Security/src/Entity/OAuthAuthCode.php +++ b/src/Core/src/Security/src/Entity/OAuthAuthCode.php @@ -4,6 +4,7 @@ namespace Core\Security\Entity; +use Core\App\Entity\NumericIdentifierTrait; use Core\Security\Repository\OAuthAuthCodeRepository; use DateTimeImmutable; use Doctrine\Common\Collections\ArrayCollection; @@ -22,11 +23,7 @@ class OAuthAuthCode implements AuthCodeEntityInterface { use AuthCodeTrait; - - #[ORM\Id] - #[ORM\Column(name: 'id', type: 'integer', options: ['unsigned' => true])] - #[ORM\GeneratedValue(strategy: 'IDENTITY')] - private int $id; + use NumericIdentifierTrait; #[ORM\ManyToOne(targetEntity: OAuthClient::class)] #[ORM\JoinColumn(name: 'client_id', referencedColumnName: 'id')] @@ -51,18 +48,6 @@ public function __construct() $this->scopes = new ArrayCollection(); } - public function setId(int $id): self - { - $this->id = $id; - - return $this; - } - - public function getId(): int - { - return $this->id; - } - public function setClient(ClientEntityInterface $client): self { $this->client = $client; diff --git a/src/Core/src/Security/src/Entity/OAuthClient.php b/src/Core/src/Security/src/Entity/OAuthClient.php index a2b4da3..a52ace1 100644 --- a/src/Core/src/Security/src/Entity/OAuthClient.php +++ b/src/Core/src/Security/src/Entity/OAuthClient.php @@ -4,6 +4,7 @@ namespace Core\Security\Entity; +use Core\App\Entity\NumericIdentifierTrait; use Core\Security\Repository\OAuthClientRepository; use Core\User\Entity\User; use Doctrine\ORM\Mapping as ORM; @@ -13,16 +14,13 @@ #[ORM\Table(name: 'oauth_clients')] class OAuthClient implements ClientEntityInterface { + use NumericIdentifierTrait; + public const NAME_ADMIN = 'admin'; public const NAME_FRONTEND = 'frontend'; - #[ORM\Id] - #[ORM\Column(name: 'id', type: 'integer', options: ['unsigned' => true])] - #[ORM\GeneratedValue(strategy: 'IDENTITY')] - private int $id; - #[ORM\ManyToOne(targetEntity: User::class)] - #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'uuid', nullable: true)] + #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: true)] private ?User $user = null; #[ORM\Column(name: 'name', type: 'string', length: 40)] @@ -40,18 +38,6 @@ class OAuthClient implements ClientEntityInterface #[ORM\Column(name: 'isConfidential', type: 'boolean', options: ['default' => false])] private bool $isConfidential = false; - public function setId(int $id): self - { - $this->id = $id; - - return $this; - } - - public function getId(): ?int - { - return $this->id; - } - public function setUser(?User $user = null): self { $this->user = $user; diff --git a/src/Core/src/Security/src/Entity/OAuthRefreshToken.php b/src/Core/src/Security/src/Entity/OAuthRefreshToken.php index db0ba61..ae6dc16 100644 --- a/src/Core/src/Security/src/Entity/OAuthRefreshToken.php +++ b/src/Core/src/Security/src/Entity/OAuthRefreshToken.php @@ -4,6 +4,7 @@ namespace Core\Security\Entity; +use Core\App\Entity\NumericIdentifierTrait; use Core\Security\Repository\OAuthRefreshTokenRepository; use DateTimeImmutable; use Doctrine\ORM\Mapping as ORM; @@ -14,10 +15,7 @@ #[ORM\Table(name: 'oauth_refresh_tokens')] class OAuthRefreshToken implements RefreshTokenEntityInterface { - #[ORM\Id] - #[ORM\Column(name: 'id', type: 'integer', options: ['unsigned' => true])] - #[ORM\GeneratedValue(strategy: 'IDENTITY')] - private int $id; + use NumericIdentifierTrait; #[ORM\ManyToOne(targetEntity: OAuthAccessToken::class)] #[ORM\JoinColumn(name: 'access_token_id', referencedColumnName: 'id')] @@ -29,18 +27,6 @@ class OAuthRefreshToken implements RefreshTokenEntityInterface #[ORM\Column(name: 'expires_at', type: 'datetime_immutable')] private DateTimeImmutable $expiresAt; - public function setId(int $id): self - { - $this->id = $id; - - return $this; - } - - public function getId(): ?int - { - return $this->id; - } - public function getIdentifier(): string { return (string) $this->getId(); @@ -48,8 +34,6 @@ public function getIdentifier(): string public function setIdentifier(mixed $identifier): self { - $this->setId((int) $identifier); - return $this; } diff --git a/src/Core/src/Security/src/Entity/OAuthScope.php b/src/Core/src/Security/src/Entity/OAuthScope.php index f90e52f..9afe161 100644 --- a/src/Core/src/Security/src/Entity/OAuthScope.php +++ b/src/Core/src/Security/src/Entity/OAuthScope.php @@ -4,6 +4,7 @@ namespace Core\Security\Entity; +use Core\App\Entity\NumericIdentifierTrait; use Core\Security\Repository\OAuthScopeRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; @@ -18,13 +19,9 @@ #[ORM\Table(name: 'oauth_scopes')] class OAuthScope implements ScopeEntityInterface { + use NumericIdentifierTrait; use ScopeTrait; - #[ORM\Id] - #[ORM\Column(name: 'id', type: 'integer', options: ['unsigned' => true])] - #[ORM\GeneratedValue(strategy: 'IDENTITY')] - private int $id; - #[ORM\Column(name: 'scope', type: 'string', length: 191)] private string $scope = ''; @@ -42,18 +39,6 @@ public function __construct() $this->authCodes = new ArrayCollection(); } - public function setId(int $id): self - { - $this->id = $id; - - return $this; - } - - public function getId(): ?int - { - return $this->id; - } - public function getIdentifier(): string { return $this->getScope(); diff --git a/src/Core/src/Setting/src/Entity/Setting.php b/src/Core/src/Setting/src/Entity/Setting.php index c24b92b..c99960a 100644 --- a/src/Core/src/Setting/src/Entity/Setting.php +++ b/src/Core/src/Setting/src/Entity/Setting.php @@ -7,6 +7,7 @@ use Core\Admin\Entity\Admin; use Core\App\Entity\AbstractEntity; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Core\Setting\Enum\SettingIdentifierEnum; use Core\Setting\Repository\SettingRepository; use Doctrine\ORM\Mapping as ORM; @@ -22,9 +23,10 @@ class Setting extends AbstractEntity { use TimestampsTrait; + use UuidIdentifierTrait; #[ORM\ManyToOne(targetEntity: Admin::class, inversedBy: 'settings')] - #[ORM\JoinColumn(name: 'admin_uuid', referencedColumnName: 'uuid')] + #[ORM\JoinColumn(name: 'admin_id', referencedColumnName: 'id')] protected ?Admin $admin = null; #[ORM\Column(type: 'setting_enum', enumType: SettingIdentifierEnum::class)] diff --git a/src/Core/src/User/src/Entity/User.php b/src/Core/src/User/src/Entity/User.php index 69a91c3..0f3ba32 100644 --- a/src/Core/src/User/src/Entity/User.php +++ b/src/Core/src/User/src/Entity/User.php @@ -8,6 +8,7 @@ use Core\App\Entity\PasswordTrait; use Core\App\Entity\RoleInterface; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Core\User\Enum\UserStatusEnum; use Core\User\Repository\UserRepository; use DateTimeImmutable; @@ -28,12 +29,13 @@ * @phpstan-import-type RoleType from RoleInterface */ #[ORM\Entity(repositoryClass: UserRepository::class)] -#[ORM\Table(name: 'user')] +#[ORM\Table(name: '`user`')] #[ORM\HasLifecycleCallbacks] class User extends AbstractEntity implements UserEntityInterface { use PasswordTrait; use TimestampsTrait; + use UuidIdentifierTrait; #[ORM\OneToOne(targetEntity: UserAvatar::class, mappedBy: 'user', cascade: ['persist', 'remove'])] protected ?UserAvatar $avatar = null; @@ -48,8 +50,8 @@ class User extends AbstractEntity implements UserEntityInterface /** @var Collection */ #[ORM\ManyToMany(targetEntity: UserRole::class)] #[ORM\JoinTable(name: 'user_roles')] - #[ORM\JoinColumn(name: 'userUuid', referencedColumnName: 'uuid')] - #[ORM\InverseJoinColumn(name: 'roleUuid', referencedColumnName: 'uuid')] + #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')] + #[ORM\InverseJoinColumn(name: 'role_id', referencedColumnName: 'id')] protected Collection $roles; /** @var non-empty-string|null $identity */ @@ -78,7 +80,6 @@ public function __construct() $this->roles = new ArrayCollection(); $this->resetPasswords = new ArrayCollection(); - $this->created(); $this->renewHash(); } @@ -340,7 +341,7 @@ public function hasRoles(): bool /** * @return array{ - * uuid: non-empty-string, + * id: non-empty-string, * avatar: UserAvatarType|null, * detail: UserDetailType|null, * hash: non-empty-string, @@ -354,7 +355,7 @@ public function hasRoles(): bool public function getArrayCopy(): array { return [ - 'uuid' => $this->uuid->toString(), + 'id' => $this->id->toString(), 'avatar' => $this->avatar?->getArrayCopy(), 'detail' => $this->detail?->getArrayCopy(), 'hash' => $this->hash, diff --git a/src/Core/src/User/src/Entity/UserAvatar.php b/src/Core/src/User/src/Entity/UserAvatar.php index 7edf86b..ad37e16 100644 --- a/src/Core/src/User/src/Entity/UserAvatar.php +++ b/src/Core/src/User/src/Entity/UserAvatar.php @@ -6,6 +6,7 @@ use Core\App\Entity\AbstractEntity; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Core\User\EventListener\UserAvatarEventListener; use Core\User\Repository\UserAvatarRepository; use DateTimeImmutable; @@ -13,7 +14,7 @@ /** * @phpstan-type UserAvatarType array{ - * uuid: non-empty-string, + * id: non-empty-string, * url: non-empty-string|null, * created: DateTimeImmutable, * updated: DateTimeImmutable|null @@ -26,9 +27,10 @@ class UserAvatar extends AbstractEntity { use TimestampsTrait; + use UuidIdentifierTrait; #[ORM\OneToOne(targetEntity: User::class, inversedBy: 'avatar')] - #[ORM\JoinColumn(name: 'userUuid', referencedColumnName: 'uuid')] + #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')] protected ?User $user = null; #[ORM\Column(name: 'name', type: 'string', length: 191)] @@ -37,13 +39,6 @@ class UserAvatar extends AbstractEntity /** @var non-empty-string|null $url */ protected ?string $url = null; - public function __construct() - { - parent::__construct(); - - $this->created(); - } - public function getUser(): ?User { return $this->user; @@ -89,7 +84,7 @@ public function setUrl(string $url): self public function getArrayCopy(): array { return [ - 'uuid' => $this->uuid->toString(), + 'id' => $this->id->toString(), 'url' => $this->url, 'created' => $this->created, 'updated' => $this->updated, diff --git a/src/Core/src/User/src/Entity/UserDetail.php b/src/Core/src/User/src/Entity/UserDetail.php index 16e0d9d..a7ecfd6 100644 --- a/src/Core/src/User/src/Entity/UserDetail.php +++ b/src/Core/src/User/src/Entity/UserDetail.php @@ -6,13 +6,14 @@ use Core\App\Entity\AbstractEntity; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Core\User\Repository\UserDetailRepository; use DateTimeImmutable; use Doctrine\ORM\Mapping as ORM; /** * @phpstan-type UserDetailType array{ - * uuid: non-empty-string, + * id: non-empty-string, * firstName: non-empty-string|null, * lastName: non-empty-string|null, * email: non-empty-string|null, @@ -26,9 +27,10 @@ class UserDetail extends AbstractEntity { use TimestampsTrait; + use UuidIdentifierTrait; #[ORM\OneToOne(targetEntity: User::class, inversedBy: 'detail')] - #[ORM\JoinColumn(name: 'userUuid', referencedColumnName: 'uuid')] + #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')] protected ?User $user = null; /** @var non-empty-string|null $firstName */ @@ -43,13 +45,6 @@ class UserDetail extends AbstractEntity #[ORM\Column(name: 'email', type: 'string', length: 191)] protected ?string $email = null; - public function __construct() - { - parent::__construct(); - - $this->created(); - } - public function getUser(): ?User { return $this->user; @@ -118,7 +113,7 @@ public function setEmail(string $email): self public function getArrayCopy(): array { return [ - 'uuid' => $this->uuid->toString(), + 'id' => $this->id->toString(), 'firstName' => $this->firstName, 'lastName' => $this->lastName, 'email' => $this->email, diff --git a/src/Core/src/User/src/Entity/UserResetPassword.php b/src/Core/src/User/src/Entity/UserResetPassword.php index 41ab84a..9ad4507 100644 --- a/src/Core/src/User/src/Entity/UserResetPassword.php +++ b/src/Core/src/User/src/Entity/UserResetPassword.php @@ -6,6 +6,7 @@ use Core\App\Entity\AbstractEntity; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Core\User\Enum\UserResetPasswordStatusEnum; use Core\User\Repository\UserResetPasswordRepository; use DateInterval; @@ -20,9 +21,10 @@ class UserResetPassword extends AbstractEntity { use TimestampsTrait; + use UuidIdentifierTrait; #[ORM\ManyToOne(targetEntity: User::class, cascade: ['persist', 'remove'], inversedBy: 'resetPasswords')] - #[ORM\JoinColumn(name: 'userUuid', referencedColumnName: 'uuid')] + #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')] protected ?User $user = null; #[ORM\Column(name: 'expires', type: 'datetime_immutable')] @@ -43,7 +45,6 @@ public function __construct() { parent::__construct(); - $this->created(); $this->expires = DateTimeImmutable::createFromMutable( (new DateTime())->add(new DateInterval('P1D')) ); @@ -124,7 +125,7 @@ public function markAsCompleted(): self /** * @return array{ - * uuid: non-empty-string, + * id: non-empty-string, * expires: DateTimeImmutable, * hash: non-empty-string, * status: 'completed'|'requested', @@ -135,7 +136,7 @@ public function markAsCompleted(): self public function getArrayCopy(): array { return [ - 'uuid' => $this->uuid->toString(), + 'id' => $this->id->toString(), 'expires' => $this->expires, 'hash' => $this->hash, 'status' => $this->status->value, diff --git a/src/Core/src/User/src/Entity/UserRole.php b/src/Core/src/User/src/Entity/UserRole.php index 23e1888..9383102 100644 --- a/src/Core/src/User/src/Entity/UserRole.php +++ b/src/Core/src/User/src/Entity/UserRole.php @@ -8,6 +8,7 @@ use Core\App\Entity\AbstractEntity; use Core\App\Entity\RoleInterface; use Core\App\Entity\TimestampsTrait; +use Core\App\Entity\UuidIdentifierTrait; use Core\User\Enum\UserRoleEnum; use Core\User\Repository\UserRoleRepository; use Doctrine\ORM\Mapping as ORM; @@ -21,6 +22,7 @@ class UserRole extends AbstractEntity implements RoleInterface { use TimestampsTrait; + use UuidIdentifierTrait; #[ORM\Column( name: 'name', @@ -31,13 +33,6 @@ enumType: UserRoleEnum::class, )] protected UserRoleEnum $name = UserRoleEnum::User; - public function __construct() - { - parent::__construct(); - - $this->created(); - } - public function getName(): UserRoleEnum { return $this->name; @@ -59,7 +54,7 @@ public function setName(BackedEnum $name): RoleInterface public function getArrayCopy(): array { return [ - 'uuid' => $this->uuid->toString(), + 'id' => $this->id->toString(), 'name' => $this->name->value, 'created' => $this->created, 'updated' => $this->updated, diff --git a/src/Core/src/User/src/EventListener/UserAvatarEventListener.php b/src/Core/src/User/src/EventListener/UserAvatarEventListener.php index 0c7b06e..21601dc 100644 --- a/src/Core/src/User/src/EventListener/UserAvatarEventListener.php +++ b/src/Core/src/User/src/EventListener/UserAvatarEventListener.php @@ -48,7 +48,7 @@ private function setAvatarUrl(UserAvatar $avatar): void sprintf( '%s/%s/%s', rtrim($this->config['uploads']['user']['url'], '/'), - $avatar->getUser()->getUuid()->toString(), + $avatar->getUser()->getId()->toString(), $avatar->getName() ) ); diff --git a/src/Core/src/User/src/Repository/UserRepository.php b/src/Core/src/User/src/Repository/UserRepository.php index ed7bb6c..f82e675 100644 --- a/src/Core/src/User/src/Repository/UserRepository.php +++ b/src/Core/src/User/src/Repository/UserRepository.php @@ -81,7 +81,7 @@ public function getUsers(array $params = [], array $filters = []): QueryBuilder ->orderBy($params['sort'], $params['dir']) ->setFirstResult($params['offset']) ->setMaxResults($params['limit']) - ->groupBy('user.uuid'); + ->groupBy('user.id'); $queryBuilder->getQuery()->useQueryCache(true); return $queryBuilder; diff --git a/src/User/src/InputFilter/UserRoleInputFilter.php b/src/User/src/InputFilter/UserRoleInputFilter.php index 5077dab..ae6ff58 100644 --- a/src/User/src/InputFilter/UserRoleInputFilter.php +++ b/src/User/src/InputFilter/UserRoleInputFilter.php @@ -9,7 +9,7 @@ /** * @phpstan-type UserRoleDataType array{ - * uuid: non-empty-string, + * id: non-empty-string, * } * @extends AbstractInputFilter */ @@ -17,6 +17,6 @@ class UserRoleInputFilter extends AbstractInputFilter { public function __construct() { - $this->add(new UuidInput('uuid')); + $this->add(new UuidInput('id')); } } diff --git a/src/User/src/OpenAPI.php b/src/User/src/OpenAPI.php index ce9b6a3..9b9734d 100644 --- a/src/User/src/OpenAPI.php +++ b/src/User/src/OpenAPI.php @@ -143,9 +143,9 @@ property: 'roles', type: 'array', items: new OA\Items( - required: ['uuid'], + required: ['id'], properties: [ - new OA\Property(property: 'uuid', type: 'string'), + new OA\Property(property: 'id', type: 'string'), ], ), ), @@ -187,15 +187,15 @@ * @see DeleteUserResourceHandler::handle() */ #[OA\Delete( - path: '/user/{uuid}', - description: 'Authenticated (super)admin deletes (anonymizes) a user account identified by its UUID', + path: '/user/{id}', + description: 'Authenticated (super)admin deletes (anonymizes) a user account identified by its id', summary: 'Admin deletes (anonymizes) user account', security: [['AuthToken' => []]], tags: ['User'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'User UUID', + name: 'id', + description: 'User id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -217,15 +217,15 @@ * @see GetUserResourceHandler::handle() */ #[OA\Get( - path: '/user/{uuid}', - description: 'Authenticated (super)admin fetches a user account identified by its UUID', + path: '/user/{id}', + description: 'Authenticated (super)admin fetches a user account identified by its id', summary: 'Admin views user account', security: [['AuthToken' => []]], tags: ['User'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'User UUID', + name: 'id', + description: 'User id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -248,7 +248,7 @@ * @see PatchUserResourceHandler::handle() */ #[OA\Patch( - path: '/user/{uuid}', + path: '/user/{id}', description: 'Authenticated (super)admin updates an existing user account', summary: 'Admin updates user account', security: [['AuthToken' => []]], @@ -274,9 +274,9 @@ property: 'roles', type: 'array', items: new OA\Items( - required: ['uuid'], + required: ['id'], properties: [ - new OA\Property(property: 'uuid', type: 'string'), + new OA\Property(property: 'id', type: 'string'), ], ), ), @@ -287,8 +287,8 @@ tags: ['User'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'User UUID', + name: 'id', + description: 'User id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -322,15 +322,15 @@ * @see DeleteUserAvatarResourceHandler::handle() */ #[OA\Delete( - path: '/user/{uuid}/avatar', - description: 'Authenticated (super)admin deletes a user avatar identified by user UUID', + path: '/user/{id}/avatar', + description: 'Authenticated (super)admin deletes a user avatar identified by user id', summary: 'Admin deletes user avatar', security: [['AuthToken' => []]], tags: ['UserAvatar'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'User UUID', + name: 'id', + description: 'User id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -352,15 +352,15 @@ * @see GetUserAvatarResourceHandler::handle() */ #[OA\Get( - path: '/user/{uuid}/avatar', - description: 'Authenticated (super)admin fetches a user avatar identified by user UUID', + path: '/user/{id}/avatar', + description: 'Authenticated (super)admin fetches a user avatar identified by user id', summary: 'Admin views user avatar', security: [['AuthToken' => []]], tags: ['UserAvatar'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'User UUID', + name: 'id', + description: 'User id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -383,8 +383,8 @@ * @see PostUserAvatarResourceHandler::handle() */ #[OA\Post( - path: '/user/{uuid}/avatar', - description: 'Authenticated (super)admin creates user avatar for user identified by user UUID', + path: '/user/{id}/avatar', + description: 'Authenticated (super)admin creates user avatar for user identified by user id', summary: 'Admin creates user avatar', security: [['AuthToken' => []]], requestBody: new OA\RequestBody( @@ -404,8 +404,8 @@ tags: ['UserAvatar'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'User UUID', + name: 'id', + description: 'User id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -502,15 +502,15 @@ * @see GetUserRoleResourceHandler::handle() */ #[OA\Get( - path: '/user/role/{uuid}', - description: 'Authenticated (super)admin fetches a user role identified by its UUID', + path: '/user/role/{id}', + description: 'Authenticated (super)admin fetches a user role identified by its id', summary: 'Admin views user role', security: [['AuthToken' => []]], tags: ['UserRole'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'UserRole UUID', + name: 'id', + description: 'UserRole id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -533,15 +533,15 @@ * @see PatchUserActivateHandler::handle() */ #[OA\Patch( - path: '/user/{uuid}/activate', + path: '/user/{id}/activate', description: 'Authenticated (super)admin activates an existing user account', summary: 'Admin activates user account', security: [['AuthToken' => []]], tags: ['User'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'User UUID', + name: 'id', + description: 'User id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -575,15 +575,15 @@ * @see PatchUserDeactivateHandler::handle() */ #[OA\Patch( - path: '/user/{uuid}/deactivate', + path: '/user/{id}/deactivate', description: 'Authenticated (super)admin deactivates an existing user account', summary: 'Admin deactivates user account', security: [['AuthToken' => []]], tags: ['User'], parameters: [ new OA\Parameter( - name: 'uuid', - description: 'User UUID', + name: 'id', + description: 'User id', in: 'path', required: true, schema: new OA\Schema(type: 'string'), @@ -1118,7 +1118,7 @@ #[OA\Schema( schema: 'User', properties: [ - new OA\Property(property: 'uuid', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), + new OA\Property(property: 'id', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), new OA\Property(property: 'hash', type: 'string'), new OA\Property(property: 'identity', type: 'string'), new OA\Property(property: 'status', type: 'string', example: UserStatusEnum::Active), @@ -1167,7 +1167,7 @@ #[OA\Schema( schema: 'UserAvatar', properties: [ - new OA\Property(property: 'uuid', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), + new OA\Property(property: 'id', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), new OA\Property( property: 'url', type: 'string', @@ -1203,7 +1203,7 @@ #[OA\Schema( schema: 'UserDetail', properties: [ - new OA\Property(property: 'uuid', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), + new OA\Property(property: 'id', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), new OA\Property(property: 'firstName', type: 'string'), new OA\Property(property: 'lastName', type: 'string'), new OA\Property(property: 'email', type: 'string'), @@ -1219,7 +1219,7 @@ #[OA\Schema( schema: 'UserResetPassword', properties: [ - new OA\Property(property: 'uuid', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), + new OA\Property(property: 'id', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), new OA\Property(property: 'expires', type: 'object', example: new DateTimeImmutable()), new OA\Property(property: 'hash', type: 'string'), new OA\Property(property: 'status', type: 'string', example: UserResetPasswordStatusEnum::Requested), @@ -1252,7 +1252,7 @@ #[OA\Schema( schema: 'UserRole', properties: [ - new OA\Property(property: 'uuid', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), + new OA\Property(property: 'id', type: 'string', example: '1234abcd-abcd-4321-12ab-123456abcdef'), new OA\Property(property: 'name', type: 'string', example: UserRoleEnum::User->value), new OA\Property( property: '_links', diff --git a/src/User/src/RoutesDelegator.php b/src/User/src/RoutesDelegator.php index d52dd58..5cfd662 100644 --- a/src/User/src/RoutesDelegator.php +++ b/src/User/src/RoutesDelegator.php @@ -44,7 +44,7 @@ class RoutesDelegator */ public function __invoke(ContainerInterface $container, string $serviceName, callable $callback): Application { - $uuid = ConfigProvider::REGEXP_UUID; + $id = ConfigProvider::REGEXP_UUID; /** @var RouteCollectorInterface $routeCollector */ $routeCollector = $container->get(RouteCollectorInterface::class); @@ -54,22 +54,22 @@ public function __invoke(ContainerInterface $container, string $serviceName, cal ->post('', PostUserResourceHandler::class, 'user::create-user'); $routeCollector - ->patch('/user/' . $uuid . '/activate', PatchUserActivateHandler::class, 'user::activate-user') - ->patch('/user/' . $uuid . '/deactivate', PatchUserDeactivateHandler::class, 'user::deactivate-user'); + ->patch('/user/' . $id . '/activate', PatchUserActivateHandler::class, 'user::activate-user') + ->patch('/user/' . $id . '/deactivate', PatchUserDeactivateHandler::class, 'user::deactivate-user'); - $routeCollector->group('/user/' . $uuid) + $routeCollector->group('/user/' . $id) ->delete('', DeleteUserResourceHandler::class, 'user::delete-user') ->get('', GetUserResourceHandler::class, 'user::view-user') ->patch('', PatchUserResourceHandler::class, 'user::update-user'); - $routeCollector->group('/user/' . $uuid . '/avatar') + $routeCollector->group('/user/' . $id . '/avatar') ->delete('', DeleteUserAvatarResourceHandler::class, 'user::delete-user-avatar') ->get('', GetUserAvatarResourceHandler::class, 'user::view-user-avatar') ->post('', PostUserAvatarResourceHandler::class, 'user::create-user-avatar'); $routeCollector->group('/user/role') ->get('', GetUserRoleCollectionHandler::class, 'user::list-role') - ->get('/' . $uuid, GetUserRoleResourceHandler::class, 'user::view-role'); + ->get('/' . $id, GetUserRoleResourceHandler::class, 'user::view-role'); $routeCollector->group('/user/account') ->delete('', DeleteUserAccountResourceHandler::class, 'user::delete-account') diff --git a/src/User/src/Service/UserAvatarService.php b/src/User/src/Service/UserAvatarService.php index 43f8fd9..3662db7 100644 --- a/src/User/src/Service/UserAvatarService.php +++ b/src/User/src/Service/UserAvatarService.php @@ -118,7 +118,7 @@ protected function getUserAvatarDirectoryPath(User $user): string return sprintf( '%s/%s/', rtrim($this->config['uploads']['user']['path'], '/'), - $user->getUuid()->toString() + $user->getId()->toString() ); } diff --git a/src/User/src/Service/UserService.php b/src/User/src/Service/UserService.php index 10e8b11..a78769b 100644 --- a/src/User/src/Service/UserService.php +++ b/src/User/src/Service/UserService.php @@ -209,12 +209,12 @@ public function saveUser(array $data, ?User $user = null): User } } - $this->validateUniqueUser((string) $user->getIdentity(), $user->getEmail(), $user->getUuid()); + $this->validateUniqueUser((string) $user->getIdentity(), $user->getEmail(), $user->getId()); if (array_key_exists('roles', $data) && count($data['roles']) > 0) { $user->resetRoles(); foreach ($data['roles'] as $roleData) { - $userRole = $this->userRoleRepository->find($roleData['uuid']); + $userRole = $this->userRoleRepository->find($roleData['id']); if (! $userRole instanceof UserRole) { throw NotFoundException::create(Message::ROLE_NOT_FOUND); } @@ -277,27 +277,27 @@ private function revokeTokens(User $user): void * @throws ConflictException * @throws NotFoundException */ - private function validateUniqueUser(string $identity, string $email, ?UuidInterface $uuid = null): void + private function validateUniqueUser(string $identity, string $email, ?UuidInterface $id = null): void { $user = $this->userRepository->findOneBy(['identity' => $identity]); if ($user instanceof User) { - if ($uuid === null) { + if ($id === null) { throw ConflictException::create(Message::DUPLICATE_IDENTITY); } - if ($user->getUuid()->toString() !== $uuid->toString()) { + if (! $user->getId()->equals($id)) { throw ConflictException::create(Message::DUPLICATE_IDENTITY); } } $userDetail = $this->userDetailRepository->findOneBy(['email' => $email]); if ($userDetail instanceof UserDetail) { - if ($uuid === null) { + if ($id === null) { throw ConflictException::create(Message::DUPLICATE_EMAIL); } if (! $userDetail->getUser() instanceof User) { throw NotFoundException::create(Message::USER_NOT_FOUND); } - if ($userDetail->getUser()->getUuid()->toString() !== $uuid->toString()) { + if (! $userDetail->getUser()->getId()->equals($id)) { throw ConflictException::create(Message::DUPLICATE_EMAIL); } } diff --git a/test/Functional/AbstractFunctionalTest.php b/test/Functional/AbstractFunctionalTest.php index f38f207..6086451 100644 --- a/test/Functional/AbstractFunctionalTest.php +++ b/test/Functional/AbstractFunctionalTest.php @@ -441,7 +441,7 @@ protected function replaceService(string $service, object $mockInstance): void * password: non-empty-string, * passwordConfirm: non-empty-string, * status: \Core\User\Enum\UserStatusEnum, - * roles: array{uuid: non-empty-string}[] + * roles: array{id: non-empty-string}[] * } * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface @@ -470,7 +470,7 @@ protected function getValidUserData(array $data): array 'passwordConfirm' => $data['password'] ?? self::DEFAULT_PASSWORD, 'status' => $status, 'roles' => [ - ['uuid' => $userRole->getUuid()->toString()], + ['id' => $userRole->getId()->toString()], ], ]; } diff --git a/test/Functional/AdminTest.php b/test/Functional/AdminTest.php index a25daae..266df27 100644 --- a/test/Functional/AdminTest.php +++ b/test/Functional/AdminTest.php @@ -52,7 +52,7 @@ public function testUserCannotViewAdminAccount(): void $identity = $this->createUser()->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD); - $response = $this->get('/admin/' . $admin->getUuid()->toString()); + $response = $this->get('/admin/' . $admin->getId()->toString()); $this->assertResponseForbidden($response); } @@ -84,7 +84,7 @@ public function testUserCannotUpdateAdminAccount(): void $identity = $this->createUser()->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD); - $response = $this->patch('/admin/' . $admin->getUuid()->toString()); + $response = $this->patch('/admin/' . $admin->getId()->toString()); $this->assertResponseForbidden($response); } @@ -100,7 +100,7 @@ public function testUserCannotDeleteAdminAccount(): void $identity = $this->createUser()->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD); - $response = $this->delete('/admin/' . $admin->getUuid()->toString()); + $response = $this->delete('/admin/' . $admin->getId()->toString()); $this->assertResponseForbidden($response); } @@ -131,11 +131,11 @@ public function testAdminCanViewAdminAccount(): void $identity = $admin->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD, 'admin', 'admin'); - $response = $this->get('/admin/' . $admin->getUuid()->toString()); + $response = $this->get('/admin/' . $admin->getId()->toString()); $data = json_decode($response->getBody()->getContents(), true); $this->assertResponseOk($response); - $this->assertSame($admin->getUuid()->toString(), $data['uuid']); + $this->assertSame($admin->getId()->toString(), $data['id']); } /** @@ -164,7 +164,7 @@ public function testCannotCreateDuplicateAdminAccount(): void 'status' => $admin->getStatus()->value, 'roles' => [ [ - 'uuid' => $adminRole->getUuid()->toString(), + 'id' => $adminRole->getId()->toString(), ], ], ]; @@ -204,7 +204,7 @@ public function testAdminCanCreateAdminAccount(): void 'status' => $admin->getStatus()->value, 'roles' => [ [ - 'uuid' => $adminRole->getUuid()->toString(), + 'id' => $adminRole->getId()->toString(), ], ], ]; @@ -241,7 +241,7 @@ public function testAdminCanUpdateAdminAccount(): void 'lastName' => 'Admin', ]; - $response = $this->patch('/admin/' . $admin->getUuid()->toString(), $updateData); + $response = $this->patch('/admin/' . $admin->getId()->toString(), $updateData); $data = json_decode($response->getBody()->getContents(), true); $this->assertResponseOk($response); @@ -261,12 +261,12 @@ public function testAdminCanDeleteAdminAccount(): void $identity = $admin->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD, 'admin', 'admin'); - $response = $this->delete('/admin/' . $admin->getUuid()->toString()); + $response = $this->delete('/admin/' . $admin->getId()->toString()); $this->assertResponseNoContent($response); $adminRepository = $this->getEntityManager()->getRepository(Admin::class); - $admin = $adminRepository->find($admin->getUuid()->toString()); + $admin = $adminRepository->find($admin->getId()->toString()); $this->assertEmpty($admin); } @@ -287,7 +287,7 @@ public function testAdminCanViewPersonalAccount(): void $data = json_decode($response->getBody()->getContents(), true); $this->assertResponseOk($response); - $this->assertSame($admin->getUuid()->toString(), $data['uuid']); + $this->assertSame($admin->getId()->toString(), $data['id']); $this->assertSame($admin->getIdentity(), $data['identity']); $this->assertSame($admin->getFirstName(), $data['firstName']); $this->assertSame($admin->getLastName(), $data['lastName']); @@ -345,11 +345,11 @@ public function testAdminCanViewAdminRole(): void $adminRole = $admin->getRoles()[0]; - $response = $this->get('/admin/role/' . $adminRole->getUuid()->toString()); + $response = $this->get('/admin/role/' . $adminRole->getId()->toString()); $data = json_decode($response->getBody()->getContents(), true); $this->assertResponseOk($response); - $this->assertSame($adminRole->getUuid()->toString(), $data['uuid']); + $this->assertSame($adminRole->getId()->toString(), $data['id']); $this->assertSame($adminRole->getName()->value, $data['name']); } @@ -379,7 +379,7 @@ public function testAdminCreateUserAccountDuplicateEmail(): void 'email' => 'user1@test.com', ], 'roles' => [ - ['uuid' => $userRole->getUuid()->toString()], + ['id' => $userRole->getId()->toString()], ], ]; @@ -420,7 +420,7 @@ public function testAdminCanCreateUserAccount(): void 'email' => 'test@user.com', ], 'roles' => [ - ['uuid' => $userRole->getUuid()->toString()], + ['id' => $userRole->getId()->toString()], ], ]; @@ -428,14 +428,14 @@ public function testAdminCanCreateUserAccount(): void $data = json_decode($response->getBody()->getContents(), true); $this->assertResponseCreated($response); - $this->assertArrayHasKey('uuid', $data); + $this->assertArrayHasKey('id', $data); $this->assertArrayHasKey('hash', $data); $this->assertArrayHasKey('identity', $data); $this->assertArrayHasKey('status', $data); $this->assertArrayHasKey('avatar', $data); $this->assertArrayHasKey('detail', $data); $this->assertArrayHasKey('roles', $data); - $this->assertNotEmpty($data['uuid']); + $this->assertNotEmpty($data['id']); $this->assertNotEmpty($data['hash']); $this->assertSame($userData['identity'], $data['identity']); $this->assertSame(UserStatusEnum::Pending->value, $data['status']); @@ -447,7 +447,7 @@ public function testAdminCanCreateUserAccount(): void $this->assertSame($userData['detail']['lastName'], $data['detail']['lastName']); $this->assertSame($userData['detail']['email'], $data['detail']['email']); $this->assertNotEmpty($data['roles']); - $this->assertSame($userRole->getUuid()->toString(), $data['roles'][0]['uuid']); + $this->assertSame($userRole->getId()->toString(), $data['roles'][0]['id']); $this->assertSame($userRole->getName()->value, $data['roles'][0]['name']); } @@ -466,12 +466,12 @@ public function testAdminCanActiveUserAccount(): void $this->loginAs($identity, self::DEFAULT_PASSWORD, 'admin', 'admin'); $this->assertFalse($user->isActive()); - $response = $this->patch(sprintf('/user/%s/activate', $user->getUuid()->toString())); + $response = $this->patch(sprintf('/user/%s/activate', $user->getId()->toString())); $this->assertResponseOk($response); $userRepository = $this->getEntityManager()->getRepository(User::class); - $user = $userRepository->find($user->getUuid()->toString()); + $user = $userRepository->find($user->getId()->toString()); assert($user instanceof User); $this->assertTrue($user->isActive()); @@ -489,12 +489,12 @@ public function testAdminCanDeleteUserAccount(): void $identity = $this->createAdmin()->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD, 'admin', 'admin'); - $response = $this->delete('/user/' . $user->getUuid()->toString()); + $response = $this->delete('/user/' . $user->getId()->toString()); $this->assertResponseNoContent($response); $userRepository = $this->getEntityManager()->getRepository(User::class); - $user = $userRepository->find($user->getUuid()->toString()); + $user = $userRepository->find($user->getId()->toString()); assert($user instanceof User); $this->assertTrue($user->isDeleted()); @@ -530,7 +530,7 @@ public function testAdminUpdateUserAccountDuplicateEmail(): void $identity = $this->createAdmin()->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD, 'admin', 'admin'); - $response = $this->patch('/user/' . $user2->getUuid()->toString(), [ + $response = $this->patch('/user/' . $user2->getId()->toString(), [ 'detail' => [ 'email' => $user1->getDetail()->getEmail(), ], @@ -543,7 +543,7 @@ public function testAdminUpdateUserAccountDuplicateEmail(): void $this->assertSame(Message::DUPLICATE_EMAIL, $data['detail']); $userDetailRepository = $this->getEntityManager()->getRepository(UserDetail::class); - $userDetail = $userDetailRepository->find($user2->getDetail()->getUuid()); + $userDetail = $userDetailRepository->find($user2->getDetail()->getId()); assert($userDetail instanceof UserDetail); $this->assertSame($user2->getDetail()->getEmail(), $userDetail->getEmail()); @@ -573,12 +573,12 @@ public function testAdminCanUpdateUserAccount(): void 'status' => UserStatusEnum::Active->value, 'roles' => [ [ - 'uuid' => $userRole->getUuid()->toString(), + 'id' => $userRole->getId()->toString(), ], ], ]; - $response = $this->patch('/user/' . $user->getUuid()->toString(), $updateData); + $response = $this->patch('/user/' . $user->getId()->toString(), $updateData); $this->assertResponseOk($response); @@ -588,7 +588,7 @@ public function testAdminCanUpdateUserAccount(): void $this->assertInstanceOf(BackedEnum::class, $status); $this->assertSame($updateData['detail']['firstName'], $data['detail']['firstName']); $this->assertSame($updateData['detail']['lastName'], $data['detail']['lastName']); - $this->assertSame($updateData['roles'][0]['uuid'], $data['roles'][0]['uuid']); + $this->assertSame($updateData['roles'][0]['id'], $data['roles'][0]['id']); } /** @@ -603,12 +603,12 @@ public function testAdminCanViewUserAccount(): void $identity = $this->createAdmin()->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD, 'admin', 'admin'); - $response = $this->get('/user/' . $user->getUuid()->toString()); + $response = $this->get('/user/' . $user->getId()->toString()); $this->assertResponseOk($response); $data = json_decode($response->getBody()->getContents(), true); - $this->assertSame($user->getUuid()->toString(), $data['uuid']); + $this->assertSame($user->getId()->toString(), $data['id']); } /** @@ -621,7 +621,7 @@ public function testAdminViewNotFoundUserAccount(): void $identity = $this->createAdmin()->getIdentity(); $this->loginAs($identity, self::DEFAULT_PASSWORD, 'admin', 'admin'); - $response = $this->get('/user/' . (new User())->getUuid()->toString()); + $response = $this->get('/user/' . (new User())->getId()->toString()); $this->assertResponseNotFound($response); } diff --git a/test/Functional/UserTest.php b/test/Functional/UserTest.php index a5eb490..1eae7fa 100644 --- a/test/Functional/UserTest.php +++ b/test/Functional/UserTest.php @@ -256,7 +256,7 @@ public function testActivateMyAccount(): void $this->assertResponseOk($response); $userRepository = $this->getEntityManager()->getRepository(User::class); - $user = $userRepository->find($user->getUuid()->toString()); + $user = $userRepository->find($user->getId()->toString()); assert($user instanceof User); $this->assertTrue($user->isActive()); @@ -307,7 +307,7 @@ public function testDeleteMyAccount(): void $this->assertResponseNoContent($response); $userRepository = $this->getEntityManager()->getRepository(User::class); - $deletedUser = $userRepository->find($user->getUuid()->toString()); + $deletedUser = $userRepository->find($user->getId()->toString()); assert($deletedUser instanceof User); $this->assertTrue($deletedUser->isDeleted()); diff --git a/test/Unit/Admin/Service/AdminServiceTest.php b/test/Unit/Admin/Service/AdminServiceTest.php index 1281a7d..b69fdd4 100644 --- a/test/Unit/Admin/Service/AdminServiceTest.php +++ b/test/Unit/Admin/Service/AdminServiceTest.php @@ -59,7 +59,7 @@ public function testCreateAdminSuperAdminRole(): void $data = $this->getAdmin([ 'roles' => [ [ - 'uuid' => 'uuid', + 'id' => 'id', 'name' => AdminRoleEnum::Superuser, ], ], diff --git a/test/Unit/User/Service/UserServiceTest.php b/test/Unit/User/Service/UserServiceTest.php index ca53e8b..5504500 100644 --- a/test/Unit/User/Service/UserServiceTest.php +++ b/test/Unit/User/Service/UserServiceTest.php @@ -78,11 +78,11 @@ public function testCreateUserWithMultipleRoles(): void $data = $this->getUser([ 'roles' => [ [ - 'uuid' => 'uuid', + 'id' => 'id', 'name' => UserRoleEnum::Guest, ], [ - 'uuid' => 'uuid', + 'id' => 'id', 'name' => UserRoleEnum::User, ], ], @@ -102,7 +102,7 @@ public function testCreateUserWithDefaultRole(): void $data = $this->getUser([ 'roles' => [ [ - 'uuid' => 'uuid', + 'id' => 'id', 'name' => UserRoleEnum::User, ], ], @@ -196,7 +196,10 @@ private function getUser(array $data = []): array 'email' => 'test@dotkernel2.com', ], 'roles' => [ - ['uuid' => 'uuid', 'name' => UserRoleEnum::User], + [ + 'id' => 'id', + 'name' => UserRoleEnum::User, + ], ], ];