63 lines
1.6 KiB
PHP
63 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Auth;
|
|
|
|
use App\User\UserRepository;
|
|
use Carbon\CarbonInterface;
|
|
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(CarbonInterface $dateTime): DateTimeImmutable
|
|
{
|
|
return DateTimeImmutable::createFromInterface($dateTime)
|
|
->setTimezone(new DateTimeZone('UTC'));
|
|
}
|
|
}
|