getNextId(); $user = new User( id: $id, email: $dto->email, passwordHash: $dto->passwordHash, isAdmin: $dto->isAdmin, ); $this->existingUsers[$id] = $user; return $user; } public function find(int $id): ?User { $user = $this->existingUsers[$id] ?? null; if ($user === null) { return null; } return new User( id: $user->getId(), email: $user->getEmail(), passwordHash: $user->getPasswordHash(), isAdmin: $user->isAdmin(), ); } public function findByEmail(EmailAddress $email): ?User { foreach ($this->existingUsers as $user) { if ($user->getEmail()->equals($email)) { return new User( id: $user->getId(), email: $user->getEmail(), passwordHash: $user->getPasswordHash(), isAdmin: $user->isAdmin(), ); } } return null; } private function getNextId(): int { return count($this->existingUsers) + 1; } }