Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/serialzer cache #244

Merged
merged 4 commits into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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