service-captcha/app/Repositories/DataCaptchaRepository.php
Leonid Nikitin 520a3ba068
Revived API POST /api/v1/captcha.
Captcha validation has been adjusted.
2023-11-26 15:09:42 +06:00

51 lines
1.4 KiB
PHP

<?php declare(strict_types=1);
namespace App\Repositories;
use App\Dto\Repository\DataCaptchaRepository\DataCaptcha;
use App\Exceptions\Repositories\DataCaptchaRepositoryException;
use App\Models\Captcha;
use App\Services\GenerateTokenCommand\GenerateTokenUlidCommand;
use Carbon\Carbon;
use Illuminate\Support\Facades\Cache;
final readonly class DataCaptchaRepository
{
public function __construct(
private GenerateTokenUlidCommand $generateTokenUlidCommand,
) { }
public function store(Captcha $captcha, array $coordinators, Carbon $expires): string
{
$key = $this->generateTokenUlidCommand->execute() . '_' . time();
$data = [
'id' => $captcha->id,
'coordinators' => $coordinators
];
if (!Cache::driver('redis')->add($key, $data, $expires) ) {
throw new DataCaptchaRepositoryException('Could not create cache for captcha: ' . $captcha->id . ' key: ' . $key);
}
return $key;
}
public function getByKey(string $key): ?DataCaptcha
{
$dataCaptcha = Cache::driver('redis')->get($key);
if (is_null($dataCaptcha)) {
return null;
}
return new DataCaptcha(
captchaId: $dataCaptcha['id'],
coordinators: $dataCaptcha['coordinators'],
);
}
public function destroy(string $key): void
{
Cache::driver('redis')->delete($key);
}
}