Skip to content

Commit aa998e8

Browse files
authored
Feature/serialzer cache (#244)
* feat: cache smart cache on serializers Change-Id: I0d0994bf1da352a7a3b0d5a8427a379ce78cf56a * fix: expand relations on events related serializers Signed-off-by: [email protected] <[email protected]> Change-Id: Ifbd7abbb73ff7be2a280768710df5e45a99c80fc * refactor: add serializer decorator for params pre processing refactor: removed unused code fix: add relation and field usage over all serializers Change-Id: If3903f5965535fb792babe4c79bc570a07b633d9 * fix: added validation exception Change-Id: I9bb93caf91b909c611de813ca4af49300590cffa --------- Signed-off-by: [email protected] <[email protected]>
1 parent 2bf17cc commit aa998e8

File tree

160 files changed

+1478
-558
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

160 files changed

+1478
-558
lines changed

Libs/ModelSerializers/AbstractSerializer.php

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ public function __construct($object, IResourceServerContext $resource_server_con
5050
$this->resource_server_context = $resource_server_context;
5151
}
5252

53-
protected static $array_mappings = [
54-
];
53+
protected static $array_mappings = [];
5554

5655
protected static $allowed_fields = [];
5756

@@ -62,7 +61,7 @@ public function __construct($object, IResourceServerContext $resource_server_con
6261
/**
6362
* @return array
6463
*/
65-
protected function getAllowedFields():array
64+
public function getAllowedFields():array
6665
{
6766
try {
6867
$allowed_fields = [];
@@ -135,7 +134,7 @@ protected function getExpandsMappings():array
135134
/**
136135
* @return array
137136
*/
138-
protected function getAllowedRelations():array
137+
public function getAllowedRelations():array
139138
{
140139
try {
141140
$relations = [];
@@ -169,6 +168,11 @@ protected function getAllowedRelations():array
169168
}
170169
}
171170

171+
static public function getFirstLevelAllowedFields(array $relations):array{
172+
return array_filter($relations, function($elem) {
173+
return !str_contains(trim($elem), ".");
174+
});
175+
}
172176
/**
173177
* @return array
174178
*/
@@ -415,7 +419,7 @@ protected function _expand(array $values, ?string $expand, array $fields = [], a
415419
* @param string $prefix
416420
* @return string
417421
*/
418-
public static function filterExpandByPrefix(?string $expand_str, string $prefix):?string
422+
public static function filterExpandByPrefix(?string $expand_str, string $prefix, string $default = ''):?string
419423
{
420424
if(empty($expand_str)) return '';
421425
$expand_to = explode(',', $expand_str);
@@ -428,6 +432,10 @@ public static function filterExpandByPrefix(?string $expand_str, string $prefix)
428432
if (strlen($res) > 0) $res .= ',';
429433
$res .= str_replace_first($prefix . ".", "", strtolower(trim($filtered_expand_elem)));
430434
}
435+
if(!empty($default)){
436+
if(strlen($res) > 0) $res .= ',';
437+
$res .= $default;
438+
}
431439
return $res;
432440
}
433441

Libs/ModelSerializers/IModelSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ interface IModelSerializer
2222
* @return array
2323
* @throw HTTP403ForbiddenException
2424
*/
25-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() );
25+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = []);
2626
}

app/Http/Controllers/Apis/Protected/Main/OAuth2TeamsApiController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,10 @@ public function getMyTeam($team_id){
148148
->getSerializer($team)
149149
->serialize
150150
(
151-
$expand = Request::input('expand',''),
152-
$fields = [],
151+
$expand = Request::input('expand', ''),
152+
$fields = [],
153153
$relations = [],
154-
$params = [
154+
$params = [
155155
'current_member' => $current_member
156156
]
157157
)

app/Http/Controllers/Apis/Protected/Summit/OAuth2PresentationCategoryGroupController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ public function getTrackGroupBySummit($summit_id, $track_group_id){
300300
if(is_null($track_group))
301301
return $this->error404();
302302

303-
return $this->ok(SerializerRegistry::getInstance()->getSerializer($track_group)->serialize( Request::input('expand', '')));
303+
return $this->ok(SerializerRegistry::getInstance()->getSerializer($track_group)->serialize(Request::input('expand', '')));
304304
} catch (ValidationException $ex1) {
305305
Log::warning($ex1);
306306
return $this->error412([$ex1->getMessage()]);

app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitApiController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ public function getAllSummitByIdOrSlugRegistrationStats($id)
448448
SerializerUtils::getExpand(),
449449
SerializerUtils::getFields(),
450450
SerializerUtils::getRelations(),
451-
[ 'filter' => $filter ]
451+
['filter' => $filter]
452452
)
453453
);
454454
});

app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitNotificationsApiController.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ public function approveNotification($summit_id, $notification_id){
334334
if (is_null($summit)) return $this->error404();
335335

336336
$notification = $this->push_notification_service->approveNotification($summit, $this->resource_server_context->getCurrentUser(), $notification_id);
337-
return $this->updated(SerializerRegistry::getInstance()->getSerializer($notification)->serialize( Request::input('expand', '')));
337+
return $this->updated(SerializerRegistry::getInstance()->getSerializer($notification)->serialize(Request::input('expand', '')));
338338
} catch (ValidationException $ex1) {
339339
Log::warning($ex1);
340340
return $this->error412(array($ex1->getMessage()));
@@ -358,7 +358,7 @@ public function unApproveNotification($summit_id, $notification_id){
358358
if (is_null($summit)) return $this->error404();
359359

360360
$notification = $this->push_notification_service->unApproveNotification($summit, $this->resource_server_context->getCurrentUser(), $notification_id);
361-
return $this->updated(SerializerRegistry::getInstance()->getSerializer($notification)->serialize( Request::input('expand', '')));
361+
return $this->updated(SerializerRegistry::getInstance()->getSerializer($notification)->serialize(Request::input('expand', '')));
362362
} catch (ValidationException $ex1) {
363363
Log::warning($ex1);
364364
return $this->error412(array($ex1->getMessage()));

app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitRSVPTemplatesApiController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public function getRSVPTemplate($summit_id, $template_id){
196196
return $this->error404();
197197
}
198198

199-
return $this->ok(SerializerRegistry::getInstance()->getSerializer($template)->serialize($expand,[], $relations));
199+
return $this->ok(SerializerRegistry::getInstance()->getSerializer($template)->serialize($expand, [], $relations));
200200
}
201201
catch (ValidationException $ex1) {
202202
Log::warning($ex1);

app/Http/Controllers/Apis/Protected/Summit/OAuth2SummitSpeakersApiController.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,9 +1037,9 @@ public function updateSpeaker($speaker_id)
10371037

10381038
return $this->updated(SerializerRegistry::getInstance()
10391039
->getSerializer($speaker, SerializerRegistry::SerializerType_Private)->serialize(
1040-
SerializerUtils::getExpand(),
1041-
SerializerUtils::getFields(),
1042-
SerializerUtils::getRelations()
1040+
SerializerUtils::getExpand(),
1041+
SerializerUtils::getFields(),
1042+
SerializerUtils::getRelations()
10431043
));
10441044
});
10451045
}

app/ModelSerializers/AbstractMemberSerializer.php

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,10 @@ class AbstractMemberSerializer extends SilverStripeSerializer
5858
* @param array $params
5959
* @return array
6060
*/
61-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
61+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
6262
{
6363
$member = $this->object;
6464
if(!$member instanceof Member) return [];
65-
66-
if(!count($relations)) $relations = $this->getAllowedRelations();
67-
6865
$values = parent::serialize($expand, $fields, $relations, $params);
6966

7067
if(in_array('groups', $relations) && !isset($values['groups']))

app/ModelSerializers/AffiliationSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ final class AffiliationSerializer extends SilverStripeSerializer
3030
'OrganizationId' => 'organization_id:json_int'
3131
];
3232

33-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
33+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
3434
{
3535
$affiliation = $this->object;
3636
if (!$affiliation instanceof Affiliation) return [];

app/ModelSerializers/Audit/AuditLogSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
class AuditLogSerializer extends SilverStripeSerializer
2424
{
2525

26-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
26+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
2727
{
2828
return parent::serialize($expand, $fields, $relations, $params);
2929
}

app/ModelSerializers/CCLA/TeamSerializer.php

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
* See the License for the specific language governing permissions and
1212
* limitations under the License.
1313
**/
14+
15+
use Libs\ModelSerializers\AbstractSerializer;
1416
use Models\Foundation\Main\CCLA\Team;
1517
use ModelSerializers\SerializerRegistry;
1618
use ModelSerializers\SilverStripeSerializer;
@@ -34,7 +36,7 @@ final class TeamSerializer extends SilverStripeSerializer
3436
* @param array $params
3537
* @return array
3638
*/
37-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
39+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
3840
{
3941
$team = $this->object;
4042

@@ -57,15 +59,25 @@ public function serialize($expand = null, array $fields = array(), array $relati
5759
if(isset($values['company_id']))
5860
{
5961
unset($values['company_id']);
60-
$values['company'] = SerializerRegistry::getInstance()->getSerializer($team->getCompany())->serialize($expand);
62+
$values['company'] = SerializerRegistry::getInstance()->getSerializer($team->getCompany())->serialize(
63+
AbstractSerializer::filterExpandByPrefix($expand, $relation),
64+
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
65+
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
66+
$params
67+
);
6168
}
6269
}
6370
break;
6471
case 'members':{
65-
unset( $values['members']);
72+
unset($values['members']);
6673
$members = [];
6774
foreach($team->getMembers() as $member){
68-
$members[] = SerializerRegistry::getInstance()->getSerializer($member)->serialize($expand);
75+
$members[] = SerializerRegistry::getInstance()->getSerializer($member)->serialize(
76+
AbstractSerializer::filterExpandByPrefix($expand, $relation),
77+
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
78+
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
79+
$params
80+
);
6981
}
7082

7183
$values['members'] = $members;

app/ModelSerializers/ChatTeams/ChatTeamInvitationSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ final class ChatTeamInvitationSerializer extends SilverStripeSerializer
3939
* @param array $params
4040
* @return array
4141
*/
42-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
42+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
4343
{
4444
$invitation = $this->object;
4545
if(! $invitation instanceof ChatTeamInvitation) return [];

app/ModelSerializers/ChatTeams/ChatTeamMemberSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ final class ChatTeamMemberSerializer extends SilverStripeSerializer
3535
* @param array $params
3636
* @return array
3737
*/
38-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
38+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
3939
{
4040
$team_member = $this->object;
4141
if(! $team_member instanceof ChatTeamMember) return [];

app/ModelSerializers/ChatTeams/ChatTeamPushNotificationMessageSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ final class ChatTeamPushNotificationMessageSerializer extends SilverStripeSeria
3535
* @param array $params
3636
* @return array
3737
*/
38-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
38+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
3939
{
4040
$message = $this->object;
4141
if(! $message instanceof ChatTeamPushNotificationMessage) return [];

app/ModelSerializers/ChatTeams/ChatTeamSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ final class ChatTeamSerializer extends SilverStripeSerializer
3838
* @param array $params
3939
* @return array
4040
*/
41-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
41+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
4242
{
4343
$team = $this->object;
4444

app/ModelSerializers/Companies/CompanySerializer.php

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,10 @@ final class CompanySerializer extends SilverStripeSerializer
5454
* @param array $params
5555
* @return array
5656
*/
57-
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [] )
57+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
5858
{
5959
$values = parent::serialize($expand, $fields, $relations, $params);
6060
$company = $this->object;
61-
if(!count($relations)) $relations = $this->getAllowedRelations();
6261
if(!$company instanceof Company) return $values;
6362

6463
if (in_array('sponsorships', $relations)) {
@@ -86,7 +85,12 @@ public function serialize($expand = null, array $fields = [], array $relations =
8685
$sponsorships = [];
8786
foreach ($company->getSponsorships() as $s) {
8887
$sponsorships[] = SerializerRegistry::getInstance()->getSerializer($s)
89-
->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation));
88+
->serialize(
89+
AbstractSerializer::filterExpandByPrefix($expand, $relation),
90+
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
91+
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
92+
$params
93+
);
9094
}
9195
$values['sponsorships'] = $sponsorships;
9296
}
@@ -96,7 +100,12 @@ public function serialize($expand = null, array $fields = [], array $relations =
96100
$project_sponsorships = [];
97101
foreach ($company->getProjectSponsorships() as $ps) {
98102
$project_sponsorships[] = SerializerRegistry::getInstance()->getSerializer($ps)
99-
->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation));
103+
->serialize(
104+
AbstractSerializer::filterExpandByPrefix($expand, $relation),
105+
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
106+
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
107+
$params
108+
);
100109
}
101110
$values['project_sponsorships'] = $project_sponsorships;
102111
}

app/ModelSerializers/Companies/SponsoredProjectSerializer.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,10 @@ final class SponsoredProjectSerializer extends SilverStripeSerializer
5353
* @param array $params
5454
* @return array
5555
*/
56-
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [] )
56+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
5757
{
5858
$values = parent::serialize($expand, $fields, $relations, $params);
5959
$project = $this->object;
60-
if(!count($relations)) $relations = $this->getAllowedRelations();
6160
if(!$project instanceof SponsoredProject) return $values;
6261

6362
if (!empty($expand)) {
@@ -67,7 +66,12 @@ public function serialize($expand = null, array $fields = [], array $relations =
6766
$parentProject = $project->getParentProject();
6867
if (!is_null($parentProject) && $project instanceof SponsoredProject) {
6968
$values['parent_project'] = SerializerRegistry::getInstance()->getSerializer($project->getParentProject())
70-
->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation));
69+
->serialize(
70+
AbstractSerializer::filterExpandByPrefix($expand, $relation),
71+
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
72+
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
73+
$params
74+
);
7175
}
7276
}
7377
}

app/ModelSerializers/ExtraQuestionAnswerSerializer.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,12 @@ class ExtraQuestionAnswerSerializer extends SilverStripeSerializer
3232
* @param array $params
3333
* @return array
3434
*/
35-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
35+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
3636
{
3737
$answer = $this->object;
3838
if (!$answer instanceof ExtraQuestionAnswer) return [];
3939
$values = parent::serialize($expand, $fields, $relations, $params);
4040

41-
if (!count($relations)) $relations = $this->getAllowedRelations();
42-
4341
if (!empty($expand)) {
4442
$exp_expand = explode(',', $expand);
4543
foreach ($exp_expand as $relation) {
@@ -50,7 +48,12 @@ public function serialize($expand = null, array $fields = array(), array $relati
5048
if ($answer->hasQuestion()) {
5149
unset($values['question_id']);
5250
$values['question'] = SerializerRegistry::getInstance()->getSerializer($answer->getQuestion())
53-
->serialize(AbstractSerializer::getExpandForPrefix('question', $expand));
51+
->serialize(
52+
AbstractSerializer::filterExpandByPrefix($expand, $relation),
53+
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
54+
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
55+
$params
56+
);
5457
}
5558
}
5659
break;

app/ModelSerializers/ExtraQuestionTypeSerializer.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,10 @@ public static function testRule($e){
5050
* @param array $params
5151
* @return array
5252
*/
53-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
53+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
5454
{
5555
$question = $this->object;
5656
if (!$question instanceof ExtraQuestionType) return [];
57-
if(!count($relations)) $relations = $this->getAllowedRelations();
5857
$values = parent::serialize($expand, $fields, $relations, $params);
5958
Log::debug(sprintf("ExtraQuestionTypeSerializer expand %s", $expand));
6059
if(in_array('values', $relations) && !isset($values['values']) && $question->allowsValues()) {

app/ModelSerializers/GroupSerializer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ final class GroupSerializer extends SilverStripeSerializer
4141
* @param array $params
4242
* @return array
4343
*/
44-
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
44+
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
4545
{
4646
$group = $this->object;
4747
if(! $group instanceof Group) return [];

0 commit comments

Comments
 (0)