Merge pull request #1602 from automatisch/introduce-serializers
feat: Introduce serializers
This commit is contained in:
@@ -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,
|
||||
|
@@ -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);
|
||||
}
|
||||
|
11
packages/backend/src/serializers/index.js
Normal file
11
packages/backend/src/serializers/index.js
Normal 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;
|
13
packages/backend/src/serializers/permission.js
Normal file
13
packages/backend/src/serializers/permission.js
Normal 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;
|
13
packages/backend/src/serializers/role.js
Normal file
13
packages/backend/src/serializers/role.js
Normal 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;
|
32
packages/backend/src/serializers/user.js
Normal file
32
packages/backend/src/serializers/user.js
Normal 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;
|
Reference in New Issue
Block a user