From 0d36ca39ddf313507483311b6a6e248d4fd99810 Mon Sep 17 00:00:00 2001 From: Manuel Aranda Date: Wed, 7 May 2025 16:33:36 +0200 Subject: [PATCH] refs #1965. New remoteCalendar rule --- migrations/Version20250506094654.php | 31 ++++++++++++ src/Dto/Input/RemoteCalendarRuleInput.php | 3 ++ .../Constraints/RemoteCalendarRuleUnique.php | 23 +++++++++ .../RemoteCalendarRuleUniqueValidator.php | 48 +++++++++++++++++++ 4 files changed, 105 insertions(+) create mode 100644 migrations/Version20250506094654.php create mode 100644 src/Validator/Constraints/RemoteCalendarRuleUnique.php create mode 100644 src/Validator/Constraints/RemoteCalendarRuleUniqueValidator.php diff --git a/migrations/Version20250506094654.php b/migrations/Version20250506094654.php new file mode 100644 index 0000000..a3d3b19 --- /dev/null +++ b/migrations/Version20250506094654.php @@ -0,0 +1,31 @@ +addSql('ALTER TABLE pxe_template ADD is_default TINYINT(1) DEFAULT NULL'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('ALTER TABLE pxe_template DROP is_default'); + } +} diff --git a/src/Dto/Input/RemoteCalendarRuleInput.php b/src/Dto/Input/RemoteCalendarRuleInput.php index c0883c4..55fd47c 100644 --- a/src/Dto/Input/RemoteCalendarRuleInput.php +++ b/src/Dto/Input/RemoteCalendarRuleInput.php @@ -5,9 +5,12 @@ namespace App\Dto\Input; use ApiPlatform\Metadata\ApiProperty; use App\Dto\Output\RemoteCalendarOutput; use App\Entity\RemoteCalendarRule; +use App\Validator\Constraints\RemoteCalendarRuleUnique; use Symfony\Component\Serializer\Annotation\Groups; use Symfony\Component\Validator\Constraints as Assert; + +#[RemoteCalendarRuleUnique] final class RemoteCalendarRuleInput { #[Assert\NotNull()] diff --git a/src/Validator/Constraints/RemoteCalendarRuleUnique.php b/src/Validator/Constraints/RemoteCalendarRuleUnique.php new file mode 100644 index 0000000..ef87639 --- /dev/null +++ b/src/Validator/Constraints/RemoteCalendarRuleUnique.php @@ -0,0 +1,23 @@ +message = 'Ya hay una regla de calendario marcada como no disponible o reservada.'; + } + + public function getTargets(): string + { + return self::CLASS_CONSTRAINT; + } +} \ No newline at end of file diff --git a/src/Validator/Constraints/RemoteCalendarRuleUniqueValidator.php b/src/Validator/Constraints/RemoteCalendarRuleUniqueValidator.php new file mode 100644 index 0000000..8597b18 --- /dev/null +++ b/src/Validator/Constraints/RemoteCalendarRuleUniqueValidator.php @@ -0,0 +1,48 @@ +requestStack->getCurrentRequest(); + + if (!$value instanceof RemoteCalendarRuleInput) { + return; + } + + if ($value->isRemoteAvailable) { + return; + } + + if ($request && $request->getMethod() !== 'POST') { + return; + } + + $isRemoteAvailable = $this->entityManager->getRepository(RemoteCalendarRule::class) + ->findOneBy([ + 'remoteCalendar' => $value->remoteCalendar->getEntity(), + 'isRemoteAvailable' => false, + ]); + + if ($isRemoteAvailable) { + $this->context->buildViolation($constraint->message)->addViolation(); + } + + } +} \ No newline at end of file