Attainly/backend/app/Auth/EloquentSessionRepository.php

62 lines
1.5 KiB
PHP

<?php
namespace App\Auth;
use App\User\UserRepository;
use DateTimeImmutable;
use DateTimeZone;
class EloquentSessionRepository implements SessionRepository
{
public function __construct(
private UserRepository $userRepository,
) {}
public function create(CreateSessionDto $dto): Session
{
SessionModel::create([
'token' => $dto->token,
'user_id' => $dto->user->getId(),
'created_at' => $dto->createdAt,
'expires_at' => $dto->expiresAt,
]);
return new Session(
token: $dto->token,
user: $dto->user,
createdAt: $dto->createdAt,
expiresAt: $dto->expiresAt,
);
}
public function findByToken(string $token): ?Session
{
$model = SessionModel::find($token);
if ($model === null) {
return null;
}
$user = $this->userRepository->find($model->user_id);
if ($user === null) {
return null;
}
return new Session(
token: $model->token,
user: $user,
createdAt: $this->toUtc($model->created_at),
expiresAt: $this->toUtc($model->expires_at),
);
}
public function deleteByToken(string $token): void
{
SessionModel::where('token', $token)->delete();
}
private function toUtc(DateTimeImmutable $dateTime): DateTimeImmutable
{
return DateTimeImmutable::createFromInterface($dateTime)
->setTimezone(new DateTimeZone('UTC'));
}
}