From 0347864fde57262bde94e7b229ddf53f746307cf Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Thu, 15 Feb 2024 02:15:19 +0100 Subject: [PATCH 1/4] feat: Introduce serializers --- packages/backend/src/serializers/index.js | 9 ++++++ .../backend/src/serializers/permission.js | 13 ++++++++ packages/backend/src/serializers/role.js | 13 ++++++++ packages/backend/src/serializers/user.js | 32 +++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 packages/backend/src/serializers/index.js create mode 100644 packages/backend/src/serializers/permission.js create mode 100644 packages/backend/src/serializers/role.js create mode 100644 packages/backend/src/serializers/user.js diff --git a/packages/backend/src/serializers/index.js b/packages/backend/src/serializers/index.js new file mode 100644 index 00000000..bd07629c --- /dev/null +++ b/packages/backend/src/serializers/index.js @@ -0,0 +1,9 @@ +import userSerializer from './user.js'; +import roleSerializer from './role.js'; + +const serializers = { + User: userSerializer, + Role: roleSerializer, +}; + +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; From 3578f6b8491afa5d3220096fff2ce68d160ba913 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Thu, 15 Feb 2024 02:15:44 +0100 Subject: [PATCH 2/4] feat: Extend renderer to use serializers --- packages/backend/src/helpers/renderer.js | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) 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, From 6ff29b9ae686e0a83a73793224c40a66a9505373 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Thu, 15 Feb 2024 02:19:24 +0100 Subject: [PATCH 3/4] refactor: Use serializer for user model instead of formatJson --- packages/backend/src/models/user.js | 11 ----------- 1 file changed, 11 deletions(-) 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); } From 1859c9854ef65531b8c5314646ee681f61b08e08 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Thu, 15 Feb 2024 02:21:26 +0100 Subject: [PATCH 4/4] chore: Add permission serializer to serializers --- packages/backend/src/serializers/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/backend/src/serializers/index.js b/packages/backend/src/serializers/index.js index bd07629c..fc4f257e 100644 --- a/packages/backend/src/serializers/index.js +++ b/packages/backend/src/serializers/index.js @@ -1,9 +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;