From b0390a5924eb1664030edb06db9266f7cab706d2 Mon Sep 17 00:00:00 2001 From: Sebastian Marcet Date: Wed, 28 Sep 2016 15:04:14 -0300 Subject: [PATCH] Add to my schedule optimization updated algorithm to check if an event is or not on attendee schedule Change-Id: I5b95216901c164af76734f3002e03856e028ca2c --- .../Summit/Attendees/SummitAttendee.php | 45 ++++++++++++++----- tests/OAuth2SummitApiTest.php | 8 ++-- tests/ProtectedApiTest.php | 2 +- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/app/Models/Foundation/Summit/Attendees/SummitAttendee.php b/app/Models/Foundation/Summit/Attendees/SummitAttendee.php index b0b4bb7c..f4e918ab 100644 --- a/app/Models/Foundation/Summit/Attendees/SummitAttendee.php +++ b/app/Models/Foundation/Summit/Attendees/SummitAttendee.php @@ -172,10 +172,11 @@ class SummitAttendee extends SilverstripeBaseModel */ public function add2Schedule(SummitEvent $event) { - $schedule = $this->getScheduleByEvent($event); - - if($schedule !== false) - throw new ValidationException(sprintf('Event %s already belongs to attendee %s schedule.', $event->getId(), $this->getId())); + if($this->isOnSchedule($event)) + throw new ValidationException + ( + sprintf('Event %s already belongs to attendee %s schedule.', $event->getId(), $this->getId()) + ); $schedule = new SummitAttendeeSchedule; @@ -192,12 +193,12 @@ class SummitAttendee extends SilverstripeBaseModel public function removeFromSchedule(SummitEvent $event) { $schedule = $this->getScheduleByEvent($event); - if($schedule === false) + + if(is_null($schedule)) throw new ValidationException ( sprintf('Event %s does not belongs to attendee %s schedule.', $event->getId(), $this->getId()) ); - $this->schedule->removeElement($schedule); $schedule->clearAttendee(); } @@ -208,17 +209,37 @@ class SummitAttendee extends SilverstripeBaseModel */ public function isOnSchedule(SummitEvent $event) { - return $this->getScheduleByEvent($event) !== false; + $sql = <<prepareRawSQL($sql); + $stmt->execute([ + 'attendee_id' => $this->getId(), + 'event_id' => $event->getId() + ]); + $res = $stmt->fetchAll(\PDO::FETCH_COLUMN); + return count($res) > 0 ? intval($res[0]) > 0 : false; } /** * @param SummitEvent $event - * @return SummitAttendeeSchedule + * @return null| SummitAttendeeSchedule */ public function getScheduleByEvent(SummitEvent $event){ - return $this->schedule->filter(function($e) use($event){ - return $e->getEvent()->getId() == $event->getId(); - })->first(); + + $query = $this->createQuery("SELECT s from models\summit\SummitAttendeeSchedule s + JOIN s.attendee a + JOIN s.event e + WHERE a.id = :attendee_id and e.published = 1 and e.id = :event_id + "); + return $query + ->setParameter('attendee_id', $this->getIdentifier()) + ->setParameter('event_id', $event->getIdentifier()) + ->getSingleResult(); } /** @@ -229,7 +250,7 @@ class SummitAttendee extends SilverstripeBaseModel { $schedule = $this->getScheduleByEvent($event); - if($schedule === false) + if(is_null($schedule)) throw new ValidationException(sprintf('Event %s does not belongs to attendee %s schedule.', $event->ID, $this->ID)); $schedule->setIsCheckedIn(true); } diff --git a/tests/OAuth2SummitApiTest.php b/tests/OAuth2SummitApiTest.php index 2ca9a2b7..26a00f38 100644 --- a/tests/OAuth2SummitApiTest.php +++ b/tests/OAuth2SummitApiTest.php @@ -218,7 +218,7 @@ final class OAuth2SummitApiTest extends ProtectedApiTest $this->assertTrue(!is_null($attendee)); } - public function testCurrentSummitMyAttendeeAddToSchedule($event_id = 7202, $summit_id = 6) + public function testCurrentSummitMyAttendeeAddToSchedule($event_id = 16645, $summit_id = 7) { $params = array ( @@ -266,9 +266,9 @@ final class OAuth2SummitApiTest extends ProtectedApiTest public function testCurrentSummitMyAttendeeScheduleUnset() { - $event_id = 7863; - $summit_id = 6; - $this->testCurrentSummitMyAttendeeAddToSchedule($event_id, $summit_id); + $event_id = 16645; + $summit_id = 7; + //$this->testCurrentSummitMyAttendeeAddToSchedule($event_id, $summit_id); $params = array ( 'id' => $summit_id, diff --git a/tests/ProtectedApiTest.php b/tests/ProtectedApiTest.php index 1bde12e5..76f8a700 100644 --- a/tests/ProtectedApiTest.php +++ b/tests/ProtectedApiTest.php @@ -50,7 +50,7 @@ class AccessTokenServiceStub implements IAccessTokenService $url . '/summits/read-notifications', ); - return AccessToken::createFromParams('123456789', implode(' ', $scopes), '1', $realm, '1','11624', 3600, 'WEB_APPLICATION', '', ''); + return AccessToken::createFromParams('123456789', implode(' ', $scopes), '1', $realm, '1','13867', 3600, 'WEB_APPLICATION', '', ''); } }