nodejs-quickstart-structure 1.18.1 → 1.19.0

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 (104) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +2 -1
  3. package/lib/modules/caching-setup.js +76 -73
  4. package/lib/modules/kafka-setup.js +249 -191
  5. package/lib/modules/project-setup.js +1 -0
  6. package/package.json +13 -2
  7. package/templates/clean-architecture/js/src/errors/BadRequestError.js +11 -10
  8. package/templates/clean-architecture/js/src/errors/BadRequestError.spec.js.ejs +22 -21
  9. package/templates/clean-architecture/js/src/errors/NotFoundError.js +11 -10
  10. package/templates/clean-architecture/js/src/errors/NotFoundError.spec.js.ejs +22 -21
  11. package/templates/clean-architecture/js/src/infrastructure/repositories/UserRepository.js.ejs +69 -39
  12. package/templates/clean-architecture/js/src/infrastructure/repositories/UserRepository.spec.js.ejs +142 -81
  13. package/templates/clean-architecture/js/src/interfaces/controllers/userController.js.ejs +156 -75
  14. package/templates/clean-architecture/js/src/interfaces/controllers/userController.spec.js.ejs +234 -138
  15. package/templates/clean-architecture/js/src/interfaces/graphql/resolvers/user.resolvers.js.ejs +27 -21
  16. package/templates/clean-architecture/js/src/interfaces/graphql/resolvers/user.resolvers.spec.js.ejs +66 -49
  17. package/templates/clean-architecture/js/src/interfaces/graphql/typeDefs/user.types.js.ejs +19 -17
  18. package/templates/clean-architecture/js/src/interfaces/routes/api.js +12 -10
  19. package/templates/clean-architecture/js/src/usecases/DeleteUser.js +11 -0
  20. package/templates/clean-architecture/js/src/usecases/DeleteUser.spec.js.ejs +47 -0
  21. package/templates/clean-architecture/js/src/usecases/UpdateUser.js +11 -0
  22. package/templates/clean-architecture/js/src/usecases/UpdateUser.spec.js.ejs +48 -0
  23. package/templates/clean-architecture/js/src/utils/errorMessages.js +14 -0
  24. package/templates/clean-architecture/ts/src/errors/BadRequestError.spec.ts.ejs +22 -21
  25. package/templates/clean-architecture/ts/src/errors/BadRequestError.ts +9 -8
  26. package/templates/clean-architecture/ts/src/errors/NotFoundError.spec.ts.ejs +22 -21
  27. package/templates/clean-architecture/ts/src/errors/NotFoundError.ts +9 -8
  28. package/templates/clean-architecture/ts/src/infrastructure/repositories/UserRepository.spec.ts.ejs +175 -85
  29. package/templates/clean-architecture/ts/src/infrastructure/repositories/userRepository.ts.ejs +74 -0
  30. package/templates/clean-architecture/ts/src/interfaces/controllers/userController.spec.ts.ejs +331 -185
  31. package/templates/clean-architecture/ts/src/interfaces/controllers/userController.ts.ejs +173 -84
  32. package/templates/clean-architecture/ts/src/interfaces/graphql/resolvers/user.resolvers.spec.ts.ejs +68 -51
  33. package/templates/clean-architecture/ts/src/interfaces/graphql/resolvers/user.resolvers.ts.ejs +29 -21
  34. package/templates/clean-architecture/ts/src/interfaces/graphql/typeDefs/user.types.ts.ejs +17 -15
  35. package/templates/clean-architecture/ts/src/interfaces/routes/userRoutes.ts +13 -11
  36. package/templates/clean-architecture/ts/src/usecases/deleteUser.spec.ts.ejs +47 -0
  37. package/templates/clean-architecture/ts/src/usecases/deleteUser.ts +9 -0
  38. package/templates/clean-architecture/ts/src/usecases/updateUser.spec.ts.ejs +48 -0
  39. package/templates/clean-architecture/ts/src/usecases/updateUser.ts +9 -0
  40. package/templates/clean-architecture/ts/src/utils/errorMessages.ts +12 -0
  41. package/templates/common/.gitattributes +46 -0
  42. package/templates/common/README.md.ejs +294 -270
  43. package/templates/common/caching/clean/js/DeleteUser.js.ejs +27 -0
  44. package/templates/common/caching/clean/js/UpdateUser.js.ejs +27 -0
  45. package/templates/common/caching/clean/ts/deleteUser.ts.ejs +24 -0
  46. package/templates/common/caching/clean/ts/updateUser.ts.ejs +25 -0
  47. package/templates/common/caching/ts/memoryCache.ts.ejs +73 -64
  48. package/templates/common/caching/ts/redisClient.ts.ejs +89 -80
  49. package/templates/common/database/js/models/User.js.ejs +79 -53
  50. package/templates/common/database/js/models/User.js.mongoose.ejs +23 -19
  51. package/templates/common/database/js/models/User.spec.js.ejs +94 -84
  52. package/templates/common/database/ts/models/User.spec.ts.ejs +100 -84
  53. package/templates/common/database/ts/models/User.ts.ejs +87 -61
  54. package/templates/common/database/ts/models/User.ts.mongoose.ejs +30 -25
  55. package/templates/common/health/js/healthRoute.js.ejs +50 -47
  56. package/templates/common/health/ts/healthRoute.ts.ejs +49 -46
  57. package/templates/common/jest.e2e.config.js.ejs +8 -8
  58. package/templates/common/kafka/js/messaging/baseConsumer.js.ejs +30 -30
  59. package/templates/common/kafka/js/messaging/userEventSchema.js.ejs +12 -11
  60. package/templates/common/kafka/js/messaging/welcomeEmailConsumer.js.ejs +44 -31
  61. package/templates/common/kafka/js/messaging/welcomeEmailConsumer.spec.js.ejs +86 -49
  62. package/templates/common/kafka/js/services/kafkaService.js.ejs +93 -93
  63. package/templates/common/kafka/js/utils/kafkaEvents.js.ejs +7 -0
  64. package/templates/common/kafka/ts/messaging/userEventSchema.spec.ts.ejs +51 -51
  65. package/templates/common/kafka/ts/messaging/userEventSchema.ts.ejs +12 -11
  66. package/templates/common/kafka/ts/messaging/welcomeEmailConsumer.spec.ts.ejs +86 -49
  67. package/templates/common/kafka/ts/messaging/welcomeEmailConsumer.ts.ejs +38 -25
  68. package/templates/common/kafka/ts/services/kafkaService.ts.ejs +95 -95
  69. package/templates/common/kafka/ts/utils/kafkaEvents.ts.ejs +5 -0
  70. package/templates/common/shutdown/js/gracefulShutdown.js.ejs +65 -61
  71. package/templates/common/shutdown/js/gracefulShutdown.spec.js.ejs +149 -160
  72. package/templates/common/shutdown/ts/gracefulShutdown.spec.ts.ejs +179 -158
  73. package/templates/common/shutdown/ts/gracefulShutdown.ts.ejs +59 -55
  74. package/templates/common/src/tests/e2e/e2e.users.test.js.ejs +120 -49
  75. package/templates/common/src/tests/e2e/e2e.users.test.ts.ejs +120 -49
  76. package/templates/common/swagger.yml.ejs +118 -66
  77. package/templates/db/mysql/V1__Initial_Setup.sql.ejs +10 -9
  78. package/templates/db/postgres/V1__Initial_Setup.sql.ejs +10 -9
  79. package/templates/mvc/js/src/controllers/userController.js.ejs +246 -105
  80. package/templates/mvc/js/src/controllers/userController.spec.js.ejs +481 -209
  81. package/templates/mvc/js/src/errors/BadRequestError.js +11 -10
  82. package/templates/mvc/js/src/errors/BadRequestError.spec.js.ejs +22 -21
  83. package/templates/mvc/js/src/errors/NotFoundError.js +11 -10
  84. package/templates/mvc/js/src/errors/NotFoundError.spec.js.ejs +22 -21
  85. package/templates/mvc/js/src/graphql/resolvers/user.resolvers.js.ejs +25 -19
  86. package/templates/mvc/js/src/graphql/resolvers/user.resolvers.spec.js.ejs +64 -47
  87. package/templates/mvc/js/src/graphql/typeDefs/user.types.js.ejs +19 -17
  88. package/templates/mvc/js/src/routes/api.js +10 -8
  89. package/templates/mvc/js/src/routes/api.spec.js.ejs +41 -36
  90. package/templates/mvc/js/src/utils/errorMessages.js +14 -0
  91. package/templates/mvc/ts/src/controllers/userController.spec.ts.ejs +481 -203
  92. package/templates/mvc/ts/src/controllers/userController.ts.ejs +248 -107
  93. package/templates/mvc/ts/src/errors/BadRequestError.spec.ts.ejs +22 -21
  94. package/templates/mvc/ts/src/errors/BadRequestError.ts +9 -8
  95. package/templates/mvc/ts/src/errors/NotFoundError.spec.ts.ejs +27 -21
  96. package/templates/mvc/ts/src/errors/NotFoundError.ts +9 -8
  97. package/templates/mvc/ts/src/graphql/resolvers/user.resolvers.spec.ts.ejs +68 -51
  98. package/templates/mvc/ts/src/graphql/resolvers/user.resolvers.ts.ejs +29 -21
  99. package/templates/mvc/ts/src/graphql/typeDefs/user.types.ts.ejs +17 -15
  100. package/templates/mvc/ts/src/index.ts.ejs +156 -153
  101. package/templates/mvc/ts/src/routes/api.spec.ts.ejs +59 -40
  102. package/templates/mvc/ts/src/routes/api.ts +12 -10
  103. package/templates/mvc/ts/src/utils/errorMessages.ts +12 -0
  104. package/templates/clean-architecture/ts/src/infrastructure/repositories/UserRepository.ts.ejs +0 -37
@@ -1,105 +1,246 @@
1
- const User = require('../models/User');
2
- <% if (communication !== 'GraphQL') { -%>
3
- const HTTP_STATUS = require('../utils/httpCodes');
4
- <% } -%>
5
- const logger = require('../utils/logger');
6
- <%_ if (caching === 'Redis') { -%>
7
- const cacheService = require('../config/redisClient');
8
- <%_ } else if (caching === 'Memory Cache') { -%>
9
- const cacheService = require('../config/memoryCache');
10
- <%_ } -%>
11
- <%_ if (communication === 'Kafka') { -%>
12
- const { sendMessage } = require('../services/kafkaService');
13
- <%_ } -%>
14
-
15
- <% if (communication === 'GraphQL') { -%>
16
- const getUsers = async () => {
17
- try {
18
- <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
19
- const users = await cacheService.getOrSet('users:all', async () => {
20
- <%_ if (database === 'MongoDB' || database === 'None') { -%>
21
- return await User.find();
22
- <%_ } else { -%>
23
- return await User.findAll();
24
- <%_ } -%>
25
- }, 60);
26
- <%_ } else { -%>
27
- <%_ if (database === 'MongoDB' || database === 'None') { -%>
28
- const users = await User.find();
29
- <%_ } else { -%>
30
- const users = await User.findAll();
31
- <%_ } -%>
32
- <%_ } -%>
33
- return users;
34
- } catch (error) {
35
- logger.error('Error fetching users:', error);
36
- throw error;
37
- }
38
- };
39
-
40
- const createUser = async (data) => {
41
- try {
42
- const { name, email } = data;
43
- const user = await User.create({ name, email });
44
- <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
45
- await cacheService.del('users:all');
46
- <%_ } -%>
47
- <%_ if (communication === 'Kafka') { -%>
48
- await sendMessage('user-topic', JSON.stringify({
49
- action: 'USER_CREATED',
50
- payload: { id: user.id || user._id, email: user.email }
51
- }));
52
- <%_ } -%>
53
- return user;
54
- } catch (error) {
55
- logger.error('Error creating user:', error);
56
- throw error;
57
- }
58
- };
59
- <% } else { -%>
60
- const getUsers = async (req, res, next) => {
61
- try {
62
- <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
63
- const users = await cacheService.getOrSet('users:all', async () => {
64
- <%_ if (database === 'MongoDB' || database === 'None') { -%>
65
- return await User.find();
66
- <%_ } else { -%>
67
- return await User.findAll();
68
- <%_ } -%>
69
- }, 60);
70
- <%_ } else { -%>
71
- <%_ if (database === 'MongoDB' || database === 'None') { -%>
72
- const users = await User.find();
73
- <%_ } else { -%>
74
- const users = await User.findAll();
75
- <%_ } -%>
76
- <%_ } -%>
77
- res.json(users);
78
- } catch (error) {
79
- logger.error('Error fetching users:', error);
80
- next(error);
81
- }
82
- };
83
-
84
- const createUser = async (req, res, next) => {
85
- try {
86
- const { name, email } = req.body;
87
- const user = await User.create({ name, email });
88
- <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
89
- await cacheService.del('users:all');
90
- <%_ } -%>
91
- <%_ if (communication === 'Kafka') { -%>
92
- await sendMessage('user-topic', JSON.stringify({
93
- action: 'USER_CREATED',
94
- payload: { id: user.id || user._id, email: user.email }
95
- }));
96
- <%_ } -%>
97
- res.status(HTTP_STATUS.CREATED).json(user);
98
- } catch (error) {
99
- logger.error('Error creating user:', error);
100
- next(error);
101
- }
102
- };
103
- <% } -%>
104
-
105
- module.exports = { getUsers, createUser };
1
+ const User = require('../models/User');
2
+ const ERROR_MESSAGES = require('../utils/errorMessages');
3
+ <% if (communication !== 'GraphQL') { -%>
4
+ const HTTP_STATUS = require('../utils/httpCodes');
5
+ <% } -%>
6
+ const logger = require('../utils/logger');
7
+ <%_ if (caching === 'Redis') { -%>
8
+ const cacheService = require('../config/redisClient');
9
+ <%_ } else if (caching === 'Memory Cache') { -%>
10
+ const cacheService = require('../config/memoryCache');
11
+ <%_ } -%>
12
+ <%_ if (communication === 'Kafka') { -%>
13
+ const { sendMessage } = require('../services/kafkaService');
14
+ const { KAFKA_ACTIONS } = require('../utils/kafkaEvents');
15
+ <%_ } -%>
16
+
17
+ <% if (communication === 'GraphQL') { -%>
18
+ const getUsers = async () => {
19
+ try {
20
+ <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
21
+ const users = await cacheService.getOrSet('users:all', async () => {
22
+ <%_ if (database === 'MongoDB' || database === 'None') { -%>
23
+ return await User.find();
24
+ <%_ } else { -%>
25
+ return await User.findAll();
26
+ <%_ } -%>
27
+ }, 60);
28
+ <%_ } else { -%>
29
+ <%_ if (database === 'MongoDB' || database === 'None') { -%>
30
+ const users = await User.find();
31
+ <%_ } else { -%>
32
+ const users = await User.findAll();
33
+ <%_ } -%>
34
+ <%_ } -%>
35
+ return users;
36
+ } catch (error) {
37
+ logger.error(`${ERROR_MESSAGES.FETCH_USERS_ERROR}:`, error);
38
+ throw error;
39
+ }
40
+ };
41
+
42
+ const createUser = async (data) => {
43
+ try {
44
+ const { name, email } = data;
45
+ const user = await User.create({ name, email });
46
+ <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
47
+ await cacheService.del('users:all');
48
+ <%_ } -%>
49
+ <%_ if (communication === 'Kafka') { -%>
50
+ await sendMessage('user-topic', JSON.stringify({
51
+ action: KAFKA_ACTIONS.USER_CREATED,
52
+ payload: { id: user.id || user._id, email: user.email }
53
+ }), (user.id || user._id).toString());
54
+ <%_ } -%>
55
+ return user;
56
+ } catch (error) {
57
+ logger.error(`${ERROR_MESSAGES.CREATE_USER_ERROR}:`, error);
58
+ throw error;
59
+ }
60
+ };
61
+
62
+ const updateUser = async (id, data) => {
63
+ try {
64
+ <%_ if (database === 'MongoDB') { -%>
65
+ const updatedUser = await User.findByIdAndUpdate(id, data, { new: true });
66
+ if (!updatedUser) throw new Error(ERROR_MESSAGES.USER_NOT_FOUND);
67
+ <%_ } else if (database === 'None') { -%>
68
+ const user = await User.findByPk(id);
69
+ if (!user) throw new Error(ERROR_MESSAGES.USER_NOT_FOUND);
70
+ await User.update(id, data);
71
+ const updatedUser = await User.findByPk(id);
72
+ <%_ } else { -%>
73
+ const user = await User.findByPk(id);
74
+ if (!user) throw new Error(ERROR_MESSAGES.USER_NOT_FOUND);
75
+ await user.update(data);
76
+ const updatedUser = user;
77
+ <%_ } -%>
78
+ <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
79
+ await cacheService.del('users:all');
80
+ <%_ } -%>
81
+ <%_ if (communication === 'Kafka') { -%>
82
+ await sendMessage('user-topic', JSON.stringify({
83
+ action: KAFKA_ACTIONS.USER_UPDATED,
84
+ payload: { id, email: updatedUser?.email }
85
+ }), id);
86
+ <%_ } -%>
87
+ return updatedUser;
88
+ } catch (error) {
89
+ logger.error(`${ERROR_MESSAGES.UPDATE_USER_ERROR}:`, error);
90
+ throw error;
91
+ }
92
+ };
93
+
94
+ const deleteUser = async (id) => {
95
+ try {
96
+ <%_ if (database === 'MongoDB') { -%>
97
+ const deleted = await User.findByIdAndDelete(id);
98
+ if (!deleted) throw new Error(ERROR_MESSAGES.USER_NOT_FOUND);
99
+ <%_ } else if (database === 'None') { -%>
100
+ const deleted = await User.destroy(id);
101
+ if (!deleted) throw new Error(ERROR_MESSAGES.USER_NOT_FOUND);
102
+ <%_ } else { -%>
103
+ const user = await User.findByPk(id);
104
+ if (!user) throw new Error(ERROR_MESSAGES.USER_NOT_FOUND);
105
+ await user.destroy();
106
+ <%_ } -%>
107
+ <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
108
+ await cacheService.del('users:all');
109
+ <%_ } -%>
110
+ <%_ if (communication === 'Kafka') { -%>
111
+ await sendMessage('user-topic', JSON.stringify({
112
+ action: KAFKA_ACTIONS.USER_DELETED,
113
+ payload: { id }
114
+ }), id);
115
+ <%_ } -%>
116
+ return true;
117
+ } catch (error) {
118
+ logger.error(`${ERROR_MESSAGES.DELETE_USER_ERROR}:`, error);
119
+ throw error;
120
+ }
121
+ };
122
+
123
+ module.exports = { getUsers, createUser, updateUser, deleteUser };
124
+ <% } else { -%>
125
+ const getUsers = async (req, res, next) => {
126
+ try {
127
+ <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
128
+ const users = await cacheService.getOrSet('users:all', async () => {
129
+ <%_ if (database === 'MongoDB' || database === 'None') { -%>
130
+ return await User.find();
131
+ <%_ } else { -%>
132
+ return await User.findAll();
133
+ <%_ } -%>
134
+ }, 60);
135
+ <%_ } else { -%>
136
+ <%_ if (database === 'MongoDB' || database === 'None') { -%>
137
+ const users = await User.find();
138
+ <%_ } else { -%>
139
+ const users = await User.findAll();
140
+ <%_ } -%>
141
+ <%_ } -%>
142
+ res.json(users);
143
+ } catch (error) {
144
+ logger.error(`${ERROR_MESSAGES.FETCH_USERS_ERROR}:`, error);
145
+ next(error);
146
+ }
147
+ };
148
+
149
+ const createUser = async (req, res, next) => {
150
+ try {
151
+ const { name, email } = req.body || {};
152
+ const user = await User.create({ name, email });
153
+ <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
154
+ await cacheService.del('users:all');
155
+ <%_ } -%>
156
+ <%_ if (communication === 'Kafka') { -%>
157
+ await sendMessage('user-topic', JSON.stringify({
158
+ action: KAFKA_ACTIONS.USER_CREATED,
159
+ payload: { id: user.id || user._id, email: user.email }
160
+ }), (user.id || user._id).toString());
161
+ <%_ } -%>
162
+ res.status(HTTP_STATUS.CREATED).json(user);
163
+ } catch (error) {
164
+ logger.error(`${ERROR_MESSAGES.CREATE_USER_ERROR}:`, error);
165
+ next(error);
166
+ }
167
+ };
168
+
169
+ const updateUser = async (req, res, next) => {
170
+ try {
171
+ const { id } = req.params;
172
+ const { name, email } = req.body || {};
173
+ <%_ if (database === 'MongoDB') { -%>
174
+ const updatedUser = await User.findByIdAndUpdate(id, { name, email }, { new: true });
175
+ if (!updatedUser) {
176
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ error: ERROR_MESSAGES.USER_NOT_FOUND });
177
+ }
178
+ <%_ } else if (database === 'None') { -%>
179
+ const user = await User.findByPk(id);
180
+ if (!user) {
181
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ error: ERROR_MESSAGES.USER_NOT_FOUND });
182
+ }
183
+ await User.update(id, { name, email });
184
+ const updatedUser = await User.findByPk(id);
185
+ <%_ } else { -%>
186
+ const user = await User.findByPk(id);
187
+ if (!user) {
188
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ error: ERROR_MESSAGES.USER_NOT_FOUND });
189
+ }
190
+ await user.update({ name, email });
191
+ const updatedUser = user;
192
+ <%_ } -%>
193
+ <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
194
+ await cacheService.del('users:all');
195
+ <%_ } -%>
196
+ <%_ if (communication === 'Kafka') { -%>
197
+ await sendMessage('user-topic', JSON.stringify({
198
+ action: KAFKA_ACTIONS.USER_UPDATED,
199
+ payload: { id, email: updatedUser?.email }
200
+ }), id);
201
+ <%_ } -%>
202
+ res.status(HTTP_STATUS.OK).json(updatedUser);
203
+ } catch (error) {
204
+ logger.error(`${ERROR_MESSAGES.UPDATE_USER_ERROR}:`, error);
205
+ next(error);
206
+ }
207
+ };
208
+
209
+ const deleteUser = async (req, res, next) => {
210
+ try {
211
+ const { id } = req.params;
212
+ <%_ if (database === 'MongoDB') { -%>
213
+ const deleted = await User.findByIdAndDelete(id);
214
+ if (!deleted) {
215
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ error: ERROR_MESSAGES.USER_NOT_FOUND });
216
+ }
217
+ <%_ } else if (database === 'None') { -%>
218
+ const deleted = await User.destroy(id);
219
+ if (!deleted) {
220
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ error: ERROR_MESSAGES.USER_NOT_FOUND });
221
+ }
222
+ <%_ } else { -%>
223
+ const user = await User.findByPk(id);
224
+ if (!user) {
225
+ return res.status(HTTP_STATUS.NOT_FOUND).json({ error: ERROR_MESSAGES.USER_NOT_FOUND });
226
+ }
227
+ await user.destroy();
228
+ <%_ } -%>
229
+ <%_ if (caching === 'Redis' || caching === 'Memory Cache') { -%>
230
+ await cacheService.del('users:all');
231
+ <%_ } -%>
232
+ <%_ if (communication === 'Kafka') { -%>
233
+ await sendMessage('user-topic', JSON.stringify({
234
+ action: KAFKA_ACTIONS.USER_DELETED,
235
+ payload: { id }
236
+ }), id);
237
+ <%_ } -%>
238
+ res.status(HTTP_STATUS.OK).json({ message: 'User deleted successfully' });
239
+ } catch (error) {
240
+ logger.error(`${ERROR_MESSAGES.DELETE_USER_ERROR}:`, error);
241
+ next(error);
242
+ }
243
+ };
244
+
245
+ module.exports = { getUsers, createUser, updateUser, deleteUser };
246
+ <% } -%>