From 392ea3f16f6ca70702f43371c1115c5275e5d1a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Fri, 3 Nov 2023 11:09:03 +0100 Subject: [PATCH] Feat: Avoid adding of existing availabilities --- src/Entity/Availability.php | 6 ++++++ src/Repository/AvailabilityRepository.php | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/Entity/Availability.php b/src/Entity/Availability.php index 0c8bed7..cc18cda 100644 --- a/src/Entity/Availability.php +++ b/src/Entity/Availability.php @@ -10,9 +10,15 @@ use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; +use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; #[ORM\Entity(repositoryClass: AvailabilityRepository::class)] +#[UniqueEntity( + fields: ['dateFrom', 'dateTo'], + message: 'Eine Verfügbarkeit für diesen Zeitraum ist bereits vorhanden', + repositoryMethod: 'assertUnique' +)] class Availability implements BlameableEntityInterface, TimestampableEntityInterface, SoftDeletableEntityInterface { use BlameableEntity; diff --git a/src/Repository/AvailabilityRepository.php b/src/Repository/AvailabilityRepository.php index 3812d44..7666551 100644 --- a/src/Repository/AvailabilityRepository.php +++ b/src/Repository/AvailabilityRepository.php @@ -78,4 +78,20 @@ class AvailabilityRepository extends ServiceEntityRepository ->getResult() ; } + + public function assertUnique(array $fields): array + { + $qb = $this->createQueryBuilder('availability'); + + return $qb + ->where($qb->expr()->andX( + $qb->expr()->eq('availability.dateFrom', ':dateFrom'), + $qb->expr()->eq('availability.dateTo', ':dateTo'), + $qb->expr()->isNull('availability.owner') + )) + ->setParameters($fields) + ->getQuery() + ->getResult() + ; + } }