From 9e4fd6183e015fee94ff746f9e581b4f365fcca4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Fri, 10 Jun 2022 14:24:46 +0200 Subject: [PATCH] more fixes for calendar syncs --- .../MSGraphChangeNotificationHandler.php | 19 +++++++++---------- .../RemoteToLocalSync/CalendarRangeSyncer.php | 2 +- .../RemoteToLocalSync/CalendarSyncer.php | 9 +++------ .../Repository/UserRepository.php | 11 ++++++++--- .../Repository/UserRepositoryInterface.php | 2 +- 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/Bundle/ChillCalendarBundle/Messenger/Handler/MSGraphChangeNotificationHandler.php b/src/Bundle/ChillCalendarBundle/Messenger/Handler/MSGraphChangeNotificationHandler.php index 4e201af8e..bcc0a5bc9 100644 --- a/src/Bundle/ChillCalendarBundle/Messenger/Handler/MSGraphChangeNotificationHandler.php +++ b/src/Bundle/ChillCalendarBundle/Messenger/Handler/MSGraphChangeNotificationHandler.php @@ -14,9 +14,9 @@ namespace Chill\CalendarBundle\Messenger\Handler; use Chill\CalendarBundle\Messenger\Message\MSGraphChangeNotificationMessage; use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\MapCalendarToUser; use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\RemoteToLocalSync\CalendarRangeSyncer; +use Chill\CalendarBundle\RemoteCalendar\Connector\MSGraph\RemoteToLocalSync\CalendarSyncer; use Chill\CalendarBundle\Repository\CalendarRangeRepository; use Chill\CalendarBundle\Repository\CalendarRepository; -use Chill\CalendarBundle\Repository\InviteRepository; use Chill\MainBundle\Repository\UserRepository; use Doctrine\ORM\EntityManagerInterface; use Psr\Log\LoggerInterface; @@ -35,9 +35,9 @@ class MSGraphChangeNotificationHandler implements MessageHandlerInterface private CalendarRepository $calendarRepository; - private EntityManagerInterface $em; + private CalendarSyncer $calendarSyncer; - private InviteRepository $inviteRepository; + private EntityManagerInterface $em; private LoggerInterface $logger; @@ -49,8 +49,8 @@ class MSGraphChangeNotificationHandler implements MessageHandlerInterface CalendarRangeRepository $calendarRangeRepository, CalendarRangeSyncer $calendarRangeSyncer, CalendarRepository $calendarRepository, + CalendarSyncer $calendarSyncer, EntityManagerInterface $em, - InviteRepository $inviteRepository, LoggerInterface $logger, MapCalendarToUser $mapCalendarToUser, UserRepository $userRepository @@ -58,8 +58,8 @@ class MSGraphChangeNotificationHandler implements MessageHandlerInterface $this->calendarRangeRepository = $calendarRangeRepository; $this->calendarRangeSyncer = $calendarRangeSyncer; $this->calendarRepository = $calendarRepository; + $this->calendarSyncer = $calendarSyncer; $this->em = $em; - $this->inviteRepository = $inviteRepository; $this->logger = $logger; $this->mapCalendarToUser = $mapCalendarToUser; $this->userRepository = $userRepository; @@ -91,14 +91,13 @@ class MSGraphChangeNotificationHandler implements MessageHandlerInterface $this->calendarRangeSyncer->handleCalendarRangeSync($calendarRange, $notification, $user); $this->em->flush(); } elseif (null !== $calendar = $this->calendarRepository->findOneBy(['remoteId' => $remoteId])) { - $this->remoteToLocalSyncer->handleCalendarSync($calendar, $notification, $user); - $this->em->flush(); - } elseif (null !== $invite = $this->inviteRepository->findOneBy(['remoteId' => $remoteId])) { - $this->remoteToLocalSyncer->handleInviteSync($invite, $notification, $user); + $this->calendarSyncer->handleCalendarSync($calendar, $notification, $user); $this->em->flush(); } else { - $this->logger->info(__CLASS__ . ' id not found in any calendar, calendar range nor invite'); + $this->logger->info(__CLASS__ . ' id not found in any calendar nor calendar range'); } } + + $this->em->flush(); } } diff --git a/src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/RemoteToLocalSync/CalendarRangeSyncer.php b/src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/RemoteToLocalSync/CalendarRangeSyncer.php index 298bbc7b5..18d1e4632 100644 --- a/src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/RemoteToLocalSync/CalendarRangeSyncer.php +++ b/src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/RemoteToLocalSync/CalendarRangeSyncer.php @@ -69,7 +69,7 @@ class CalendarRangeSyncer 'remoteEventId' => $notification['resource'], ]); - return; + throw $clientException; } $lastModified = RemoteEventConverter::convertStringDateWithTimezone($new['lastModifiedDateTime']); diff --git a/src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/RemoteToLocalSync/CalendarSyncer.php b/src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/RemoteToLocalSync/CalendarSyncer.php index d04dc7005..db947e039 100644 --- a/src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/RemoteToLocalSync/CalendarSyncer.php +++ b/src/Bundle/ChillCalendarBundle/RemoteCalendar/Connector/MSGraph/RemoteToLocalSync/CalendarSyncer.php @@ -76,6 +76,8 @@ class CalendarSyncer 'calendarId' => $calendar->getId(), 'remoteEventId' => $notification['resource'], ]); + + throw $clientException; } if (false === $new['isOrganizer']) { @@ -142,18 +144,13 @@ class CalendarSyncer $invite = $calendar->getInviteForUser($user); switch ($status) { - // none, organizer, tentativelyAccepted, accepted, declined, notResponded. + // possible cases: none, organizer, tentativelyAccepted, accepted, declined, notResponded. case 'none': case 'notResponded': $invite->setStatus(Invite::PENDING); break; - case 'organizer': - throw new LogicException('should not happens'); - - break; - case 'tentativelyAccepted': $invite->setStatus(Invite::TENTATIVELY_ACCEPTED); diff --git a/src/Bundle/ChillMainBundle/Repository/UserRepository.php b/src/Bundle/ChillMainBundle/Repository/UserRepository.php index 10b53b143..dfb5c2c5d 100644 --- a/src/Bundle/ChillMainBundle/Repository/UserRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/UserRepository.php @@ -15,6 +15,7 @@ use Chill\MainBundle\Entity\GroupCenter; use Chill\MainBundle\Entity\User; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityRepository; +use Doctrine\ORM\NoResultException; use Doctrine\ORM\Query\ResultSetMapping; use Doctrine\ORM\Query\ResultSetMappingBuilder; use Doctrine\ORM\QueryBuilder; @@ -143,11 +144,15 @@ final class UserRepository implements UserRepositoryInterface return $this->repository->findOneBy($criteria, $orderBy); } - public function findOneByUsernameOrEmail(string $pattern) + public function findOneByUsernameOrEmail(string $pattern): ?User { - $qb = $this->queryByUsernameOrEmail($pattern); + $qb = $this->queryByUsernameOrEmail($pattern)->select('u'); - return $qb->getQuery()->getSingleResult(); + try { + return $qb->getQuery()->getSingleResult(); + } catch (NoResultException $e) { + return null; + } } /** diff --git a/src/Bundle/ChillMainBundle/Repository/UserRepositoryInterface.php b/src/Bundle/ChillMainBundle/Repository/UserRepositoryInterface.php index b4802264f..75e8b90b4 100644 --- a/src/Bundle/ChillMainBundle/Repository/UserRepositoryInterface.php +++ b/src/Bundle/ChillMainBundle/Repository/UserRepositoryInterface.php @@ -55,7 +55,7 @@ interface UserRepositoryInterface extends ObjectRepository public function findOneBy(array $criteria, ?array $orderBy = null): ?User; - public function findOneByUsernameOrEmail(string $pattern); + public function findOneByUsernameOrEmail(string $pattern): ?User; /** * Get the users having a specific flags.