diff --git a/src/FormRequest/CreateUserRequest.php b/src/FormRequest/CreateUserRequest.php index 5e0b740..523429c 100644 --- a/src/FormRequest/CreateUserRequest.php +++ b/src/FormRequest/CreateUserRequest.php @@ -3,6 +3,7 @@ namespace App\FormRequest; use Symfony\Component\Validator\Constraints as Assert; +use App\Validator\Constraints as AppAssert; /** * @todo implement UniqueEntity constraint for DTO and use it here @@ -37,6 +38,7 @@ class CreateUserRequest * * @Assert\NotBlank() * @Assert\Length(min="32", max="32") + * @AppAssert\ValidInvite() */ public $inviteCode; diff --git a/src/Validator/Constraints/ValidInvite.php b/src/Validator/Constraints/ValidInvite.php new file mode 100644 index 0000000..1a0d455 --- /dev/null +++ b/src/Validator/Constraints/ValidInvite.php @@ -0,0 +1,19 @@ +inviteRepo = $inviteRepo; + } + + /** + * @param mixed $value + * @param ValidInvite $constraint + */ + public function validate($value, Constraint $constraint) + { + /** @var Invite $invite */ + if (null === $invite = $this->inviteRepo->findOneBy(['code' => $value])) { + $this->context->buildViolation($constraint->notFoundMessage) + ->setParameter('{{ code }}', $value) + ->addViolation() + ; + + return; + } + + if (null !== $invite->getUsedBy()) { + $this->context->buildViolation($constraint->usedMessage) + ->setParameter('{{ code }}', $value) + ->addViolation() + ; + } + } +} \ No newline at end of file