nodejs-quickstart-structure 1.18.0 → 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 (113) hide show
  1. package/CHANGELOG.md +17 -4
  2. package/README.md +2 -1
  3. package/bin/index.js +93 -92
  4. package/lib/generator.js +1 -1
  5. package/lib/modules/caching-setup.js +76 -73
  6. package/lib/modules/config-files.js +4 -0
  7. package/lib/modules/kafka-setup.js +249 -191
  8. package/lib/modules/project-setup.js +1 -0
  9. package/package.json +13 -2
  10. package/templates/clean-architecture/js/src/errors/BadRequestError.js +11 -10
  11. package/templates/clean-architecture/js/src/errors/BadRequestError.spec.js.ejs +22 -21
  12. package/templates/clean-architecture/js/src/errors/NotFoundError.js +11 -10
  13. package/templates/clean-architecture/js/src/errors/NotFoundError.spec.js.ejs +22 -21
  14. package/templates/clean-architecture/js/src/infrastructure/repositories/UserRepository.js.ejs +69 -39
  15. package/templates/clean-architecture/js/src/infrastructure/repositories/UserRepository.spec.js.ejs +142 -81
  16. package/templates/clean-architecture/js/src/infrastructure/webserver/server.js.ejs +1 -1
  17. package/templates/clean-architecture/js/src/interfaces/controllers/userController.js.ejs +156 -75
  18. package/templates/clean-architecture/js/src/interfaces/controllers/userController.spec.js.ejs +234 -138
  19. package/templates/clean-architecture/js/src/interfaces/graphql/resolvers/user.resolvers.js.ejs +27 -21
  20. package/templates/clean-architecture/js/src/interfaces/graphql/resolvers/user.resolvers.spec.js.ejs +66 -49
  21. package/templates/clean-architecture/js/src/interfaces/graphql/typeDefs/user.types.js.ejs +19 -17
  22. package/templates/clean-architecture/js/src/interfaces/routes/api.js +12 -10
  23. package/templates/clean-architecture/js/src/usecases/DeleteUser.js +11 -0
  24. package/templates/clean-architecture/js/src/usecases/DeleteUser.spec.js.ejs +47 -0
  25. package/templates/clean-architecture/js/src/usecases/UpdateUser.js +11 -0
  26. package/templates/clean-architecture/js/src/usecases/UpdateUser.spec.js.ejs +48 -0
  27. package/templates/clean-architecture/js/src/utils/errorMessages.js +14 -0
  28. package/templates/clean-architecture/ts/src/errors/BadRequestError.spec.ts.ejs +22 -21
  29. package/templates/clean-architecture/ts/src/errors/BadRequestError.ts +9 -8
  30. package/templates/clean-architecture/ts/src/errors/NotFoundError.spec.ts.ejs +22 -21
  31. package/templates/clean-architecture/ts/src/errors/NotFoundError.ts +9 -8
  32. package/templates/clean-architecture/ts/src/index.ts.ejs +1 -1
  33. package/templates/clean-architecture/ts/src/infrastructure/repositories/UserRepository.spec.ts.ejs +175 -85
  34. package/templates/clean-architecture/ts/src/infrastructure/repositories/userRepository.ts.ejs +74 -0
  35. package/templates/clean-architecture/ts/src/interfaces/controllers/userController.spec.ts.ejs +331 -185
  36. package/templates/clean-architecture/ts/src/interfaces/controllers/userController.ts.ejs +173 -84
  37. package/templates/clean-architecture/ts/src/interfaces/graphql/resolvers/user.resolvers.spec.ts.ejs +68 -51
  38. package/templates/clean-architecture/ts/src/interfaces/graphql/resolvers/user.resolvers.ts.ejs +29 -21
  39. package/templates/clean-architecture/ts/src/interfaces/graphql/typeDefs/user.types.ts.ejs +17 -15
  40. package/templates/clean-architecture/ts/src/interfaces/routes/userRoutes.ts +13 -11
  41. package/templates/clean-architecture/ts/src/usecases/deleteUser.spec.ts.ejs +47 -0
  42. package/templates/clean-architecture/ts/src/usecases/deleteUser.ts +9 -0
  43. package/templates/clean-architecture/ts/src/usecases/updateUser.spec.ts.ejs +48 -0
  44. package/templates/clean-architecture/ts/src/usecases/updateUser.ts +9 -0
  45. package/templates/clean-architecture/ts/src/utils/errorMessages.ts +12 -0
  46. package/templates/common/.gitattributes +46 -0
  47. package/templates/common/.snyk.ejs +45 -0
  48. package/templates/common/Dockerfile +17 -9
  49. package/templates/common/README.md.ejs +295 -263
  50. package/templates/common/caching/clean/js/DeleteUser.js.ejs +27 -0
  51. package/templates/common/caching/clean/js/UpdateUser.js.ejs +27 -0
  52. package/templates/common/caching/clean/ts/deleteUser.ts.ejs +24 -0
  53. package/templates/common/caching/clean/ts/updateUser.ts.ejs +25 -0
  54. package/templates/common/caching/ts/memoryCache.ts.ejs +73 -64
  55. package/templates/common/caching/ts/redisClient.ts.ejs +89 -80
  56. package/templates/common/database/js/models/User.js.ejs +79 -53
  57. package/templates/common/database/js/models/User.js.mongoose.ejs +23 -19
  58. package/templates/common/database/js/models/User.spec.js.ejs +94 -84
  59. package/templates/common/database/ts/models/User.spec.ts.ejs +100 -84
  60. package/templates/common/database/ts/models/User.ts.ejs +87 -61
  61. package/templates/common/database/ts/models/User.ts.mongoose.ejs +30 -25
  62. package/templates/common/health/js/healthRoute.js.ejs +50 -47
  63. package/templates/common/health/ts/healthRoute.ts.ejs +49 -46
  64. package/templates/common/jest.e2e.config.js.ejs +8 -8
  65. package/templates/common/kafka/js/messaging/baseConsumer.js.ejs +30 -30
  66. package/templates/common/kafka/js/messaging/userEventSchema.js.ejs +12 -11
  67. package/templates/common/kafka/js/messaging/welcomeEmailConsumer.js.ejs +44 -31
  68. package/templates/common/kafka/js/messaging/welcomeEmailConsumer.spec.js.ejs +86 -49
  69. package/templates/common/kafka/js/services/kafkaService.js.ejs +93 -93
  70. package/templates/common/kafka/js/utils/kafkaEvents.js.ejs +7 -0
  71. package/templates/common/kafka/ts/messaging/userEventSchema.spec.ts.ejs +51 -51
  72. package/templates/common/kafka/ts/messaging/userEventSchema.ts.ejs +12 -11
  73. package/templates/common/kafka/ts/messaging/welcomeEmailConsumer.spec.ts.ejs +86 -49
  74. package/templates/common/kafka/ts/messaging/welcomeEmailConsumer.ts.ejs +38 -25
  75. package/templates/common/kafka/ts/services/kafkaService.ts.ejs +95 -95
  76. package/templates/common/kafka/ts/utils/kafkaEvents.ts.ejs +5 -0
  77. package/templates/common/package.json.ejs +10 -2
  78. package/templates/common/shutdown/js/gracefulShutdown.js.ejs +65 -61
  79. package/templates/common/shutdown/js/gracefulShutdown.spec.js.ejs +149 -160
  80. package/templates/common/shutdown/ts/gracefulShutdown.spec.ts.ejs +179 -158
  81. package/templates/common/shutdown/ts/gracefulShutdown.ts.ejs +59 -55
  82. package/templates/common/src/tests/e2e/e2e.users.test.js.ejs +120 -49
  83. package/templates/common/src/tests/e2e/e2e.users.test.ts.ejs +120 -49
  84. package/templates/common/swagger.yml.ejs +118 -66
  85. package/templates/db/mysql/V1__Initial_Setup.sql.ejs +10 -9
  86. package/templates/db/postgres/V1__Initial_Setup.sql.ejs +10 -9
  87. package/templates/mvc/js/src/controllers/userController.js.ejs +246 -105
  88. package/templates/mvc/js/src/controllers/userController.spec.js.ejs +481 -209
  89. package/templates/mvc/js/src/errors/BadRequestError.js +11 -10
  90. package/templates/mvc/js/src/errors/BadRequestError.spec.js.ejs +22 -21
  91. package/templates/mvc/js/src/errors/NotFoundError.js +11 -10
  92. package/templates/mvc/js/src/errors/NotFoundError.spec.js.ejs +22 -21
  93. package/templates/mvc/js/src/graphql/resolvers/user.resolvers.js.ejs +25 -19
  94. package/templates/mvc/js/src/graphql/resolvers/user.resolvers.spec.js.ejs +64 -47
  95. package/templates/mvc/js/src/graphql/typeDefs/user.types.js.ejs +19 -17
  96. package/templates/mvc/js/src/index.js.ejs +1 -1
  97. package/templates/mvc/js/src/routes/api.js +10 -8
  98. package/templates/mvc/js/src/routes/api.spec.js.ejs +41 -36
  99. package/templates/mvc/js/src/utils/errorMessages.js +14 -0
  100. package/templates/mvc/ts/src/controllers/userController.spec.ts.ejs +481 -203
  101. package/templates/mvc/ts/src/controllers/userController.ts.ejs +248 -107
  102. package/templates/mvc/ts/src/errors/BadRequestError.spec.ts.ejs +22 -21
  103. package/templates/mvc/ts/src/errors/BadRequestError.ts +9 -8
  104. package/templates/mvc/ts/src/errors/NotFoundError.spec.ts.ejs +27 -21
  105. package/templates/mvc/ts/src/errors/NotFoundError.ts +9 -8
  106. package/templates/mvc/ts/src/graphql/resolvers/user.resolvers.spec.ts.ejs +68 -51
  107. package/templates/mvc/ts/src/graphql/resolvers/user.resolvers.ts.ejs +29 -21
  108. package/templates/mvc/ts/src/graphql/typeDefs/user.types.ts.ejs +17 -15
  109. package/templates/mvc/ts/src/index.ts.ejs +156 -153
  110. package/templates/mvc/ts/src/routes/api.spec.ts.ejs +59 -40
  111. package/templates/mvc/ts/src/routes/api.ts +12 -10
  112. package/templates/mvc/ts/src/utils/errorMessages.ts +12 -0
  113. package/templates/clean-architecture/ts/src/infrastructure/repositories/UserRepository.ts.ejs +0 -37
@@ -1,9 +1,10 @@
1
- CREATE TABLE users (
2
- id SERIAL PRIMARY KEY,
3
- name VARCHAR(255) NOT NULL,
4
- email VARCHAR(255) NOT NULL UNIQUE,
5
- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
6
- updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
7
- );
8
-
9
- INSERT INTO users (name, email) VALUES ('Admin User', 'admin@example.com');
1
+ CREATE TABLE users (
2
+ id SERIAL PRIMARY KEY,
3
+ name VARCHAR(255) NOT NULL,
4
+ email VARCHAR(255) NOT NULL UNIQUE,
5
+ created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
6
+ updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
7
+ deleted_at TIMESTAMP NULL
8
+ );
9
+
10
+ INSERT INTO users (name, email) VALUES ('Admin User', 'admin@example.com');
@@ -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
+ <% } -%>