*/ private array $tokens = []; public function create( CreateEmailConfirmationTokenDto $dto, ): EmailConfirmationToken { $id = count($this->tokens) + 1; $token = new EmailConfirmationToken( id: $id, user: $dto->user, availableTo: $dto->availableTo, token: $dto->token, ); $this->tokens[$id] = $token; return $this->copy($token); } public function findByToken(string $token): ?EmailConfirmationToken { foreach ($this->tokens as $candidate) { if ($candidate->getToken() === $token) { return $this->copy($candidate); } } return null; } public function findByUser(User $user): ?EmailConfirmationToken { foreach ($this->tokens as $candidate) { if ($candidate->getUser()->getId() === $user->getId()) { return $this->copy($candidate); } } return null; } public function delete(int $id): void { unset($this->tokens[$id]); } private function copy( EmailConfirmationToken $token, ): EmailConfirmationToken { return new EmailConfirmationToken( id: $token->getId(), user: $token->getUser(), availableTo: $token->getAvailableTo(), token: $token->getToken(), ); } }