$dto->token, 'user_id' => $dto->user->getId(), 'created_at' => $dto->createdAt->format('Y-m-d H:i:s'), 'expires_at' => $dto->expiresAt->format('Y-m-d H:i:s'), ]); return new Session( token: $record->token, user: $dto->user, createdAt: $dto->createdAt, expiresAt: $dto->expiresAt, ); } public function findByToken(string $token): ?Session { $record = SessionModel::where('token', $token)->first(); if ($record === null) { return null; } $userRecord = $record->user; if ($userRecord === null) { return null; } $user = new User( id: $userRecord->id, email: new EmailAddress($userRecord->email), passwordHash: $userRecord->password_hash, ); return new Session( token: $record->token, user: $user, createdAt: $record->created_at instanceof \DateTimeImmutable ? $record->created_at : new \DateTimeImmutable($record->created_at->format('Y-m-d H:i:s')), expiresAt: $record->expires_at instanceof \DateTimeImmutable ? $record->expires_at : new \DateTimeImmutable($record->expires_at->format('Y-m-d H:i:s')), ); } public function deleteByToken(string $token): void { SessionModel::where('token', $token)->delete(); } }