68 lines
1.8 KiB
PHP
68 lines
1.8 KiB
PHP
<?php
|
|
|
|
namespace App\Email\EmailConfirmationToken;
|
|
|
|
use App\User\User;
|
|
use App\User\UserRepository;
|
|
use DomainException;
|
|
|
|
class EloquentEmailConfirmationTokenRepository implements
|
|
EmailConfirmationTokenRepository
|
|
{
|
|
public function __construct(
|
|
private UserRepository $userRepository,
|
|
) {}
|
|
|
|
public function create(
|
|
CreateEmailConfirmationTokenDto $dto,
|
|
): EmailConfirmationToken {
|
|
$model = EmailConfirmationTokenModel::create([
|
|
'user_id' => $dto->user->getId(),
|
|
'token' => $dto->token,
|
|
'available_to' => $dto->availableTo,
|
|
]);
|
|
|
|
return $this->toDomain($model);
|
|
}
|
|
|
|
public function findByToken(string $token): ?EmailConfirmationToken
|
|
{
|
|
$model = EmailConfirmationTokenModel::query()
|
|
->where('token', $token)
|
|
->first();
|
|
|
|
return $model === null ? null : $this->toDomain($model);
|
|
}
|
|
|
|
public function findByUser(User $user): ?EmailConfirmationToken
|
|
{
|
|
$model = EmailConfirmationTokenModel::query()
|
|
->where('user_id', $user->getId())
|
|
->first();
|
|
|
|
return $model === null ? null : $this->toDomain($model);
|
|
}
|
|
|
|
public function delete(int $id): void
|
|
{
|
|
EmailConfirmationTokenModel::where('id', $id)->delete();
|
|
}
|
|
|
|
private function toDomain(
|
|
EmailConfirmationTokenModel $model,
|
|
): EmailConfirmationToken {
|
|
$user = $this->userRepository->find($model->user_id);
|
|
if ($user === null) {
|
|
throw new DomainException(
|
|
"User with id {$model->user_id} not found",
|
|
);
|
|
}
|
|
|
|
return new EmailConfirmationToken(
|
|
id: $model->id,
|
|
user: $user,
|
|
availableTo: $model->available_to,
|
|
token: $model->token,
|
|
);
|
|
}
|
|
}
|