add email signup flow
This commit is contained in:
parent
9945163a2f
commit
3dc9204979
27 changed files with 629 additions and 24 deletions
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
|
||||
namespace App\Email\EmailConfirmationToken\UseCases;
|
||||
|
||||
use App\Auth\Clock;
|
||||
use App\Auth\TokenGenerator;
|
||||
use App\Email\EmailConfirmationToken\CreateEmailConfirmationTokenDto;
|
||||
use App\Email\EmailConfirmationToken\EmailConfirmationToken;
|
||||
use App\Email\EmailConfirmationToken\EmailConfirmationTokenRepository;
|
||||
use App\Exceptions\BadRequestException;
|
||||
|
||||
class CreateEmailConfirmationToken
|
||||
{
|
||||
public function __construct(
|
||||
private EmailConfirmationTokenRepository $tokenRepository,
|
||||
private Clock $clock,
|
||||
private TokenGenerator $tokenGenerator,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* @throws BadRequestException
|
||||
*/
|
||||
public function execute(
|
||||
CreateEmailConfirmationTokenRequest $request,
|
||||
): EmailConfirmationToken {
|
||||
if ($request->user === null) {
|
||||
throw new BadRequestException('user is required');
|
||||
}
|
||||
if ($request->minuteOffset === null) {
|
||||
throw new BadRequestException('minuteOffset is required');
|
||||
}
|
||||
|
||||
$existingToken = $this->tokenRepository->findByUser($request->user);
|
||||
if ($existingToken !== null) {
|
||||
$this->tokenRepository->delete($existingToken->getId());
|
||||
}
|
||||
|
||||
return $this->tokenRepository->create(
|
||||
new CreateEmailConfirmationTokenDto(
|
||||
user: $request->user,
|
||||
availableTo: $this->clock->now()->modify(
|
||||
"+{$request->minuteOffset} minutes",
|
||||
),
|
||||
token: $this->tokenGenerator->generate(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue