$dto->email->value(), 'password' => Hash::make($dto->password), ]); return $this->toDomain($model); } public function find(int $id): ?User { $model = UserModel::find($id); if ($model === null) { return null; } return $this->toDomain($model); } public function findByCredentials( EmailAddress $email, string $password, ): ?User { $model = UserModel::query() ->where('email', $email->value()) ->first(); if ( $model === null || ! Hash::check($password, $model->password) ) { return null; } return $this->toDomain($model); } private function toDomain(UserModel $model): User { return new User( id: $model->id, email: new EmailAddress($model->email), ); } }