From 390ea14de6a9a5133076eedafc686af93bbbe40e Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Mon, 24 Feb 2025 14:56:05 +0100 Subject: [PATCH] Update user handle generation --- src/Benzina/UsersPump.php | 6 +++--- src/State/User/UserSignupProcessor.php | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/Benzina/UsersPump.php b/src/Benzina/UsersPump.php index c3a3169..c786a8c 100644 --- a/src/Benzina/UsersPump.php +++ b/src/Benzina/UsersPump.php @@ -44,9 +44,9 @@ class UsersPump extends AbstractPump private function buildHandle(array $record): string { - $handle = UserService::asHandle($record['id']); - - if ($handle === null) { + try { + $handle = UserService::asHandle($record['id']); + } catch (\Exception $e) { $handle = UserService::asHandle($record['email']); } diff --git a/src/State/User/UserSignupProcessor.php b/src/State/User/UserSignupProcessor.php index 87050a0..dd8c773 100644 --- a/src/State/User/UserSignupProcessor.php +++ b/src/State/User/UserSignupProcessor.php @@ -8,6 +8,8 @@ use App\ApiResource\User\UserApiResource; use App\Dto\UserSignupDto; use App\Entity\User\User; use App\Mapping\AutoMapper; +use App\Repository\User\UserRepository; +use App\Service\UserService; use App\State\EntityStateProcessor; use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface; @@ -16,6 +18,7 @@ final class UserSignupProcessor implements ProcessorInterface public function __construct( private AutoMapper $autoMapper, private EntityStateProcessor $entityStateProcessor, + private UserRepository $userRepository, private UserPasswordHasherInterface $userPasswordHasher, ) {} @@ -28,9 +31,26 @@ final class UserSignupProcessor implements ProcessorInterface { /** @var User */ $user = $this->autoMapper->map($data, User::class); + + $user->setHandle($this->buildHandle($data)); $user->setPassword($this->userPasswordHasher->hashPassword($user, $data->password)); + $user = $this->entityStateProcessor->process($user, $operation, $uriVariables, $context); return $this->autoMapper->map($user, UserApiResource::class); } + + private function buildHandle(UserSignupDto $data): string + { + $base = UserService::asHandle($data->email); + + $users = $this->userRepository->findLike($base); + $usersCount = \count($users); + + if ($usersCount < 1) { + return $base; + } + + return \sprintf('%s_%02d', $base, $usersCount + 1); + } }