<?php declare(strict_types=1); namespace App\Repositories; use App\Contracts\Search; use App\Models\CaptchaToken; use App\Services\CaptchaToken\BuilderCommand; use App\Services\Search\CreateSearchInstanceCommand; use App\Dto\Builder\CaptchaToken as CaptchaTokenDto; use Illuminate\Database\Eloquent\Builder; final readonly class CaptchaTokenRepository { public function __construct( private CreateSearchInstanceCommand $createSearchInstanceCommand, private BuilderCommand $builderCommand ) { } public function getCaptchaTokenById(int $id): ?CaptchaToken { return CaptchaToken::query()->where('id', $id)->first(); } public function getCaptchaTokens(CaptchaTokenDto $captchaTokenDto, array $with = [], ?int $userId = null): Search { $query = CaptchaToken::query() ->when($userId, function (Builder $query, int $userId) { $query->where('user_id', $userId); }) ->with($with); $query = $this->builderCommand->execute( query: $query, captchaTokenDto: $captchaTokenDto ); return $this->createSearchInstanceCommand->execute($query); } public function getCaptchaTokenByPublicToken(string $token): ?CaptchaToken { return CaptchaToken::query()->where('public_token', '=', $token)->first(); } public function getCaptchaTokenByPrivateToken(string $token): ?CaptchaToken { return CaptchaToken::query()->where('private_token', '=', $token)->first(); } }