From 29ce8f359098481006301ebc4b61fdafab3109e1 Mon Sep 17 00:00:00 2001 From: smarcet Date: Thu, 22 Oct 2020 08:39:40 -0300 Subject: [PATCH] Improved performance at summit event serializer Change-Id: Ib2c52151f21ff158f95863efc6e33240dbe5a974 Signed-off-by: smarcet --- .../Presentation/PresentationSerializer.php | 87 +++++++++++++++---- .../Summit/SummitEventSerializer.php | 10 ++- 2 files changed, 78 insertions(+), 19 deletions(-) diff --git a/app/ModelSerializers/Summit/Presentation/PresentationSerializer.php b/app/ModelSerializers/Summit/Presentation/PresentationSerializer.php index ea188ba1..1ae46d43 100644 --- a/app/ModelSerializers/Summit/Presentation/PresentationSerializer.php +++ b/app/ModelSerializers/Summit/Presentation/PresentationSerializer.php @@ -85,9 +85,7 @@ class PresentationSerializer extends SummitEventSerializer { $slides = []; foreach ($presentation->getSlides() as $slide) { - $slide_values = SerializerRegistry::getInstance()->getSerializer($slide)->serialize(AbstractSerializer::filterExpandByPrefix($expand, 'slides')); - if(empty($slide_values['link'])) continue; - $slides[] = $slide_values; + $slides[] = $slide->getId(); } $values['slides'] = $slides; } @@ -96,7 +94,7 @@ class PresentationSerializer extends SummitEventSerializer { $public_comments = []; foreach ($presentation->getPublicComments() as $comment) { - $public_comments[] = SerializerRegistry::getInstance()->getSerializer($comment)->serialize(AbstractSerializer::filterExpandByPrefix($expand, 'public_comments')); + $public_comments[] = $comment->getId(); } $values['public_comments'] = $public_comments; } @@ -105,9 +103,7 @@ class PresentationSerializer extends SummitEventSerializer { $links = []; foreach ($presentation->getLinks() as $link) { - $link_values = SerializerRegistry::getInstance()->getSerializer($link)->serialize(AbstractSerializer::filterExpandByPrefix($expand, 'links')); - if(empty($link_values['link'])) continue; - $links[] = $link_values; + $links[] = $link->getId(); } $values['links'] = $links; } @@ -116,9 +112,7 @@ class PresentationSerializer extends SummitEventSerializer { $videos = []; foreach ($presentation->getVideos() as $video) { - $video_values = SerializerRegistry::getInstance()->getSerializer($video)->serialize(AbstractSerializer::filterExpandByPrefix($expand, 'videos')); - if(empty($video_values['youtube_id'])) continue; - $videos[] = $video_values; + $videos[] = $video->getId(); } $values['videos'] = $videos; } @@ -126,15 +120,10 @@ class PresentationSerializer extends SummitEventSerializer if(in_array('media_uploads', $relations)) { $media_uploads = []; - $serializerType = SerializerRegistry::SerializerType_Public; - $currentUser = $this->resource_server_context->getCurrentUser(); - if(!is_null($currentUser) && $currentUser->isAdmin()){ - $serializerType = SerializerRegistry::SerializerType_Private; + foreach ($presentation->getMediaUploads() as $mediaUpload) { + $media_uploads[] = $mediaUpload->getId(); } - foreach ($presentation->getMediaUploads() as $mediaUpload) { - $media_uploads[] = SerializerRegistry::getInstance()->getSerializer($mediaUpload, $serializerType)->serialize(AbstractSerializer::filterExpandByPrefix($expand, 'media_uploads'));; - } $values['media_uploads'] = $media_uploads; } @@ -142,7 +131,7 @@ class PresentationSerializer extends SummitEventSerializer { $answers = []; foreach ($presentation->getAnswers() as $answer) { - $answers[]= SerializerRegistry::getInstance()->getSerializer($answer)->serialize(AbstractSerializer::filterExpandByPrefix($expand, 'extra_questions')); + $answers[] = $answer->getId(); } $values['extra_questions'] = $answers; } @@ -161,6 +150,7 @@ class PresentationSerializer extends SummitEventSerializer $values['moderator'] = SerializerRegistry::getInstance()->getSerializer($presentation->getModerator())->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); } } + break; case 'creator':{ if($presentation->getCreatorId() > 0) { $member = $this->resource_server_context->getCurrentUser(); @@ -180,6 +170,67 @@ class PresentationSerializer extends SummitEventSerializer } } break; + case 'slides':{ + $slides = []; + foreach ($presentation->getSlides() as $slide) { + $slide_values = SerializerRegistry::getInstance()->getSerializer($slide)->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); + if(empty($slide_values['link'])) continue; + $slides[] = $slide_values; + } + $values['slides'] = $slides; + } + break; + case 'public_comments':{ + $public_comments = []; + foreach ($presentation->getPublicComments() as $comment) { + $public_comments[] = SerializerRegistry::getInstance()->getSerializer($comment)->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); + } + $values['public_comments'] = $public_comments; + } + break; + case 'links':{ + $links = []; + foreach ($presentation->getLinks() as $link) { + $link_values = SerializerRegistry::getInstance()->getSerializer($link)->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); + if(empty($link_values['link'])) continue; + $links[] = $link_values; + } + $values['links'] = $links; + } + break; + case 'videos':{ + $videos = []; + foreach ($presentation->getVideos() as $video) { + $video_values = SerializerRegistry::getInstance()->getSerializer($video)->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); + if(empty($video_values['youtube_id'])) continue; + $videos[] = $video_values; + } + $values['videos'] = $videos; + } + break; + case 'media_uploads':{ + $media_uploads = []; + $serializerType = SerializerRegistry::SerializerType_Public; + $currentUser = $this->resource_server_context->getCurrentUser(); + if(!is_null($currentUser) && $currentUser->isAdmin()){ + $serializerType = SerializerRegistry::SerializerType_Private; + } + + foreach ($presentation->getMediaUploads() as $mediaUpload) { + $media_uploads[] = SerializerRegistry::getInstance()->getSerializer($mediaUpload, $serializerType)->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); + } + + $values['media_uploads'] = $media_uploads; + } + break; + case 'extra_questions':{ + $answers = []; + foreach ($presentation->getAnswers() as $answer) { + $answers[]= SerializerRegistry::getInstance()->getSerializer($answer)->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); + } + $values['extra_questions'] = $answers; + } + break; } } } diff --git a/app/ModelSerializers/Summit/SummitEventSerializer.php b/app/ModelSerializers/Summit/SummitEventSerializer.php index e3b295c1..23b08700 100644 --- a/app/ModelSerializers/Summit/SummitEventSerializer.php +++ b/app/ModelSerializers/Summit/SummitEventSerializer.php @@ -112,7 +112,7 @@ class SummitEventSerializer extends SilverStripeSerializer { $tags = []; foreach ($event->getTags() as $tag) { - $tags[] = SerializerRegistry::getInstance()->getSerializer($tag)->serialize(); + $tags[] = $tag->getId(); } $values['tags'] = $tags; } @@ -199,6 +199,14 @@ class SummitEventSerializer extends SilverStripeSerializer $values['type'] = SerializerRegistry::getInstance()->getSerializer($event->getType())->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); } break; + case 'tags':{ + $tags = []; + foreach ($event->getTags() as $tag) { + $tags[] = SerializerRegistry::getInstance()->getSerializer($tag)->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation)); + } + $values['tags'] = $tags; + } + break; } } }