<?php
|
declare(strict_types=1);
|
|
namespace App\Validator;
|
|
use App\Repository\BookRepository;
|
use App\Repository\OustedBookRepository;
|
use Symfony\Component\Validator\Constraint;
|
use Symfony\Component\Validator\ConstraintValidator;
|
use Symfony\Component\Validator\Exception\UnexpectedTypeException;
|
|
class AvailableBookIdValidator extends ConstraintValidator {
|
public function __construct(
|
private readonly BookRepository $books,
|
private readonly OustedBookRepository $oustedBooks,
|
) {
|
}
|
|
public function validate(mixed $value, Constraint $constraint): void {
|
if (!$constraint instanceof AvailableBookId) {
|
throw new UnexpectedTypeException($constraint, AvailableBookId::class);
|
}
|
|
if ($value === null) {
|
return;
|
}
|
|
if ($this->books->find($value) || $this->oustedBooks->find($value)) {
|
$this->context->buildViolation($constraint->message)->setTranslationDomain('messages')->addViolation();
|
}
|
}
|
}
|