nodejs-quickstart-structure 1.18.1 → 1.19.1

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 (235) hide show
  1. package/CHANGELOG.md +309 -294
  2. package/LICENSE +15 -15
  3. package/README.md +2 -1
  4. package/lib/generator.js +139 -139
  5. package/lib/modules/app-setup.js +401 -401
  6. package/lib/modules/caching-setup.js +76 -73
  7. package/lib/modules/config-files.js +151 -151
  8. package/lib/modules/database-setup.js +116 -116
  9. package/lib/modules/kafka-setup.js +249 -191
  10. package/lib/modules/project-setup.js +32 -31
  11. package/lib/prompts.js +100 -100
  12. package/package.json +78 -67
  13. package/templates/clean-architecture/js/src/domain/models/User.js +9 -9
  14. package/templates/clean-architecture/js/src/errors/ApiError.js +14 -14
  15. package/templates/clean-architecture/js/src/errors/BadRequestError.js +11 -10
  16. package/templates/clean-architecture/js/src/errors/BadRequestError.spec.js.ejs +22 -21
  17. package/templates/clean-architecture/js/src/errors/NotFoundError.js +11 -10
  18. package/templates/clean-architecture/js/src/errors/NotFoundError.spec.js.ejs +22 -21
  19. package/templates/clean-architecture/js/src/index.js.ejs +55 -55
  20. package/templates/clean-architecture/js/src/infrastructure/config/env.js.ejs +47 -47
  21. package/templates/clean-architecture/js/src/infrastructure/log/logger.js +36 -36
  22. package/templates/clean-architecture/js/src/infrastructure/log/logger.spec.js.ejs +63 -63
  23. package/templates/clean-architecture/js/src/infrastructure/repositories/UserRepository.js.ejs +69 -39
  24. package/templates/clean-architecture/js/src/infrastructure/repositories/UserRepository.spec.js.ejs +142 -81
  25. package/templates/clean-architecture/js/src/infrastructure/webserver/middleware/errorMiddleware.js +30 -30
  26. package/templates/clean-architecture/js/src/infrastructure/webserver/server.js.ejs +89 -89
  27. package/templates/clean-architecture/js/src/infrastructure/webserver/swagger.js.ejs +6 -6
  28. package/templates/clean-architecture/js/src/interfaces/controllers/userController.js.ejs +156 -75
  29. package/templates/clean-architecture/js/src/interfaces/controllers/userController.spec.js.ejs +234 -138
  30. package/templates/clean-architecture/js/src/interfaces/graphql/context.js.ejs +13 -13
  31. package/templates/clean-architecture/js/src/interfaces/graphql/context.spec.js.ejs +31 -31
  32. package/templates/clean-architecture/js/src/interfaces/graphql/index.js.ejs +5 -5
  33. package/templates/clean-architecture/js/src/interfaces/graphql/resolvers/index.js.ejs +6 -6
  34. package/templates/clean-architecture/js/src/interfaces/graphql/resolvers/user.resolvers.js.ejs +27 -21
  35. package/templates/clean-architecture/js/src/interfaces/graphql/resolvers/user.resolvers.spec.js.ejs +66 -49
  36. package/templates/clean-architecture/js/src/interfaces/graphql/typeDefs/index.js.ejs +6 -6
  37. package/templates/clean-architecture/js/src/interfaces/graphql/typeDefs/user.types.js.ejs +19 -17
  38. package/templates/clean-architecture/js/src/interfaces/routes/api.js +12 -10
  39. package/templates/clean-architecture/js/src/interfaces/routes/api.spec.js.ejs +38 -38
  40. package/templates/clean-architecture/js/src/usecases/CreateUser.js +14 -14
  41. package/templates/clean-architecture/js/src/usecases/CreateUser.spec.js.ejs +51 -51
  42. package/templates/clean-architecture/js/src/usecases/DeleteUser.js +11 -0
  43. package/templates/clean-architecture/js/src/usecases/DeleteUser.spec.js.ejs +47 -0
  44. package/templates/clean-architecture/js/src/usecases/GetAllUsers.js +12 -12
  45. package/templates/clean-architecture/js/src/usecases/GetAllUsers.spec.js.ejs +61 -61
  46. package/templates/clean-architecture/js/src/usecases/UpdateUser.js +11 -0
  47. package/templates/clean-architecture/js/src/usecases/UpdateUser.spec.js.ejs +48 -0
  48. package/templates/clean-architecture/js/src/utils/errorMessages.js +14 -0
  49. package/templates/clean-architecture/js/src/utils/httpCodes.js +9 -9
  50. package/templates/clean-architecture/ts/src/config/env.ts.ejs +46 -46
  51. package/templates/clean-architecture/ts/src/config/swagger.ts.ejs +6 -6
  52. package/templates/clean-architecture/ts/src/domain/user.ts +7 -7
  53. package/templates/clean-architecture/ts/src/errors/ApiError.ts +15 -15
  54. package/templates/clean-architecture/ts/src/errors/BadRequestError.spec.ts.ejs +22 -21
  55. package/templates/clean-architecture/ts/src/errors/BadRequestError.ts +9 -8
  56. package/templates/clean-architecture/ts/src/errors/NotFoundError.spec.ts.ejs +22 -21
  57. package/templates/clean-architecture/ts/src/errors/NotFoundError.ts +9 -8
  58. package/templates/clean-architecture/ts/src/index.ts.ejs +139 -139
  59. package/templates/clean-architecture/ts/src/infrastructure/log/logger.spec.ts.ejs +63 -63
  60. package/templates/clean-architecture/ts/src/infrastructure/log/logger.ts +36 -36
  61. package/templates/clean-architecture/ts/src/infrastructure/repositories/UserRepository.spec.ts.ejs +175 -85
  62. package/templates/clean-architecture/ts/src/infrastructure/repositories/userRepository.ts.ejs +74 -0
  63. package/templates/clean-architecture/ts/src/interfaces/controllers/userController.spec.ts.ejs +331 -185
  64. package/templates/clean-architecture/ts/src/interfaces/controllers/userController.ts.ejs +173 -84
  65. package/templates/clean-architecture/ts/src/interfaces/graphql/context.spec.ts.ejs +32 -32
  66. package/templates/clean-architecture/ts/src/interfaces/graphql/context.ts.ejs +17 -17
  67. package/templates/clean-architecture/ts/src/interfaces/graphql/index.ts.ejs +3 -3
  68. package/templates/clean-architecture/ts/src/interfaces/graphql/resolvers/index.ts.ejs +4 -4
  69. package/templates/clean-architecture/ts/src/interfaces/graphql/resolvers/user.resolvers.spec.ts.ejs +68 -51
  70. package/templates/clean-architecture/ts/src/interfaces/graphql/resolvers/user.resolvers.ts.ejs +29 -21
  71. package/templates/clean-architecture/ts/src/interfaces/graphql/typeDefs/index.ts.ejs +4 -4
  72. package/templates/clean-architecture/ts/src/interfaces/graphql/typeDefs/user.types.ts.ejs +17 -15
  73. package/templates/clean-architecture/ts/src/interfaces/routes/userRoutes.spec.ts.ejs +40 -40
  74. package/templates/clean-architecture/ts/src/interfaces/routes/userRoutes.ts +13 -11
  75. package/templates/clean-architecture/ts/src/usecases/createUser.spec.ts.ejs +51 -51
  76. package/templates/clean-architecture/ts/src/usecases/createUser.ts +13 -13
  77. package/templates/clean-architecture/ts/src/usecases/deleteUser.spec.ts.ejs +47 -0
  78. package/templates/clean-architecture/ts/src/usecases/deleteUser.ts +9 -0
  79. package/templates/clean-architecture/ts/src/usecases/getAllUsers.spec.ts.ejs +63 -63
  80. package/templates/clean-architecture/ts/src/usecases/getAllUsers.ts +10 -10
  81. package/templates/clean-architecture/ts/src/usecases/updateUser.spec.ts.ejs +48 -0
  82. package/templates/clean-architecture/ts/src/usecases/updateUser.ts +9 -0
  83. package/templates/clean-architecture/ts/src/utils/errorMessages.ts +12 -0
  84. package/templates/clean-architecture/ts/src/utils/errorMiddleware.ts.ejs +27 -27
  85. package/templates/clean-architecture/ts/src/utils/httpCodes.ts +7 -7
  86. package/templates/common/.cursorrules.ejs +60 -60
  87. package/templates/common/.dockerignore +12 -12
  88. package/templates/common/.env.example.ejs +41 -41
  89. package/templates/common/.gitattributes +46 -0
  90. package/templates/common/.gitlab-ci.yml.ejs +86 -86
  91. package/templates/common/.lintstagedrc +6 -6
  92. package/templates/common/.prettierrc +7 -7
  93. package/templates/common/Dockerfile +73 -73
  94. package/templates/common/Jenkinsfile.ejs +87 -87
  95. package/templates/common/README.md.ejs +294 -270
  96. package/templates/common/SECURITY.md +20 -20
  97. package/templates/common/_github/workflows/ci.yml.ejs +46 -46
  98. package/templates/common/_github/workflows/security.yml.ejs +36 -36
  99. package/templates/common/_gitignore +5 -5
  100. package/templates/common/_husky/pre-commit +4 -4
  101. package/templates/common/caching/clean/js/CreateUser.js.ejs +29 -29
  102. package/templates/common/caching/clean/js/DeleteUser.js.ejs +27 -0
  103. package/templates/common/caching/clean/js/GetAllUsers.js.ejs +37 -37
  104. package/templates/common/caching/clean/js/UpdateUser.js.ejs +27 -0
  105. package/templates/common/caching/clean/ts/createUser.ts.ejs +27 -27
  106. package/templates/common/caching/clean/ts/deleteUser.ts.ejs +24 -0
  107. package/templates/common/caching/clean/ts/getAllUsers.ts.ejs +34 -34
  108. package/templates/common/caching/clean/ts/updateUser.ts.ejs +25 -0
  109. package/templates/common/caching/js/memoryCache.js.ejs +60 -60
  110. package/templates/common/caching/js/memoryCache.spec.js.ejs +101 -101
  111. package/templates/common/caching/js/redisClient.js.ejs +75 -75
  112. package/templates/common/caching/js/redisClient.spec.js.ejs +147 -147
  113. package/templates/common/caching/ts/memoryCache.spec.ts.ejs +102 -102
  114. package/templates/common/caching/ts/memoryCache.ts.ejs +73 -64
  115. package/templates/common/caching/ts/redisClient.spec.ts.ejs +157 -157
  116. package/templates/common/caching/ts/redisClient.ts.ejs +89 -80
  117. package/templates/common/database/js/database.js.ejs +19 -19
  118. package/templates/common/database/js/database.spec.js.ejs +56 -56
  119. package/templates/common/database/js/models/User.js.ejs +79 -53
  120. package/templates/common/database/js/models/User.js.mongoose.ejs +23 -19
  121. package/templates/common/database/js/models/User.spec.js.ejs +94 -84
  122. package/templates/common/database/js/mongoose.js.ejs +33 -33
  123. package/templates/common/database/js/mongoose.spec.js.ejs +43 -43
  124. package/templates/common/database/ts/database.spec.ts.ejs +56 -56
  125. package/templates/common/database/ts/database.ts.ejs +21 -21
  126. package/templates/common/database/ts/models/User.spec.ts.ejs +100 -84
  127. package/templates/common/database/ts/models/User.ts.ejs +87 -61
  128. package/templates/common/database/ts/models/User.ts.mongoose.ejs +30 -25
  129. package/templates/common/database/ts/mongoose.spec.ts.ejs +42 -42
  130. package/templates/common/database/ts/mongoose.ts.ejs +28 -28
  131. package/templates/common/docker-compose.yml.ejs +159 -159
  132. package/templates/common/ecosystem.config.js.ejs +40 -40
  133. package/templates/common/eslint.config.mjs.ejs +77 -77
  134. package/templates/common/health/js/healthRoute.js.ejs +50 -47
  135. package/templates/common/health/js/healthRoute.spec.js.ejs +70 -70
  136. package/templates/common/health/ts/healthRoute.spec.ts.ejs +76 -76
  137. package/templates/common/health/ts/healthRoute.ts.ejs +49 -46
  138. package/templates/common/jest.config.js.ejs +32 -32
  139. package/templates/common/jest.e2e.config.js.ejs +8 -8
  140. package/templates/common/kafka/js/config/kafka.js +9 -9
  141. package/templates/common/kafka/js/config/kafka.spec.js.ejs +27 -27
  142. package/templates/common/kafka/js/messaging/baseConsumer.js.ejs +30 -30
  143. package/templates/common/kafka/js/messaging/baseConsumer.spec.js.ejs +58 -58
  144. package/templates/common/kafka/js/messaging/userEventSchema.js.ejs +12 -11
  145. package/templates/common/kafka/js/messaging/userEventSchema.spec.js.ejs +27 -27
  146. package/templates/common/kafka/js/messaging/welcomeEmailConsumer.js.ejs +44 -31
  147. package/templates/common/kafka/js/messaging/welcomeEmailConsumer.spec.js.ejs +86 -49
  148. package/templates/common/kafka/js/services/kafkaService.js.ejs +93 -93
  149. package/templates/common/kafka/js/services/kafkaService.spec.js.ejs +106 -106
  150. package/templates/common/kafka/js/utils/kafkaEvents.js.ejs +7 -0
  151. package/templates/common/kafka/ts/config/kafka.spec.ts.ejs +27 -27
  152. package/templates/common/kafka/ts/config/kafka.ts +7 -7
  153. package/templates/common/kafka/ts/messaging/baseConsumer.spec.ts.ejs +50 -50
  154. package/templates/common/kafka/ts/messaging/baseConsumer.ts.ejs +27 -27
  155. package/templates/common/kafka/ts/messaging/userEventSchema.spec.ts.ejs +51 -51
  156. package/templates/common/kafka/ts/messaging/userEventSchema.ts.ejs +12 -11
  157. package/templates/common/kafka/ts/messaging/welcomeEmailConsumer.spec.ts.ejs +86 -49
  158. package/templates/common/kafka/ts/messaging/welcomeEmailConsumer.ts.ejs +38 -25
  159. package/templates/common/kafka/ts/services/kafkaService.spec.ts.ejs +81 -81
  160. package/templates/common/kafka/ts/services/kafkaService.ts.ejs +95 -95
  161. package/templates/common/kafka/ts/utils/kafkaEvents.ts.ejs +5 -0
  162. package/templates/common/migrate-mongo-config.js.ejs +31 -31
  163. package/templates/common/migrations/init.js.ejs +23 -23
  164. package/templates/common/package.json.ejs +119 -118
  165. package/templates/common/prompts/add-feature.md.ejs +26 -26
  166. package/templates/common/prompts/project-context.md.ejs +43 -43
  167. package/templates/common/prompts/troubleshoot.md.ejs +28 -28
  168. package/templates/common/public/css/style.css +147 -147
  169. package/templates/common/scripts/run-e2e.js.ejs +63 -63
  170. package/templates/common/shutdown/js/gracefulShutdown.js.ejs +65 -61
  171. package/templates/common/shutdown/js/gracefulShutdown.spec.js.ejs +149 -160
  172. package/templates/common/shutdown/ts/gracefulShutdown.spec.ts.ejs +179 -158
  173. package/templates/common/shutdown/ts/gracefulShutdown.ts.ejs +59 -55
  174. package/templates/common/sonar-project.properties.ejs +27 -27
  175. package/templates/common/src/tests/e2e/e2e.users.test.js.ejs +120 -49
  176. package/templates/common/src/tests/e2e/e2e.users.test.ts.ejs +120 -49
  177. package/templates/common/src/utils/errorMiddleware.spec.js.ejs +79 -79
  178. package/templates/common/src/utils/errorMiddleware.spec.ts.ejs +94 -94
  179. package/templates/common/swagger.yml.ejs +118 -66
  180. package/templates/common/tsconfig.json +22 -22
  181. package/templates/common/views/ejs/index.ejs +55 -55
  182. package/templates/common/views/pug/index.pug +40 -40
  183. package/templates/db/mysql/V1__Initial_Setup.sql.ejs +10 -9
  184. package/templates/db/postgres/V1__Initial_Setup.sql.ejs +10 -9
  185. package/templates/mvc/js/src/config/env.js.ejs +46 -46
  186. package/templates/mvc/js/src/config/swagger.js.ejs +6 -6
  187. package/templates/mvc/js/src/controllers/userController.js.ejs +246 -105
  188. package/templates/mvc/js/src/controllers/userController.spec.js.ejs +481 -209
  189. package/templates/mvc/js/src/errors/ApiError.js +14 -14
  190. package/templates/mvc/js/src/errors/BadRequestError.js +11 -10
  191. package/templates/mvc/js/src/errors/BadRequestError.spec.js.ejs +22 -21
  192. package/templates/mvc/js/src/errors/NotFoundError.js +11 -10
  193. package/templates/mvc/js/src/errors/NotFoundError.spec.js.ejs +22 -21
  194. package/templates/mvc/js/src/graphql/context.js.ejs +7 -7
  195. package/templates/mvc/js/src/graphql/context.spec.js.ejs +29 -29
  196. package/templates/mvc/js/src/graphql/index.js.ejs +5 -5
  197. package/templates/mvc/js/src/graphql/resolvers/index.js.ejs +6 -6
  198. package/templates/mvc/js/src/graphql/resolvers/user.resolvers.js.ejs +25 -19
  199. package/templates/mvc/js/src/graphql/resolvers/user.resolvers.spec.js.ejs +64 -47
  200. package/templates/mvc/js/src/graphql/typeDefs/index.js.ejs +6 -6
  201. package/templates/mvc/js/src/graphql/typeDefs/user.types.js.ejs +19 -17
  202. package/templates/mvc/js/src/index.js.ejs +136 -136
  203. package/templates/mvc/js/src/routes/api.js +10 -8
  204. package/templates/mvc/js/src/routes/api.spec.js.ejs +41 -36
  205. package/templates/mvc/js/src/utils/errorMessages.js +14 -0
  206. package/templates/mvc/js/src/utils/errorMiddleware.js +29 -29
  207. package/templates/mvc/js/src/utils/httpCodes.js +9 -9
  208. package/templates/mvc/js/src/utils/logger.js +40 -40
  209. package/templates/mvc/js/src/utils/logger.spec.js.ejs +63 -63
  210. package/templates/mvc/ts/src/config/env.ts.ejs +45 -45
  211. package/templates/mvc/ts/src/config/swagger.ts.ejs +6 -6
  212. package/templates/mvc/ts/src/controllers/userController.spec.ts.ejs +481 -203
  213. package/templates/mvc/ts/src/controllers/userController.ts.ejs +248 -107
  214. package/templates/mvc/ts/src/errors/ApiError.ts +15 -15
  215. package/templates/mvc/ts/src/errors/BadRequestError.spec.ts.ejs +22 -21
  216. package/templates/mvc/ts/src/errors/BadRequestError.ts +9 -8
  217. package/templates/mvc/ts/src/errors/NotFoundError.spec.ts.ejs +27 -21
  218. package/templates/mvc/ts/src/errors/NotFoundError.ts +9 -8
  219. package/templates/mvc/ts/src/graphql/context.spec.ts.ejs +30 -30
  220. package/templates/mvc/ts/src/graphql/context.ts.ejs +12 -12
  221. package/templates/mvc/ts/src/graphql/index.ts.ejs +3 -3
  222. package/templates/mvc/ts/src/graphql/resolvers/index.ts.ejs +4 -4
  223. package/templates/mvc/ts/src/graphql/resolvers/user.resolvers.spec.ts.ejs +68 -51
  224. package/templates/mvc/ts/src/graphql/resolvers/user.resolvers.ts.ejs +29 -21
  225. package/templates/mvc/ts/src/graphql/typeDefs/index.ts.ejs +4 -4
  226. package/templates/mvc/ts/src/graphql/typeDefs/user.types.ts.ejs +17 -15
  227. package/templates/mvc/ts/src/index.ts.ejs +156 -153
  228. package/templates/mvc/ts/src/routes/api.spec.ts.ejs +59 -40
  229. package/templates/mvc/ts/src/routes/api.ts +12 -10
  230. package/templates/mvc/ts/src/utils/errorMessages.ts +12 -0
  231. package/templates/mvc/ts/src/utils/errorMiddleware.ts.ejs +27 -27
  232. package/templates/mvc/ts/src/utils/httpCodes.ts +7 -7
  233. package/templates/mvc/ts/src/utils/logger.spec.ts.ejs +63 -63
  234. package/templates/mvc/ts/src/utils/logger.ts +36 -36
  235. package/templates/clean-architecture/ts/src/infrastructure/repositories/UserRepository.ts.ejs +0 -37
@@ -1,46 +1,46 @@
1
- name: Node.js CI
2
-
3
- env:
4
- FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
5
-
6
- on:
7
- push:
8
- branches: [ "main" ]
9
- pull_request:
10
- branches: [ "main" ]
11
-
12
- jobs:
13
- build:
14
-
15
- runs-on: ubuntu-latest
16
-
17
- steps:
18
- - uses: actions/checkout@v4
19
-
20
- - name: Use Node.js 22.x
21
- uses: actions/setup-node@v4
22
- with:
23
- node-version: 22.x
24
- cache: 'npm'
25
-
26
- - name: Install Dependencies
27
- run: npm ci
28
-
29
- - name: Lint Code
30
- run: npm run lint
31
-
32
- - name: Run Unit Tests
33
- run: npm run test:coverage
34
-
35
- - name: Run E2E Tests
36
- run: npm run test:e2e
37
-
38
- - name: Build
39
- run: npm run build --if-present
40
- <% if (includeSecurity) { %>
41
- - name: SonarQube Scan
42
- uses: SonarSource/sonarqube-scan-action@master
43
- env:
44
- SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
45
- SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
46
- <% } %>
1
+ name: Node.js CI
2
+
3
+ env:
4
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
5
+
6
+ on:
7
+ push:
8
+ branches: [ "main" ]
9
+ pull_request:
10
+ branches: [ "main" ]
11
+
12
+ jobs:
13
+ build:
14
+
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Use Node.js 22.x
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: 22.x
24
+ cache: 'npm'
25
+
26
+ - name: Install Dependencies
27
+ run: npm ci
28
+
29
+ - name: Lint Code
30
+ run: npm run lint
31
+
32
+ - name: Run Unit Tests
33
+ run: npm run test:coverage
34
+
35
+ - name: Run E2E Tests
36
+ run: npm run test:e2e
37
+
38
+ - name: Build
39
+ run: npm run build --if-present
40
+ <% if (includeSecurity) { %>
41
+ - name: SonarQube Scan
42
+ uses: SonarSource/sonarqube-scan-action@master
43
+ env:
44
+ SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
45
+ SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}
46
+ <% } %>
@@ -1,36 +1,36 @@
1
- name: Enterprise Security Scan
2
-
3
- on:
4
- push:
5
- branches: [ "main" ]
6
- pull_request:
7
- branches: [ "main" ]
8
- schedule:
9
- - cron: '0 0 * * 1' # Weekly scan
10
-
11
- jobs:
12
- node-security:
13
- runs-on: ubuntu-latest
14
- steps:
15
- - uses: actions/checkout@v4
16
-
17
- - name: Run Snyk to check for vulnerabilities
18
- uses: snyk/actions/node@master
19
- env:
20
- SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
21
- with:
22
- args: --severity-threshold=high
23
-
24
- container-security:
25
- runs-on: ubuntu-latest
26
- steps:
27
- - uses: actions/checkout@v4
28
- - name: Build Docker image
29
- run: docker build -t <%= projectName %>:latest .
30
- - name: Run Snyk to check Docker image for vulnerabilities
31
- uses: snyk/actions/docker@master
32
- env:
33
- SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
34
- with:
35
- image: <%= projectName %>:latest
36
- args: --file=Dockerfile --severity-threshold=high --skip-unused-projects
1
+ name: Enterprise Security Scan
2
+
3
+ on:
4
+ push:
5
+ branches: [ "main" ]
6
+ pull_request:
7
+ branches: [ "main" ]
8
+ schedule:
9
+ - cron: '0 0 * * 1' # Weekly scan
10
+
11
+ jobs:
12
+ node-security:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+
17
+ - name: Run Snyk to check for vulnerabilities
18
+ uses: snyk/actions/node@master
19
+ env:
20
+ SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
21
+ with:
22
+ args: --severity-threshold=high
23
+
24
+ container-security:
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ - name: Build Docker image
29
+ run: docker build -t <%= projectName %>:latest .
30
+ - name: Run Snyk to check Docker image for vulnerabilities
31
+ uses: snyk/actions/docker@master
32
+ env:
33
+ SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
34
+ with:
35
+ image: <%= projectName %>:latest
36
+ args: --file=Dockerfile --severity-threshold=high --skip-unused-projects
@@ -1,5 +1,5 @@
1
- node_modules
2
- dist
3
- .env
4
- .DS_Store
5
- coverage
1
+ node_modules
2
+ dist
3
+ .env
4
+ .DS_Store
5
+ coverage
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env sh
2
- . "$(dirname -- "$0")/_/husky.sh"
3
-
4
- npx lint-staged
1
+ #!/usr/bin/env sh
2
+ . "$(dirname -- "$0")/_/husky.sh"
3
+
4
+ npx lint-staged
@@ -1,29 +1,29 @@
1
- const User = require('../domain/models/User');
2
- <%_ if (caching === 'Redis') { -%>
3
- const cacheService = require('../infrastructure/caching/redisClient');
4
- <%_ } else if (caching === 'Memory Cache') { -%>
5
- const cacheService = require('../infrastructure/caching/memoryCache');
6
- <%_ } -%>
7
- const logger = require('../infrastructure/log/logger');
8
-
9
- class CreateUser {
10
- constructor(userRepository) {
11
- this.userRepository = userRepository;
12
- }
13
-
14
- async execute(name, email) {
15
- const user = new User(null, name, email);
16
- const savedUser = await this.userRepository.save(user);
17
-
18
- try {
19
- await cacheService.del('users:all');
20
- logger.info('Invalidated users:all cache');
21
- } catch (error) {
22
- logger.error('Cache error (del):', error);
23
- }
24
-
25
- return savedUser;
26
- }
27
- }
28
-
29
- module.exports = CreateUser;
1
+ const User = require('../domain/models/User');
2
+ <%_ if (caching === 'Redis') { -%>
3
+ const cacheService = require('../infrastructure/caching/redisClient');
4
+ <%_ } else if (caching === 'Memory Cache') { -%>
5
+ const cacheService = require('../infrastructure/caching/memoryCache');
6
+ <%_ } -%>
7
+ const logger = require('../infrastructure/log/logger');
8
+
9
+ class CreateUser {
10
+ constructor(userRepository) {
11
+ this.userRepository = userRepository;
12
+ }
13
+
14
+ async execute(name, email) {
15
+ const user = new User(null, name, email);
16
+ const savedUser = await this.userRepository.save(user);
17
+
18
+ try {
19
+ await cacheService.del('users:all');
20
+ logger.info('Invalidated users:all cache');
21
+ } catch (error) {
22
+ logger.error('Cache error (del):', error);
23
+ }
24
+
25
+ return savedUser;
26
+ }
27
+ }
28
+
29
+ module.exports = CreateUser;
@@ -0,0 +1,27 @@
1
+ <%_ if (caching === 'Redis') { -%>
2
+ const cacheService = require('../infrastructure/caching/redisClient');
3
+ <%_ } else if (caching === 'Memory Cache') { -%>
4
+ const cacheService = require('../infrastructure/caching/memoryCache');
5
+ <%_ } -%>
6
+ const logger = require('../infrastructure/log/logger');
7
+
8
+ class DeleteUser {
9
+ constructor(userRepository) {
10
+ this.userRepository = userRepository;
11
+ }
12
+
13
+ async execute(id) {
14
+ const result = await this.userRepository.delete(id);
15
+
16
+ try {
17
+ await cacheService.del('users:all');
18
+ logger.info('Invalidated users:all cache');
19
+ } catch (error) {
20
+ logger.error('Cache error (del):', error);
21
+ }
22
+
23
+ return result;
24
+ }
25
+ }
26
+
27
+ module.exports = DeleteUser;
@@ -1,37 +1,37 @@
1
- <%_ if (caching === 'Redis') { -%>
2
- const cacheService = require('../infrastructure/caching/redisClient');
3
- <%_ } else if (caching === 'Memory Cache') { -%>
4
- const cacheService = require('../infrastructure/caching/memoryCache');
5
- <%_ } -%>
6
- const logger = require('../infrastructure/log/logger');
7
-
8
- class GetAllUsers {
9
- constructor(userRepository) {
10
- this.userRepository = userRepository;
11
- }
12
-
13
- async execute() {
14
- const cacheKey = 'users:all';
15
- try {
16
- const cachedUsers = await cacheService.get(cacheKey);
17
- if (cachedUsers) {
18
- logger.info('Serving users from cache');
19
- return cachedUsers;
20
- }
21
- } catch (error) {
22
- logger.error('Cache error (get):', error);
23
- }
24
-
25
- const users = await this.userRepository.getUsers();
26
-
27
- try {
28
- await cacheService.set(cacheKey, users, 60);
29
- } catch (error) {
30
- logger.error('Cache error (set):', error);
31
- }
32
-
33
- return users;
34
- }
35
- }
36
-
37
- module.exports = GetAllUsers;
1
+ <%_ if (caching === 'Redis') { -%>
2
+ const cacheService = require('../infrastructure/caching/redisClient');
3
+ <%_ } else if (caching === 'Memory Cache') { -%>
4
+ const cacheService = require('../infrastructure/caching/memoryCache');
5
+ <%_ } -%>
6
+ const logger = require('../infrastructure/log/logger');
7
+
8
+ class GetAllUsers {
9
+ constructor(userRepository) {
10
+ this.userRepository = userRepository;
11
+ }
12
+
13
+ async execute() {
14
+ const cacheKey = 'users:all';
15
+ try {
16
+ const cachedUsers = await cacheService.get(cacheKey);
17
+ if (cachedUsers) {
18
+ logger.info('Serving users from cache');
19
+ return cachedUsers;
20
+ }
21
+ } catch (error) {
22
+ logger.error('Cache error (get):', error);
23
+ }
24
+
25
+ const users = await this.userRepository.getUsers();
26
+
27
+ try {
28
+ await cacheService.set(cacheKey, users, 60);
29
+ } catch (error) {
30
+ logger.error('Cache error (set):', error);
31
+ }
32
+
33
+ return users;
34
+ }
35
+ }
36
+
37
+ module.exports = GetAllUsers;
@@ -0,0 +1,27 @@
1
+ <%_ if (caching === 'Redis') { -%>
2
+ const cacheService = require('../infrastructure/caching/redisClient');
3
+ <%_ } else if (caching === 'Memory Cache') { -%>
4
+ const cacheService = require('../infrastructure/caching/memoryCache');
5
+ <%_ } -%>
6
+ const logger = require('../infrastructure/log/logger');
7
+
8
+ class UpdateUser {
9
+ constructor(userRepository) {
10
+ this.userRepository = userRepository;
11
+ }
12
+
13
+ async execute(id, data) {
14
+ const updatedUser = await this.userRepository.update(id, data);
15
+
16
+ try {
17
+ await cacheService.del('users:all');
18
+ logger.info('Invalidated users:all cache');
19
+ } catch (error) {
20
+ logger.error('Cache error (del):', error);
21
+ }
22
+
23
+ return updatedUser;
24
+ }
25
+ }
26
+
27
+ module.exports = UpdateUser;
@@ -1,27 +1,27 @@
1
- import { User } from '@/domain/user';
2
-
3
- import { UserRepository } from '@/infrastructure/repositories/UserRepository';
4
- <%_ if (caching === 'Redis') { -%>
5
- import cacheService from '@/infrastructure/caching/redisClient';
6
- <%_ } else if (caching === 'Memory Cache') { -%>
7
- import cacheService from '@/infrastructure/caching/memoryCache';
8
- <%_ } -%>
9
- import logger from '@/infrastructure/log/logger';
10
-
11
- export default class CreateUser {
12
- constructor(private userRepository: UserRepository) {}
13
-
14
- async execute(name: string, email: string) {
15
- const user = new User(null, name, email);
16
- const savedUser = await this.userRepository.save(user);
17
-
18
- try {
19
- await cacheService.del('users:all');
20
- logger.info('Invalidated users:all cache');
21
- } catch (error) {
22
- logger.error('Cache error (del):', error);
23
- }
24
-
25
- return savedUser;
26
- }
27
- }
1
+ import { User } from '@/domain/user';
2
+
3
+ import { UserRepository } from '@/infrastructure/repositories/UserRepository';
4
+ <%_ if (caching === 'Redis') { -%>
5
+ import cacheService from '@/infrastructure/caching/redisClient';
6
+ <%_ } else if (caching === 'Memory Cache') { -%>
7
+ import cacheService from '@/infrastructure/caching/memoryCache';
8
+ <%_ } -%>
9
+ import logger from '@/infrastructure/log/logger';
10
+
11
+ export default class CreateUser {
12
+ constructor(private userRepository: UserRepository) {}
13
+
14
+ async execute(name: string, email: string) {
15
+ const user = new User(null, name, email);
16
+ const savedUser = await this.userRepository.save(user);
17
+
18
+ try {
19
+ await cacheService.del('users:all');
20
+ logger.info('Invalidated users:all cache');
21
+ } catch (error) {
22
+ logger.error('Cache error (del):', error);
23
+ }
24
+
25
+ return savedUser;
26
+ }
27
+ }
@@ -0,0 +1,24 @@
1
+ import { UserRepository } from '@/infrastructure/repositories/UserRepository';
2
+ <%_ if (caching === 'Redis') { -%>
3
+ import cacheService from '@/infrastructure/caching/redisClient';
4
+ <%_ } else if (caching === 'Memory Cache') { -%>
5
+ import cacheService from '@/infrastructure/caching/memoryCache';
6
+ <%_ } -%>
7
+ import logger from '@/infrastructure/log/logger';
8
+
9
+ export default class DeleteUser {
10
+ constructor(private userRepository: UserRepository) {}
11
+
12
+ async execute(id: number | string) {
13
+ const result = await this.userRepository.delete(id);
14
+
15
+ try {
16
+ await cacheService.del('users:all');
17
+ logger.info('Invalidated users:all cache');
18
+ } catch (error) {
19
+ logger.error('Cache error (del):', error);
20
+ }
21
+
22
+ return result;
23
+ }
24
+ }
@@ -1,34 +1,34 @@
1
- import { UserRepository } from '@/infrastructure/repositories/UserRepository';
2
- <%_ if (caching === 'Redis') { -%>
3
- import cacheService from '@/infrastructure/caching/redisClient';
4
- <%_ } else if (caching === 'Memory Cache') { -%>
5
- import cacheService from '@/infrastructure/caching/memoryCache';
6
- <%_ } -%>
7
- import logger from '@/infrastructure/log/logger';
8
-
9
- export default class GetAllUsers {
10
- constructor(private userRepository: UserRepository) {}
11
-
12
- async execute() {
13
- const cacheKey = 'users:all';
14
- try {
15
- const cachedUsers = await cacheService.get(cacheKey);
16
- if (cachedUsers) {
17
- logger.info('Serving users from cache');
18
- return cachedUsers;
19
- }
20
- } catch (error) {
21
- logger.error('Cache error (get):', error);
22
- }
23
-
24
- const users = await this.userRepository.getUsers();
25
-
26
- try {
27
- await cacheService.set(cacheKey, users, 60);
28
- } catch (error) {
29
- logger.error('Cache error (set):', error);
30
- }
31
-
32
- return users;
33
- }
34
- }
1
+ import { UserRepository } from '@/infrastructure/repositories/UserRepository';
2
+ <%_ if (caching === 'Redis') { -%>
3
+ import cacheService from '@/infrastructure/caching/redisClient';
4
+ <%_ } else if (caching === 'Memory Cache') { -%>
5
+ import cacheService from '@/infrastructure/caching/memoryCache';
6
+ <%_ } -%>
7
+ import logger from '@/infrastructure/log/logger';
8
+
9
+ export default class GetAllUsers {
10
+ constructor(private userRepository: UserRepository) {}
11
+
12
+ async execute() {
13
+ const cacheKey = 'users:all';
14
+ try {
15
+ const cachedUsers = await cacheService.get(cacheKey);
16
+ if (cachedUsers) {
17
+ logger.info('Serving users from cache');
18
+ return cachedUsers;
19
+ }
20
+ } catch (error) {
21
+ logger.error('Cache error (get):', error);
22
+ }
23
+
24
+ const users = await this.userRepository.getUsers();
25
+
26
+ try {
27
+ await cacheService.set(cacheKey, users, 60);
28
+ } catch (error) {
29
+ logger.error('Cache error (set):', error);
30
+ }
31
+
32
+ return users;
33
+ }
34
+ }
@@ -0,0 +1,25 @@
1
+ import { User } from '@/domain/user';
2
+ import { UserRepository } from '@/infrastructure/repositories/UserRepository';
3
+ <%_ if (caching === 'Redis') { -%>
4
+ import cacheService from '@/infrastructure/caching/redisClient';
5
+ <%_ } else if (caching === 'Memory Cache') { -%>
6
+ import cacheService from '@/infrastructure/caching/memoryCache';
7
+ <%_ } -%>
8
+ import logger from '@/infrastructure/log/logger';
9
+
10
+ export default class UpdateUser {
11
+ constructor(private userRepository: UserRepository) {}
12
+
13
+ async execute(id: number | string, data: { name?: string, email?: string }) {
14
+ const updatedUser = await this.userRepository.update(id, data);
15
+
16
+ try {
17
+ await cacheService.del('users:all');
18
+ logger.info('Invalidated users:all cache');
19
+ } catch (error) {
20
+ logger.error('Cache error (del):', error);
21
+ }
22
+
23
+ return updatedUser;
24
+ }
25
+ }