Jacek Kowalski
4 hours ago 6b9278a5d57091fce636dbb640b380cfb990db6c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?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();
        }
    }
}