@churchsoln/dbms 1.0.47 → 1.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/Dockerfile +21 -21
  2. package/Makefile +132 -132
  3. package/app.js +37 -37
  4. package/config/config.js +33 -33
  5. package/config/errorCodes.js +65 -65
  6. package/config/errorMsgs.js +82 -82
  7. package/constants/index.js +94 -94
  8. package/controllers/church.js +100 -100
  9. package/controllers/index.js +6 -6
  10. package/controllers/master.js +138 -138
  11. package/controllers/migration.js +24 -24
  12. package/controllers/seed.js +33 -33
  13. package/db-setup.js +87 -87
  14. package/deployment/docker-compose.local.yml +64 -64
  15. package/deployment/docker-compose.yml +62 -62
  16. package/deployment/nginx/nginx-certs/localhost.crt +22 -22
  17. package/deployment/nginx/nginx-certs/localhost.key +28 -28
  18. package/deployment/nginx/nginx.local.conf +72 -72
  19. package/middlewares/church-filter.js +16 -16
  20. package/migrations/church/20221226151615-create-province.js +27 -27
  21. package/migrations/church/20221226151616-create-city.js +41 -41
  22. package/migrations/church/20221226151617-create-subRole.js +25 -25
  23. package/migrations/church/20221226151618-create-membership.js +68 -68
  24. package/migrations/church/20221226151619-create-member.js +140 -140
  25. package/migrations/church/20221227151615-create-user.js +60 -60
  26. package/migrations/church/20230826140644-create-eventsUpdates.js +29 -29
  27. package/migrations/church/20230904143429-create-ministries.js +26 -26
  28. package/migrations/church/20231021160018-create-gallery.js +28 -28
  29. package/migrations/church/20231105074019-create-feedback.js +28 -28
  30. package/migrations/church/20231111113342-create-banner.js +29 -29
  31. package/migrations/church/20231216105640-create-directoryBoard.js +31 -31
  32. package/migrations/church/20240214160101-create-volunteer.js +31 -31
  33. package/migrations/church/20240330111437-create-download.js +29 -29
  34. package/migrations/church/20240427170617-create-links.js +26 -26
  35. package/migrations/church/20240815170617-create-userTransfer.js +63 -63
  36. package/migrations/church/20240815170620-create-subRolePermission.js +40 -40
  37. package/migrations/church/20240915170620-create-transferType.js +25 -25
  38. package/migrations/church/20240917170620-create-accounts.js +27 -27
  39. package/migrations/church/20240918170621-create-church.js +54 -54
  40. package/migrations/church/20240918170622-create-group.js +61 -61
  41. package/migrations/church/20240918170623-create-groupMembers.js +74 -74
  42. package/migrations/church/20240918170627-create-pledge.js +96 -96
  43. package/migrations/church/20240919170627-create-contributionBatch.js +42 -42
  44. package/migrations/church/20240919170628-create-contributionTransaction.js +82 -82
  45. package/migrations/church/20240919170629-create-contributionTransactionLine.js +74 -74
  46. package/migrations/church/20240919170630-update-groupMembers.js +77 -77
  47. package/migrations/church/20241204170631-create-pledgeAccount.js +55 -55
  48. package/migrations/church/20241204170632-create-memberStatus.js +26 -0
  49. package/migrations/church/20241204170633-update-member.js +33 -0
  50. package/migrations/church/20241204170634-update-membership.js +33 -0
  51. package/migrations/church/20241204170635-update-pledge.js +33 -0
  52. package/migrations/church/20241204170636-update-contributionTransactionLine.js +33 -0
  53. package/migrations/common/20221226140655-create-subscriptionPlan.js +31 -31
  54. package/migrations/common/20221226143006-create-role.js +25 -25
  55. package/migrations/common/20240815170619-create-permission.js +27 -27
  56. package/migrations/common/20240815170620-create-church.js +56 -56
  57. package/migrations/common/20240815170621-create-churchDomain.js +40 -40
  58. package/migrations/common/20240918170621-create-churchPermission.js +53 -53
  59. package/migrations/common/20240918170622-create-user.js +35 -35
  60. package/migrations/common/20240918170627-create-subscriptionPlanPermission.js +53 -53
  61. package/models/church/accounts.js +23 -27
  62. package/models/church/banner.js +29 -29
  63. package/models/church/church.js +62 -62
  64. package/models/church/city.js +23 -23
  65. package/models/church/contributionBatch.js +45 -45
  66. package/models/church/contributionTransaction.js +90 -90
  67. package/models/church/contributionTransactionLine.js +81 -80
  68. package/models/church/directoryBoard.js +33 -33
  69. package/models/church/download.js +35 -35
  70. package/models/church/eventsUpdates.js +29 -29
  71. package/models/church/feedback.js +27 -27
  72. package/models/church/gallery.js +33 -33
  73. package/models/church/group.js +78 -78
  74. package/models/church/groupMembers.js +73 -73
  75. package/models/church/index.js +30 -30
  76. package/models/church/links.js +22 -22
  77. package/models/church/member.js +161 -171
  78. package/models/church/memberStatus.js +22 -0
  79. package/models/church/membership.js +80 -81
  80. package/models/church/ministries.js +16 -16
  81. package/models/church/pledge.js +65 -65
  82. package/models/church/pledgeAccount.js +45 -37
  83. package/models/church/province.js +23 -23
  84. package/models/church/subRole.js +21 -21
  85. package/models/church/subRolePermission.js +22 -22
  86. package/models/church/transferType.js +15 -15
  87. package/models/church/user.js +78 -78
  88. package/models/church/userTransfer.js +45 -45
  89. package/models/church/volunteer.js +33 -33
  90. package/models/common/church.js +58 -58
  91. package/models/common/churchDomain.js +21 -21
  92. package/models/common/churchPermission.js +26 -26
  93. package/models/common/index.js +40 -40
  94. package/models/common/permission.js +17 -17
  95. package/models/common/role.js +15 -15
  96. package/models/common/subscriptionPlan.js +34 -34
  97. package/models/common/subscriptionPlanPermission.js +33 -33
  98. package/models/common/user.js +39 -39
  99. package/package.json +41 -41
  100. package/public/swagger/church.json +521 -521
  101. package/public/swagger/master.json +537 -537
  102. package/public/swagger/migration.json +83 -83
  103. package/public/swagger/seed.json +98 -98
  104. package/queues/db-create.js +9 -9
  105. package/queues/index.js +5 -5
  106. package/queues/master.js +9 -9
  107. package/queues/migration.js +9 -9
  108. package/queues/seed.js +9 -9
  109. package/redis/config.js +5 -5
  110. package/routes/index.js +30 -30
  111. package/routes/v1/church.js +45 -45
  112. package/routes/v1/index.js +7 -7
  113. package/routes/v1/master.js +68 -68
  114. package/routes/v1/migration.js +10 -10
  115. package/routes/v1/seed.js +12 -12
  116. package/seeders/church/20241005124245-province.js +101 -101
  117. package/seeders/church/20241005124547-city.js +87 -87
  118. package/seeders/church/20241005131418-transferType.js +40 -40
  119. package/seeders/church/20241005131419-memberStatus.js +34 -0
  120. package/seeders/common/20241005123516-subscriptionPlan.js +43 -43
  121. package/seeders/common/20241005124105-role.js +38 -38
  122. package/seeders/common/20241005153047-permission.js +252 -242
  123. package/seeders/common/20241005153048-user.js +48 -48
  124. package/services/church.js +312 -312
  125. package/services/index.js +6 -6
  126. package/services/master.js +344 -344
  127. package/services/migration.js +30 -30
  128. package/services/seed.js +39 -39
  129. package/utils/churchManager.js +98 -98
  130. package/utils/crypto.js +40 -40
  131. package/utils/docUpload.js +51 -51
  132. package/utils/encryptDecrypt.js +26 -26
  133. package/utils/index.js +33 -33
  134. package/utils/logger.js +104 -104
  135. package/utils/response.js +108 -108
  136. package/utils/swagger.js +25 -25
  137. package/utils/verifyToken.js +58 -58
  138. package/validators/church.js +154 -154
  139. package/validators/index.js +3 -3
  140. package/validators/master.js +152 -152
  141. package/workers/db-create.js +37 -37
  142. package/workers/index.js +4 -4
  143. package/workers/master.js +50 -50
  144. package/workers/migrations.js +63 -63
  145. package/workers/seed.js +85 -85
@@ -1,312 +1,312 @@
1
- const commonDb = require("../models/common");
2
- const { Op } = require("sequelize");
3
- const errorCodes = require("../config/errorCodes");
4
- const errorMsgs = require("../config/errorMsgs");
5
- const { masterQueue, masterQueueEvents } = require("../queues");
6
- const churchManager = require("../utils/churchManager");
7
- const { QUEUES, ROLES, AUTH_DATA, SUBSCRIPTION_PLAN_ID, CODE_LENGTH } = require("../constants");
8
- const bcrypt = require("bcrypt");
9
- const cryptr = require("../utils/crypto");
10
- const jwt = require("jsonwebtoken");
11
- const utils = require("../utils");
12
-
13
- class ChurchService {
14
- async onboardChurch(params) {
15
- try {
16
- const { name, churchAdminDetails, validity } = params;
17
- const alreadyExists = await commonDb.church.findOne({
18
- where: { name: { [Op.iLike]: name } },
19
- attributes: commonDb.church.selectedFields,
20
- raw: true,
21
- });
22
- if (alreadyExists)
23
- return {
24
- code: errorCodes.HTTP_CONFLICT,
25
- message: errorMsgs.churchAlreadyExists,
26
- };
27
- const expiresAt = new Date();
28
- expiresAt.setDate(expiresAt.getDate() + validity);
29
- const churchData = await commonDb.church.create(
30
- {
31
- ...params,
32
- registeredAt: new Date(),
33
- subscribedAt: new Date(),
34
- expiresAt,
35
- connectionUrl: process.env.CHURCH_SHADOW_DATABASE_URL.replace(
36
- "church_shadow",
37
- name.toLowerCase()
38
- ),
39
- churchDomain: [
40
- {
41
- domain:
42
- process.env.NODE_ENV == "localdev"
43
- ? `${name.toLowerCase()}.local.churchsoln.com`
44
- : `${name.toLowerCase()}.churchsoln.com`,
45
- },
46
- ],
47
- },
48
- { include: { model: commonDb.churchDomain, as: "churchDomain" } }
49
- );
50
- let permissionId;
51
- if (params.subscriptionPlanId == SUBSCRIPTION_PLAN_ID.CUSTOM) {
52
- permissionId = params.permissionId;
53
- } else {
54
- let subscriptionPlan = await commonDb.subscriptionPlan.findOne({
55
- where: { id: params.subscriptionPlanId },
56
- attributes: commonDb.subscriptionPlan.selectedFields,
57
- include: {
58
- model: commonDb.subscriptionPlanPermission,
59
- as: "subscriptionPlanPermission",
60
- attributes: commonDb.subscriptionPlanPermission.selectedFields,
61
- required: false,
62
- },
63
- });
64
- subscriptionPlan = subscriptionPlan.get({ plain: true });
65
- permissionId = subscriptionPlan.subscriptionPlanPermission.map(
66
- (x) => x.permissionId
67
- );
68
- }
69
- await commonDb.churchPermission.bulkCreate(
70
- permissionId.map((x) => ({
71
- churchId: churchData.id,
72
- permissionId: x,
73
- }))
74
- );
75
- const jobs = [
76
- {
77
- queue: QUEUES.DB_CREATE,
78
- data: { churchId: churchData.id, name: name.toLowerCase() },
79
- },
80
- {
81
- queue: QUEUES.MIGRATION,
82
- data: { churchId: churchData.id },
83
- },
84
- {
85
- queue: QUEUES.SEED,
86
- data: { churchId: churchData.id },
87
- },
88
- ];
89
- const jobData = await masterQueue.add(QUEUES.MASTER, jobs);
90
- masterQueueEvents.on("completed", async (event) => {
91
- if (event.jobId === jobData.id) {
92
- const churchDb = await churchManager.getChurchDbConnectionById(churchData.id);
93
- const member = await churchDb.member.create({
94
- ...churchAdminDetails,
95
- envNumber: utils.generateCode(CODE_LENGTH.ENV_NUMBER)
96
- })
97
- await churchDb.user.create({
98
- ...churchAdminDetails,
99
- status: true,
100
- roleId: ROLES.CHURCH_ADMIN,
101
- churchId: churchData.id,
102
- memberId: member.id
103
- });
104
- await churchDb.church.create(params)
105
- console.log(`Church onboarding completed for church: ${name}`);
106
- }
107
- });
108
- return { code: errorCodes.HTTP_OK, message: errorMsgs.churchCreated };
109
- } catch (err) {
110
- throw new Error(err.message);
111
- }
112
- }
113
-
114
- async allChurchService(params) {
115
- try {
116
- const { search = null } = params;
117
- const searchCondition = !!search ? { name: { [Op.like]: `%${search}%` } } : {};
118
- const data = await commonDb.church.findAll({
119
- where: { ...searchCondition },
120
- attributes: commonDb.church.selectedFields,
121
- include: {
122
- model: commonDb.subscriptionPlan,
123
- as: "subscriptionPlan",
124
- attributes: commonDb.subscriptionPlan.selectedFields,
125
- required: false,
126
- },
127
- });
128
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data };
129
- } catch (err) {
130
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
131
- }
132
- }
133
-
134
- async churchByIdService(params) {
135
- try {
136
- const { id } = params;
137
- const data = await commonDb.church.findOne({
138
- where: { status: true, id },
139
- attributes: commonDb.church.selectedFields,
140
- raw: true,
141
- });
142
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data };
143
- } catch (err) {
144
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
145
- }
146
- }
147
-
148
- async updateChurchByIdService(params) {
149
- try {
150
- const { id, ...restParams } = params;
151
- if(restParams.subscriptionPlanId) {
152
- const churchData = await commonDb.church.findOne({
153
- where: { id },
154
- attributes: commonDb.church.selectedFields,
155
- raw: true,
156
- });
157
- if (churchData.expiresAt) {
158
- const expiresAt = new Date(churchData.expiresAt);
159
- expiresAt.setDate(expiresAt.getDate() + params.validity);
160
- restParams.expiresAt = expiresAt;
161
- } else {
162
- const expiresAt = new Date();
163
- expiresAt.setDate(expiresAt.getDate() + params.validity);
164
- restParams.expiresAt = expiresAt;
165
- }
166
- restParams.subscribedAt = new Date();
167
- await commonDb.churchPermission.destroy({
168
- where: { churchId: id },
169
- });
170
- let permissionId;
171
- if (params.subscriptionPlanId == SUBSCRIPTION_PLAN_ID.CUSTOM) {
172
- permissionId = params.permissionId;
173
- } else {
174
- let subscriptionPlan = await commonDb.subscriptionPlan.findOne({
175
- where: { id: params.subscriptionPlanId },
176
- attributes: commonDb.subscriptionPlan.selectedFields,
177
- include: {
178
- model: commonDb.subscriptionPlanPermission,
179
- as: "subscriptionPlanPermission",
180
- attributes: commonDb.subscriptionPlanPermission.selectedFields,
181
- required: false,
182
- },
183
- });
184
- subscriptionPlan = subscriptionPlan.get({ plain: true });
185
- permissionId = subscriptionPlan.subscriptionPlanPermission.map(
186
- (x) => x.permissionId
187
- );
188
- }
189
- await commonDb.churchPermission.bulkCreate(
190
- permissionId.map((x) => ({
191
- churchId: id,
192
- permissionId: x,
193
- }))
194
- );
195
- }
196
- await commonDb.church.update(restParams, { where: { id } });
197
- return { code: errorCodes.HTTP_OK, message: errorMsgs.churchUpdated };
198
- } catch (err) {
199
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
200
- }
201
- }
202
-
203
- async addChurchPermissionService(params) {
204
- try {
205
- const { churchId, permissionId = [] } = params;
206
- const existingChurch = await commonDb.church.findOne({
207
- where: { id: churchId },
208
- raw: true,
209
- });
210
- if (!existingChurch) {
211
- return { code: errorCodes.HTTP_BAD_REQUEST, message: errorMsgs.invalidChurchId };
212
- }
213
- const existingPermission = await commonDb.permission.findAll({
214
- where: { id: permissionId },
215
- raw: true,
216
- });
217
- if (existingPermission.length !== permissionId.length) {
218
- return {
219
- code: errorCodes.HTTP_BAD_REQUEST,
220
- message: errorMsgs.invalidPermissionId,
221
- };
222
- }
223
- const existingChurchPermission = await commonDb.churchPermission.findAll({
224
- where: { churchId, permissionId },
225
- raw: true,
226
- });
227
- const excludedPermissions = permissionId.filter(
228
- (x) => !existingChurchPermission.map((y) => y.permissionId).includes(x)
229
- );
230
- if(excludedPermissions.length) {
231
- const queries = excludedPermissions.map((x) => commonDb.churchPermission.create({ churchId, permissionId: x }))
232
- await Promise.all(queries);
233
- }
234
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
235
- } catch (err) {
236
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
237
- }
238
- }
239
- async getChurchPermissionService(params) {
240
- try {
241
- const { churchId } = params;
242
- const data = await commonDb.churchPermission.findAll({
243
- where: { churchId },
244
- attributes: commonDb.churchPermission.selectedFields,
245
- include: {
246
- model: commonDb.permission,
247
- as: "permission",
248
- attributes: commonDb.permission.selectedFields,
249
- },
250
- });
251
- const response = data.map((x) => {
252
- const permission = x.get({ plain: true });
253
- permission.permissionId = permission.permission.id;
254
- permission.permission = permission.permission.name;
255
- return permission;
256
- });
257
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data: response };
258
- } catch (err) {
259
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
260
- }
261
- }
262
- async deleteChurchPermissionByIdService(params) {
263
- try {
264
- const { id, churchId } = params;
265
- const churchPermissionDetails = await commonDb.churchPermission.findOne({
266
- where: { id, churchId },
267
- attributes: commonDb.churchPermission.selectedFields,
268
- raw: true,
269
- });
270
- if (!churchPermissionDetails)
271
- return { code: errorCodes.HTTP_BAD_REQUEST, message: errorMsgs.invalidId };
272
- await commonDb.churchPermission.destroy({ where: { id, churchId } });
273
- return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
274
- } catch (err) {
275
- return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
276
- }
277
- }
278
-
279
- async login(params) {
280
- try {
281
- const { username, password } = params;
282
- let userData = await commonDb.user.findOne({
283
- where: { username },
284
- attributes: commonDb.user.selectedFields,
285
- });
286
- userData = userData?.get({ plain: true });
287
- if (!userData || !userData?.status)
288
- return { code: errorCodes.HTTP_BAD_REQUEST, message: errorMsgs.invalidCredentials };
289
- if (!userData?.password)
290
- return { code: errorCodes.HTTP_FORBIDDEN, message: errorMsgs.passwordNotSet };
291
- const isPassowordCorrect = await bcrypt.compare(password, userData.password);
292
- if (!isPassowordCorrect)
293
- return { code: errorCodes.HTTP_BAD_REQUEST, message: errorMsgs.invalidCredentials };
294
- const encryptedData = {
295
- id: cryptr.encrypt(userData.id),
296
- username: cryptr.encrypt(userData.username),
297
- email: cryptr.encrypt(userData.email),
298
- };
299
- const token = jwt.sign({ ...encryptedData }, process.env.JWT_SECRET, {
300
- expiresIn: AUTH_DATA.SESSION_EXPIRY,
301
- });
302
- return {
303
- code: errorCodes.HTTP_OK,
304
- message: errorMsgs.loggedIn,
305
- data: { token },
306
- };
307
- } catch (err) {
308
- throw new Error(err.message);
309
- }
310
- }
311
- }
312
- module.exports = new ChurchService();
1
+ const commonDb = require("../models/common");
2
+ const { Op } = require("sequelize");
3
+ const errorCodes = require("../config/errorCodes");
4
+ const errorMsgs = require("../config/errorMsgs");
5
+ const { masterQueue, masterQueueEvents } = require("../queues");
6
+ const churchManager = require("../utils/churchManager");
7
+ const { QUEUES, ROLES, AUTH_DATA, SUBSCRIPTION_PLAN_ID, CODE_LENGTH } = require("../constants");
8
+ const bcrypt = require("bcrypt");
9
+ const cryptr = require("../utils/crypto");
10
+ const jwt = require("jsonwebtoken");
11
+ const utils = require("../utils");
12
+
13
+ class ChurchService {
14
+ async onboardChurch(params) {
15
+ try {
16
+ const { name, churchAdminDetails, validity } = params;
17
+ const alreadyExists = await commonDb.church.findOne({
18
+ where: { name: { [Op.iLike]: name } },
19
+ attributes: commonDb.church.selectedFields,
20
+ raw: true,
21
+ });
22
+ if (alreadyExists)
23
+ return {
24
+ code: errorCodes.HTTP_CONFLICT,
25
+ message: errorMsgs.churchAlreadyExists,
26
+ };
27
+ const expiresAt = new Date();
28
+ expiresAt.setDate(expiresAt.getDate() + validity);
29
+ const churchData = await commonDb.church.create(
30
+ {
31
+ ...params,
32
+ registeredAt: new Date(),
33
+ subscribedAt: new Date(),
34
+ expiresAt,
35
+ connectionUrl: process.env.CHURCH_SHADOW_DATABASE_URL.replace(
36
+ "church_shadow",
37
+ name.toLowerCase()
38
+ ),
39
+ churchDomain: [
40
+ {
41
+ domain:
42
+ process.env.NODE_ENV == "localdev"
43
+ ? `${name.toLowerCase()}.local.churchsoln.com`
44
+ : `${name.toLowerCase()}.churchsoln.com`,
45
+ },
46
+ ],
47
+ },
48
+ { include: { model: commonDb.churchDomain, as: "churchDomain" } }
49
+ );
50
+ let permissionId;
51
+ if (params.subscriptionPlanId == SUBSCRIPTION_PLAN_ID.CUSTOM) {
52
+ permissionId = params.permissionId;
53
+ } else {
54
+ let subscriptionPlan = await commonDb.subscriptionPlan.findOne({
55
+ where: { id: params.subscriptionPlanId },
56
+ attributes: commonDb.subscriptionPlan.selectedFields,
57
+ include: {
58
+ model: commonDb.subscriptionPlanPermission,
59
+ as: "subscriptionPlanPermission",
60
+ attributes: commonDb.subscriptionPlanPermission.selectedFields,
61
+ required: false,
62
+ },
63
+ });
64
+ subscriptionPlan = subscriptionPlan.get({ plain: true });
65
+ permissionId = subscriptionPlan.subscriptionPlanPermission.map(
66
+ (x) => x.permissionId
67
+ );
68
+ }
69
+ await commonDb.churchPermission.bulkCreate(
70
+ permissionId.map((x) => ({
71
+ churchId: churchData.id,
72
+ permissionId: x,
73
+ }))
74
+ );
75
+ const jobs = [
76
+ {
77
+ queue: QUEUES.DB_CREATE,
78
+ data: { churchId: churchData.id, name: name.toLowerCase() },
79
+ },
80
+ {
81
+ queue: QUEUES.MIGRATION,
82
+ data: { churchId: churchData.id },
83
+ },
84
+ {
85
+ queue: QUEUES.SEED,
86
+ data: { churchId: churchData.id },
87
+ },
88
+ ];
89
+ const jobData = await masterQueue.add(QUEUES.MASTER, jobs);
90
+ masterQueueEvents.on("completed", async (event) => {
91
+ if (event.jobId === jobData.id) {
92
+ const churchDb = await churchManager.getChurchDbConnectionById(churchData.id);
93
+ const member = await churchDb.member.create({
94
+ ...churchAdminDetails,
95
+ envNumber: utils.generateCode(CODE_LENGTH.ENV_NUMBER)
96
+ })
97
+ await churchDb.user.create({
98
+ ...churchAdminDetails,
99
+ status: true,
100
+ roleId: ROLES.CHURCH_ADMIN,
101
+ churchId: churchData.id,
102
+ memberId: member.id
103
+ });
104
+ await churchDb.church.create(params)
105
+ console.log(`Church onboarding completed for church: ${name}`);
106
+ }
107
+ });
108
+ return { code: errorCodes.HTTP_OK, message: errorMsgs.churchCreated };
109
+ } catch (err) {
110
+ throw new Error(err.message);
111
+ }
112
+ }
113
+
114
+ async allChurchService(params) {
115
+ try {
116
+ const { search = null } = params;
117
+ const searchCondition = !!search ? { name: { [Op.like]: `%${search}%` } } : {};
118
+ const data = await commonDb.church.findAll({
119
+ where: { ...searchCondition },
120
+ attributes: commonDb.church.selectedFields,
121
+ include: {
122
+ model: commonDb.subscriptionPlan,
123
+ as: "subscriptionPlan",
124
+ attributes: commonDb.subscriptionPlan.selectedFields,
125
+ required: false,
126
+ },
127
+ });
128
+ return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data };
129
+ } catch (err) {
130
+ return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
131
+ }
132
+ }
133
+
134
+ async churchByIdService(params) {
135
+ try {
136
+ const { id } = params;
137
+ const data = await commonDb.church.findOne({
138
+ where: { status: true, id },
139
+ attributes: commonDb.church.selectedFields,
140
+ raw: true,
141
+ });
142
+ return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data };
143
+ } catch (err) {
144
+ return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
145
+ }
146
+ }
147
+
148
+ async updateChurchByIdService(params) {
149
+ try {
150
+ const { id, ...restParams } = params;
151
+ if(restParams.subscriptionPlanId) {
152
+ const churchData = await commonDb.church.findOne({
153
+ where: { id },
154
+ attributes: commonDb.church.selectedFields,
155
+ raw: true,
156
+ });
157
+ if (churchData.expiresAt) {
158
+ const expiresAt = new Date(churchData.expiresAt);
159
+ expiresAt.setDate(expiresAt.getDate() + params.validity);
160
+ restParams.expiresAt = expiresAt;
161
+ } else {
162
+ const expiresAt = new Date();
163
+ expiresAt.setDate(expiresAt.getDate() + params.validity);
164
+ restParams.expiresAt = expiresAt;
165
+ }
166
+ restParams.subscribedAt = new Date();
167
+ await commonDb.churchPermission.destroy({
168
+ where: { churchId: id },
169
+ });
170
+ let permissionId;
171
+ if (params.subscriptionPlanId == SUBSCRIPTION_PLAN_ID.CUSTOM) {
172
+ permissionId = params.permissionId;
173
+ } else {
174
+ let subscriptionPlan = await commonDb.subscriptionPlan.findOne({
175
+ where: { id: params.subscriptionPlanId },
176
+ attributes: commonDb.subscriptionPlan.selectedFields,
177
+ include: {
178
+ model: commonDb.subscriptionPlanPermission,
179
+ as: "subscriptionPlanPermission",
180
+ attributes: commonDb.subscriptionPlanPermission.selectedFields,
181
+ required: false,
182
+ },
183
+ });
184
+ subscriptionPlan = subscriptionPlan.get({ plain: true });
185
+ permissionId = subscriptionPlan.subscriptionPlanPermission.map(
186
+ (x) => x.permissionId
187
+ );
188
+ }
189
+ await commonDb.churchPermission.bulkCreate(
190
+ permissionId.map((x) => ({
191
+ churchId: id,
192
+ permissionId: x,
193
+ }))
194
+ );
195
+ }
196
+ await commonDb.church.update(restParams, { where: { id } });
197
+ return { code: errorCodes.HTTP_OK, message: errorMsgs.churchUpdated };
198
+ } catch (err) {
199
+ return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
200
+ }
201
+ }
202
+
203
+ async addChurchPermissionService(params) {
204
+ try {
205
+ const { churchId, permissionId = [] } = params;
206
+ const existingChurch = await commonDb.church.findOne({
207
+ where: { id: churchId },
208
+ raw: true,
209
+ });
210
+ if (!existingChurch) {
211
+ return { code: errorCodes.HTTP_BAD_REQUEST, message: errorMsgs.invalidChurchId };
212
+ }
213
+ const existingPermission = await commonDb.permission.findAll({
214
+ where: { id: permissionId },
215
+ raw: true,
216
+ });
217
+ if (existingPermission.length !== permissionId.length) {
218
+ return {
219
+ code: errorCodes.HTTP_BAD_REQUEST,
220
+ message: errorMsgs.invalidPermissionId,
221
+ };
222
+ }
223
+ const existingChurchPermission = await commonDb.churchPermission.findAll({
224
+ where: { churchId, permissionId },
225
+ raw: true,
226
+ });
227
+ const excludedPermissions = permissionId.filter(
228
+ (x) => !existingChurchPermission.map((y) => y.permissionId).includes(x)
229
+ );
230
+ if(excludedPermissions.length) {
231
+ const queries = excludedPermissions.map((x) => commonDb.churchPermission.create({ churchId, permissionId: x }))
232
+ await Promise.all(queries);
233
+ }
234
+ return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
235
+ } catch (err) {
236
+ return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
237
+ }
238
+ }
239
+ async getChurchPermissionService(params) {
240
+ try {
241
+ const { churchId } = params;
242
+ const data = await commonDb.churchPermission.findAll({
243
+ where: { churchId },
244
+ attributes: commonDb.churchPermission.selectedFields,
245
+ include: {
246
+ model: commonDb.permission,
247
+ as: "permission",
248
+ attributes: commonDb.permission.selectedFields,
249
+ },
250
+ });
251
+ const response = data.map((x) => {
252
+ const permission = x.get({ plain: true });
253
+ permission.permissionId = permission.permission.id;
254
+ permission.permission = permission.permission.name;
255
+ return permission;
256
+ });
257
+ return { code: errorCodes.HTTP_OK, message: errorMsgs.success, data: response };
258
+ } catch (err) {
259
+ return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
260
+ }
261
+ }
262
+ async deleteChurchPermissionByIdService(params) {
263
+ try {
264
+ const { id, churchId } = params;
265
+ const churchPermissionDetails = await commonDb.churchPermission.findOne({
266
+ where: { id, churchId },
267
+ attributes: commonDb.churchPermission.selectedFields,
268
+ raw: true,
269
+ });
270
+ if (!churchPermissionDetails)
271
+ return { code: errorCodes.HTTP_BAD_REQUEST, message: errorMsgs.invalidId };
272
+ await commonDb.churchPermission.destroy({ where: { id, churchId } });
273
+ return { code: errorCodes.HTTP_OK, message: errorMsgs.success };
274
+ } catch (err) {
275
+ return { code: errorCodes.HTTP_INTERNAL_SERVER_ERROR, message: err };
276
+ }
277
+ }
278
+
279
+ async login(params) {
280
+ try {
281
+ const { username, password } = params;
282
+ let userData = await commonDb.user.findOne({
283
+ where: { username },
284
+ attributes: commonDb.user.selectedFields,
285
+ });
286
+ userData = userData?.get({ plain: true });
287
+ if (!userData || !userData?.status)
288
+ return { code: errorCodes.HTTP_BAD_REQUEST, message: errorMsgs.invalidCredentials };
289
+ if (!userData?.password)
290
+ return { code: errorCodes.HTTP_FORBIDDEN, message: errorMsgs.passwordNotSet };
291
+ const isPassowordCorrect = await bcrypt.compare(password, userData.password);
292
+ if (!isPassowordCorrect)
293
+ return { code: errorCodes.HTTP_BAD_REQUEST, message: errorMsgs.invalidCredentials };
294
+ const encryptedData = {
295
+ id: cryptr.encrypt(userData.id),
296
+ username: cryptr.encrypt(userData.username),
297
+ email: cryptr.encrypt(userData.email),
298
+ };
299
+ const token = jwt.sign({ ...encryptedData }, process.env.JWT_SECRET, {
300
+ expiresIn: AUTH_DATA.SESSION_EXPIRY,
301
+ });
302
+ return {
303
+ code: errorCodes.HTTP_OK,
304
+ message: errorMsgs.loggedIn,
305
+ data: { token },
306
+ };
307
+ } catch (err) {
308
+ throw new Error(err.message);
309
+ }
310
+ }
311
+ }
312
+ module.exports = new ChurchService();
package/services/index.js CHANGED
@@ -1,6 +1,6 @@
1
- module.exports = {
2
- churchService: require("./church"),
3
- migrationService: require("./migration"),
4
- seedService: require("./seed"),
5
- masterService: require("./master"),
6
- };
1
+ module.exports = {
2
+ churchService: require("./church"),
3
+ migrationService: require("./migration"),
4
+ seedService: require("./seed"),
5
+ masterService: require("./master"),
6
+ };