Merge pull request #1602 from automatisch/introduce-serializers

feat: Introduce serializers
This commit is contained in:
Ömer Faruk Aydın
2024-02-15 12:46:20 +01:00
committed by GitHub
6 changed files with 84 additions and 15 deletions

View File

@@ -1,3 +1,5 @@
import serializers from '../serializers/index.js';
const isPaginated = (object) =>
object?.pageInfo &&
object?.totalCount !== undefined &&
@@ -10,14 +12,23 @@ const totalCount = (object) =>
isPaginated(object) ? object.totalCount : isArray(object) ? object.length : 1;
const renderObject = (response, object) => {
const data = isPaginated(object) ? object.records : object;
let data = isPaginated(object) ? object.records : object;
const type = isPaginated(object)
? object.records[0].constructor.name
: object.constructor.name;
const serializer = serializers[type];
if (serializer) {
data = Array.isArray(data)
? data.map((item) => serializer(item))
: serializer(data);
}
const computedPayload = {
data,
meta: {
type: isPaginated(object)
? object.records[0].constructor.name
: object.constructor.name,
type,
count: totalCount(object),
isArray: isArray(object),
currentPage: isPaginated(object) ? object.pageInfo.currentPage : null,

View File

@@ -143,17 +143,6 @@ class User extends Base {
},
});
$formatJson(json) {
json = super.$formatJson(json);
delete json.password;
delete json.deletedAt;
delete json.resetPasswordToken;
delete json.resetPasswordTokenSentAt;
return json;
}
login(password) {
return bcrypt.compare(password, this.password);
}

View File

@@ -0,0 +1,11 @@
import userSerializer from './user.js';
import roleSerializer from './role.js';
import permissionSerializer from './permission.js';
const serializers = {
User: userSerializer,
Role: roleSerializer,
Permission: permissionSerializer,
};
export default serializers;

View File

@@ -0,0 +1,13 @@
const permissionSerializer = (permission) => {
return {
id: permission.id,
roleId: permission.roleId,
action: permission.action,
subject: permission.subject,
conditions: permission.conditions,
createdAt: permission.createdAt,
updatedAt: permission.updatedAt,
};
};
export default permissionSerializer;

View File

@@ -0,0 +1,13 @@
const roleSerializer = (role) => {
return {
id: role.id,
name: role.name,
key: role.key,
description: role.description,
createdAt: role.createdAt,
updatedAt: role.updatedAt,
isAdmin: role.isAdmin,
};
};
export default roleSerializer;

View File

@@ -0,0 +1,32 @@
import roleSerializer from './role.js';
import permissionSerializer from './permission.js';
import appConfig from '../config/app.js';
const userSerializer = (user) => {
let userData = {
id: user.id,
email: user.email,
createdAt: user.createdAt,
updatedAt: user.updatedAt,
fullName: user.fullName,
roleId: user.roleId,
};
if (user.role) {
userData.role = roleSerializer(user.role);
}
if (user.permissions) {
userData.permissions = user.permissions.map((permission) =>
permissionSerializer(permission)
);
}
if (appConfig.isCloud && user.trialExpiryDate) {
userData.trialExpiryDate = user.trialExpiryDate;
}
return userData;
};
export default userSerializer;