Skip to content

Commit

Permalink
Feature/serialzer cache (#244)
Browse files Browse the repository at this point in the history
* 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]>
  • Loading branch information
smarcet authored Mar 28, 2024
1 parent 2bf17cc commit aa998e8
Show file tree
Hide file tree
Showing 160 changed files with 1,478 additions and 558 deletions.
18 changes: 13 additions & 5 deletions Libs/ModelSerializers/AbstractSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,7 @@ public function __construct($object, IResourceServerContext $resource_server_con
$this->resource_server_context = $resource_server_context;
}

protected static $array_mappings = [
];
protected static $array_mappings = [];

protected static $allowed_fields = [];

Expand All @@ -62,7 +61,7 @@ public function __construct($object, IResourceServerContext $resource_server_con
/**
* @return array
*/
protected function getAllowedFields():array
public function getAllowedFields():array
{
try {
$allowed_fields = [];
Expand Down Expand Up @@ -135,7 +134,7 @@ protected function getExpandsMappings():array
/**
* @return array
*/
protected function getAllowedRelations():array
public function getAllowedRelations():array
{
try {
$relations = [];
Expand Down Expand Up @@ -169,6 +168,11 @@ protected function getAllowedRelations():array
}
}

static public function getFirstLevelAllowedFields(array $relations):array{
return array_filter($relations, function($elem) {
return !str_contains(trim($elem), ".");
});
}
/**
* @return array
*/
Expand Down Expand Up @@ -415,7 +419,7 @@ protected function _expand(array $values, ?string $expand, array $fields = [], a
* @param string $prefix
* @return string
*/
public static function filterExpandByPrefix(?string $expand_str, string $prefix):?string
public static function filterExpandByPrefix(?string $expand_str, string $prefix, string $default = ''):?string
{
if(empty($expand_str)) return '';
$expand_to = explode(',', $expand_str);
Expand All @@ -428,6 +432,10 @@ public static function filterExpandByPrefix(?string $expand_str, string $prefix)
if (strlen($res) > 0) $res .= ',';
$res .= str_replace_first($prefix . ".", "", strtolower(trim($filtered_expand_elem)));
}
if(!empty($default)){
if(strlen($res) > 0) $res .= ',';
$res .= $default;
}
return $res;
}

Expand Down
2 changes: 1 addition & 1 deletion Libs/ModelSerializers/IModelSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,5 @@ interface IModelSerializer
* @return array
* @throw HTTP403ForbiddenException
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() );
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = []);
}
Original file line number Diff line number Diff line change
Expand Up @@ -148,10 +148,10 @@ public function getMyTeam($team_id){
->getSerializer($team)
->serialize
(
$expand = Request::input('expand',''),
$fields = [],
$expand = Request::input('expand', ''),
$fields = [],
$relations = [],
$params = [
$params = [
'current_member' => $current_member
]
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ public function getTrackGroupBySummit($summit_id, $track_group_id){
if(is_null($track_group))
return $this->error404();

return $this->ok(SerializerRegistry::getInstance()->getSerializer($track_group)->serialize( Request::input('expand', '')));
return $this->ok(SerializerRegistry::getInstance()->getSerializer($track_group)->serialize(Request::input('expand', '')));
} catch (ValidationException $ex1) {
Log::warning($ex1);
return $this->error412([$ex1->getMessage()]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ public function getAllSummitByIdOrSlugRegistrationStats($id)
SerializerUtils::getExpand(),
SerializerUtils::getFields(),
SerializerUtils::getRelations(),
[ 'filter' => $filter ]
['filter' => $filter]
)
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ public function approveNotification($summit_id, $notification_id){
if (is_null($summit)) return $this->error404();

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

$notification = $this->push_notification_service->unApproveNotification($summit, $this->resource_server_context->getCurrentUser(), $notification_id);
return $this->updated(SerializerRegistry::getInstance()->getSerializer($notification)->serialize( Request::input('expand', '')));
return $this->updated(SerializerRegistry::getInstance()->getSerializer($notification)->serialize(Request::input('expand', '')));
} catch (ValidationException $ex1) {
Log::warning($ex1);
return $this->error412(array($ex1->getMessage()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ public function getRSVPTemplate($summit_id, $template_id){
return $this->error404();
}

return $this->ok(SerializerRegistry::getInstance()->getSerializer($template)->serialize($expand,[], $relations));
return $this->ok(SerializerRegistry::getInstance()->getSerializer($template)->serialize($expand, [], $relations));
}
catch (ValidationException $ex1) {
Log::warning($ex1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1037,9 +1037,9 @@ public function updateSpeaker($speaker_id)

return $this->updated(SerializerRegistry::getInstance()
->getSerializer($speaker, SerializerRegistry::SerializerType_Private)->serialize(
SerializerUtils::getExpand(),
SerializerUtils::getFields(),
SerializerUtils::getRelations()
SerializerUtils::getExpand(),
SerializerUtils::getFields(),
SerializerUtils::getRelations()
));
});
}
Expand Down
5 changes: 1 addition & 4 deletions app/ModelSerializers/AbstractMemberSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,10 @@ class AbstractMemberSerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$member = $this->object;
if(!$member instanceof Member) return [];

if(!count($relations)) $relations = $this->getAllowedRelations();

$values = parent::serialize($expand, $fields, $relations, $params);

if(in_array('groups', $relations) && !isset($values['groups']))
Expand Down
2 changes: 1 addition & 1 deletion app/ModelSerializers/AffiliationSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ final class AffiliationSerializer extends SilverStripeSerializer
'OrganizationId' => 'organization_id:json_int'
];

public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$affiliation = $this->object;
if (!$affiliation instanceof Affiliation) return [];
Expand Down
2 changes: 1 addition & 1 deletion app/ModelSerializers/Audit/AuditLogSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
class AuditLogSerializer extends SilverStripeSerializer
{

public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
return parent::serialize($expand, $fields, $relations, $params);
}
Expand Down
20 changes: 16 additions & 4 deletions app/ModelSerializers/CCLA/TeamSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
**/

use Libs\ModelSerializers\AbstractSerializer;
use Models\Foundation\Main\CCLA\Team;
use ModelSerializers\SerializerRegistry;
use ModelSerializers\SilverStripeSerializer;
Expand All @@ -34,7 +36,7 @@ final class TeamSerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$team = $this->object;

Expand All @@ -57,15 +59,25 @@ public function serialize($expand = null, array $fields = array(), array $relati
if(isset($values['company_id']))
{
unset($values['company_id']);
$values['company'] = SerializerRegistry::getInstance()->getSerializer($team->getCompany())->serialize($expand);
$values['company'] = SerializerRegistry::getInstance()->getSerializer($team->getCompany())->serialize(
AbstractSerializer::filterExpandByPrefix($expand, $relation),
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
$params
);
}
}
break;
case 'members':{
unset( $values['members']);
unset($values['members']);
$members = [];
foreach($team->getMembers() as $member){
$members[] = SerializerRegistry::getInstance()->getSerializer($member)->serialize($expand);
$members[] = SerializerRegistry::getInstance()->getSerializer($member)->serialize(
AbstractSerializer::filterExpandByPrefix($expand, $relation),
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
$params
);
}

$values['members'] = $members;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ final class ChatTeamInvitationSerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$invitation = $this->object;
if(! $invitation instanceof ChatTeamInvitation) return [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ final class ChatTeamMemberSerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$team_member = $this->object;
if(! $team_member instanceof ChatTeamMember) return [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ final class ChatTeamPushNotificationMessageSerializer extends SilverStripeSeria
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$message = $this->object;
if(! $message instanceof ChatTeamPushNotificationMessage) return [];
Expand Down
2 changes: 1 addition & 1 deletion app/ModelSerializers/ChatTeams/ChatTeamSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ final class ChatTeamSerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$team = $this->object;

Expand Down
17 changes: 13 additions & 4 deletions app/ModelSerializers/Companies/CompanySerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,10 @@ final class CompanySerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [] )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$values = parent::serialize($expand, $fields, $relations, $params);
$company = $this->object;
if(!count($relations)) $relations = $this->getAllowedRelations();
if(!$company instanceof Company) return $values;

if (in_array('sponsorships', $relations)) {
Expand Down Expand Up @@ -86,7 +85,12 @@ public function serialize($expand = null, array $fields = [], array $relations =
$sponsorships = [];
foreach ($company->getSponsorships() as $s) {
$sponsorships[] = SerializerRegistry::getInstance()->getSerializer($s)
->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation));
->serialize(
AbstractSerializer::filterExpandByPrefix($expand, $relation),
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
$params
);
}
$values['sponsorships'] = $sponsorships;
}
Expand All @@ -96,7 +100,12 @@ public function serialize($expand = null, array $fields = [], array $relations =
$project_sponsorships = [];
foreach ($company->getProjectSponsorships() as $ps) {
$project_sponsorships[] = SerializerRegistry::getInstance()->getSerializer($ps)
->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation));
->serialize(
AbstractSerializer::filterExpandByPrefix($expand, $relation),
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
$params
);
}
$values['project_sponsorships'] = $project_sponsorships;
}
Expand Down
10 changes: 7 additions & 3 deletions app/ModelSerializers/Companies/SponsoredProjectSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,10 @@ final class SponsoredProjectSerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [] )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$values = parent::serialize($expand, $fields, $relations, $params);
$project = $this->object;
if(!count($relations)) $relations = $this->getAllowedRelations();
if(!$project instanceof SponsoredProject) return $values;

if (!empty($expand)) {
Expand All @@ -67,7 +66,12 @@ public function serialize($expand = null, array $fields = [], array $relations =
$parentProject = $project->getParentProject();
if (!is_null($parentProject) && $project instanceof SponsoredProject) {
$values['parent_project'] = SerializerRegistry::getInstance()->getSerializer($project->getParentProject())
->serialize(AbstractSerializer::filterExpandByPrefix($expand, $relation));
->serialize(
AbstractSerializer::filterExpandByPrefix($expand, $relation),
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
$params
);
}
}
}
Expand Down
11 changes: 7 additions & 4 deletions app/ModelSerializers/ExtraQuestionAnswerSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,12 @@ class ExtraQuestionAnswerSerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array())
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$answer = $this->object;
if (!$answer instanceof ExtraQuestionAnswer) return [];
$values = parent::serialize($expand, $fields, $relations, $params);

if (!count($relations)) $relations = $this->getAllowedRelations();

if (!empty($expand)) {
$exp_expand = explode(',', $expand);
foreach ($exp_expand as $relation) {
Expand All @@ -50,7 +48,12 @@ public function serialize($expand = null, array $fields = array(), array $relati
if ($answer->hasQuestion()) {
unset($values['question_id']);
$values['question'] = SerializerRegistry::getInstance()->getSerializer($answer->getQuestion())
->serialize(AbstractSerializer::getExpandForPrefix('question', $expand));
->serialize(
AbstractSerializer::filterExpandByPrefix($expand, $relation),
AbstractSerializer::filterFieldsByPrefix($fields, $relation),
AbstractSerializer::filterFieldsByPrefix($relations, $relation),
$params
);
}
}
break;
Expand Down
3 changes: 1 addition & 2 deletions app/ModelSerializers/ExtraQuestionTypeSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,10 @@ public static function testRule($e){
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$question = $this->object;
if (!$question instanceof ExtraQuestionType) return [];
if(!count($relations)) $relations = $this->getAllowedRelations();
$values = parent::serialize($expand, $fields, $relations, $params);
Log::debug(sprintf("ExtraQuestionTypeSerializer expand %s", $expand));
if(in_array('values', $relations) && !isset($values['values']) && $question->allowsValues()) {
Expand Down
2 changes: 1 addition & 1 deletion app/ModelSerializers/GroupSerializer.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ final class GroupSerializer extends SilverStripeSerializer
* @param array $params
* @return array
*/
public function serialize($expand = null, array $fields = array(), array $relations = array(), array $params = array() )
public function serialize($expand = null, array $fields = [], array $relations = [], array $params = [])
{
$group = $this->object;
if(! $group instanceof Group) return [];
Expand Down
Loading

0 comments on commit aa998e8

Please sign in to comment.