diff --git a/packages/backend/src/helpers/renderer.js b/packages/backend/src/helpers/renderer.js index 50865256..a465e73d 100644 --- a/packages/backend/src/helpers/renderer.js +++ b/packages/backend/src/helpers/renderer.js @@ -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, diff --git a/packages/backend/src/models/user.js b/packages/backend/src/models/user.js index 16eda3c2..b1a82a71 100644 --- a/packages/backend/src/models/user.js +++ b/packages/backend/src/models/user.js @@ -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); } diff --git a/packages/backend/src/serializers/index.js b/packages/backend/src/serializers/index.js new file mode 100644 index 00000000..fc4f257e --- /dev/null +++ b/packages/backend/src/serializers/index.js @@ -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; diff --git a/packages/backend/src/serializers/permission.js b/packages/backend/src/serializers/permission.js new file mode 100644 index 00000000..b68868c9 --- /dev/null +++ b/packages/backend/src/serializers/permission.js @@ -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; diff --git a/packages/backend/src/serializers/role.js b/packages/backend/src/serializers/role.js new file mode 100644 index 00000000..1835a093 --- /dev/null +++ b/packages/backend/src/serializers/role.js @@ -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; diff --git a/packages/backend/src/serializers/user.js b/packages/backend/src/serializers/user.js new file mode 100644 index 00000000..763a88b0 --- /dev/null +++ b/packages/backend/src/serializers/user.js @@ -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;