generator-jhipster 7.6.0 → 7.8.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 (432) hide show
  1. package/README.md +1 -4
  2. package/cli/commands.js +3 -0
  3. package/cli/environment-builder.js +53 -18
  4. package/cli/import-jdl.js +3 -0
  5. package/cli/index.mjs +20 -0
  6. package/cli/jhipster.js +19 -11
  7. package/cli/program.js +94 -38
  8. package/generators/app/esm.mjs +1 -3
  9. package/generators/app/index.js +11 -16
  10. package/generators/aws/esm.mjs +1 -3
  11. package/generators/azure-app-service/esm.mjs +1 -3
  12. package/generators/azure-spring-cloud/esm.mjs +1 -3
  13. package/generators/base/esm.mjs +1 -3
  14. package/generators/bootstrap/esm.mjs +1 -3
  15. package/generators/bootstrap/index.js +36 -86
  16. package/generators/bootstrap-application/esm.mjs +19 -0
  17. package/generators/bootstrap-application/generator.mjs +353 -0
  18. package/generators/bootstrap-application/index.mjs +19 -0
  19. package/generators/ci-cd/esm.mjs +1 -3
  20. package/generators/ci-cd/index.js +1 -1
  21. package/generators/ci-cd/prompts.js +1 -1
  22. package/generators/ci-cd/templates/github-actions.yml.ejs +6 -6
  23. package/generators/client/esm.mjs +5 -3
  24. package/generators/client/files-angular.js +9 -0
  25. package/generators/client/files-common.js +9 -9
  26. package/generators/client/files-react.js +25 -2
  27. package/generators/client/files-vue.js +7 -6
  28. package/generators/client/index.js +3 -2
  29. package/generators/client/needle-api/needle-client-react.js +11 -8
  30. package/generators/client/templates/angular/angular.json.ejs +2 -10
  31. package/generators/client/templates/angular/jest.conf.js.ejs +1 -1
  32. package/generators/client/templates/angular/package.json +29 -27
  33. package/generators/client/templates/angular/package.json.ejs +6 -2
  34. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.html.ejs +1 -1
  35. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.html.ejs +7 -7
  36. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +5 -5
  37. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +3 -3
  38. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.html.ejs +10 -10
  39. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.html.ejs +8 -8
  40. package/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +2 -2
  41. package/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +5 -5
  42. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.html.ejs +1 -1
  43. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.spec.ts.ejs +2 -2
  44. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +2 -2
  45. package/generators/client/templates/angular/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +6 -6
  46. package/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.html.ejs +51 -49
  47. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +16 -16
  48. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +32 -32
  49. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.html.ejs +4 -4
  50. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +18 -18
  51. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +12 -12
  52. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.ts.ejs +4 -4
  53. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +4 -4
  54. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.html.ejs +8 -8
  55. package/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +1 -1
  56. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +1 -1
  57. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +4 -4
  58. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +5 -5
  59. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +1 -1
  60. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +11 -11
  61. package/generators/client/templates/angular/src/main/webapp/app/core/util/data-util.service.ts.ejs +1 -1
  62. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  63. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +4 -2
  64. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.scss.ejs +0 -6
  65. package/generators/client/templates/angular/src/main/webapp/app/layouts/profiles/page-ribbon.component.scss.ejs +0 -6
  66. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.html.ejs +3 -3
  67. package/generators/client/templates/angular/src/main/webapp/content/scss/_bootstrap-variables.scss.ejs +5 -5
  68. package/generators/client/templates/angular/src/main/webapp/content/scss/global.scss.ejs +29 -0
  69. package/generators/client/templates/angular/src/main/webapp/content/scss/vendor.scss.ejs +0 -4
  70. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +31 -1
  71. package/generators/client/templates/common/package.json +7 -6
  72. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +1 -7
  73. package/generators/client/templates/common/webpack/webpack.microfrontend.js.jhi.ejs +2 -3
  74. package/generators/client/templates/react/.eslintrc.json.ejs +1 -1
  75. package/generators/client/templates/react/jest.conf.js.ejs +1 -1
  76. package/generators/client/templates/react/package.json +44 -45
  77. package/generators/client/templates/react/package.json.ejs +1 -0
  78. package/generators/client/templates/react/src/main/webapp/app/app.scss.ejs +1 -1
  79. package/generators/client/templates/react/src/main/webapp/app/config/store.ts.ejs +53 -6
  80. package/generators/client/templates/react/src/main/webapp/app/config/translation-middleware.ts.ejs +58 -0
  81. package/generators/client/templates/react/src/main/webapp/app/entities/menu.tsx.ejs +45 -0
  82. package/generators/client/templates/react/src/main/webapp/app/entities/reducers.ts.ejs +25 -0
  83. package/generators/client/templates/react/src/main/webapp/app/entities/routes.tsx.ejs +47 -0
  84. package/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs +7 -7
  85. package/generators/client/templates/react/src/main/webapp/app/main.tsx.ejs +19 -0
  86. package/generators/client/templates/react/src/main/webapp/app/modules/administration/logs/logs.tsx.ejs +1 -1
  87. package/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/user-management.tsx.ejs +2 -1
  88. package/generators/client/templates/react/src/main/webapp/app/modules/login/login-modal.tsx.ejs +5 -1
  89. package/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs +24 -7
  90. package/generators/client/templates/react/src/main/webapp/app/shared/error/error-loading.tsx.ejs +15 -0
  91. package/generators/client/templates/react/src/main/webapp/app/shared/layout/menus/entities.tsx.ejs +34 -6
  92. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/index.ts.ejs +9 -2
  93. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.spec.ts.ejs +9 -3
  94. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/locale.ts.ejs +21 -5
  95. package/generators/client/templates/react/src/main/webapp/app/typings.d.ts.ejs +15 -0
  96. package/generators/client/templates/react/src/main/webapp/microfrontends/entities-menu.tsx.ejs +3 -0
  97. package/generators/client/templates/react/src/main/webapp/microfrontends/entities-routes.tsx.ejs +3 -0
  98. package/generators/client/templates/react/tsconfig.json.ejs +3 -3
  99. package/generators/client/templates/react/tsconfig.test.json.ejs +9 -1
  100. package/generators/client/templates/react/webpack/webpack.common.js.ejs +6 -13
  101. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +7 -8
  102. package/generators/client/templates/react/webpack/webpack.microfrontend.js.jhi.react.ejs +99 -0
  103. package/generators/client/templates/react/webpack/webpack.prod.js.ejs +31 -21
  104. package/generators/client/templates/vue/package.json +30 -31
  105. package/generators/client/templates/vue/package.json.ejs +1 -1
  106. package/generators/client/templates/vue/src/main/webapp/app/core/jhi-navbar/jhi-navbar.component.ts.ejs +4 -3
  107. package/generators/client/templates/vue/src/main/webapp/app/entities/user/user.service.ts.ejs +0 -0
  108. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +29 -1
  109. package/generators/client/templates/vue/src/main/webapp/app/shared/config/axios-interceptor.ts.ejs +2 -2
  110. package/generators/client/templates/vue/src/main/webapp/app/shared/config/config.ts.ejs +0 -4
  111. package/generators/client/templates/vue/src/main/webapp/app/shared/data/data-utils.service.ts.ejs +1 -1
  112. package/generators/client/templates/vue/src/test/javascript/jest.conf.js.ejs +2 -2
  113. package/generators/client/templates/vue/tsconfig.json.ejs +0 -3
  114. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +6 -2
  115. package/generators/cloudfoundry/esm.mjs +1 -3
  116. package/generators/common/esm.mjs +2 -3
  117. package/generators/common/files.js +1 -2
  118. package/generators/common/index.js +6 -0
  119. package/generators/common/templates/.husky/{pre-commit → pre-commit.ejs} +4 -0
  120. package/generators/common/templates/README.md.jhi.ejs +3 -1
  121. package/generators/common/templates/package.json +4 -4
  122. package/generators/common/templates/sonar-project.properties.ejs +1 -1
  123. package/generators/cypress/esm.mjs +2 -3
  124. package/generators/cypress/files.js +2 -1
  125. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/settings-page.spec.ts.ejs +18 -14
  126. package/generators/database-changelog/esm.mjs +1 -3
  127. package/generators/database-changelog/index.js +1 -1
  128. package/generators/database-changelog-liquibase/esm.mjs +2 -3
  129. package/generators/docker-compose/esm.mjs +1 -3
  130. package/generators/docker-compose/index.js +9 -5
  131. package/generators/entities/esm.mjs +1 -3
  132. package/generators/entities/index.js +2 -2
  133. package/generators/entities-client/esm.mjs +1 -3
  134. package/generators/entity/esm.mjs +1 -3
  135. package/generators/entity/index.js +39 -28
  136. package/generators/entity/prompts.js +4 -1
  137. package/generators/entity-client/esm.mjs +2 -3
  138. package/generators/entity-client/index.js +8 -0
  139. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.html.ejs +1 -1
  140. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +2 -2
  141. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +20 -21
  142. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +1 -1
  143. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.html.ejs +14 -16
  144. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +3 -3
  145. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +2 -1
  146. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-delete-dialog.tsx.ejs +3 -3
  147. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-detail.tsx.ejs +5 -4
  148. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-reducer.spec.ts.ejs +1 -1
  149. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity-update.tsx.ejs +20 -19
  150. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +2 -2
  151. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.tsx.ejs +21 -20
  152. package/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity-update-page-object.ts.ejs +1 -1
  153. package/generators/entity-client/templates/vue/src/test/javascript/e2e/entities/entity-update-page-object.ts.ejs +1 -1
  154. package/generators/entity-client/templates/vue/src/test/javascript/e2e/entities/entity.spec.ts.ejs +1 -1
  155. package/generators/entity-i18n/esm.mjs +2 -3
  156. package/generators/entity-i18n/templates/i18n/entity_fr.json.ejs +1 -1
  157. package/generators/entity-server/esm.mjs +2 -3
  158. package/generators/entity-server/files-couchbase.js +23 -2
  159. package/generators/entity-server/files.js +40 -6
  160. package/generators/entity-server/index.js +27 -2
  161. package/generators/entity-server/templates/couchbase/src/main/java/package/domain/Entity.java.jhi.spring_data_couchbase.ejs +11 -13
  162. package/generators/entity-server/templates/couchbase/src/main/java/package/repository/EntityRepository.java.ejs +30 -43
  163. package/generators/entity-server/templates/couchbase/src/main/resources/config/couchmove/changelog/entity.fts.ejs +5 -6
  164. package/generators/entity-server/templates/couchbase/src/main/resources/config/couchmove/changelog/entity.n1ql.ejs +5 -0
  165. package/generators/entity-server/templates/partials/it_patch_update.partial.java.ejs +2 -2
  166. package/generators/entity-server/templates/partials/save_template.ejs +1 -1
  167. package/generators/entity-server/templates/partials/update_template.ejs +77 -0
  168. package/generators/entity-server/templates/reactive/partials/save_template.ejs +1 -1
  169. package/generators/entity-server/templates/reactive/partials/update_template.ejs +41 -0
  170. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +5 -5
  171. package/generators/entity-server/templates/src/main/java/package/common/get_template.ejs +1 -1
  172. package/generators/entity-server/templates/src/main/java/package/common/inject_template.ejs +17 -8
  173. package/generators/entity-server/templates/src/main/java/package/common/patch_template.ejs +5 -5
  174. package/generators/entity-server/templates/src/main/java/package/common/search_stream_template.ejs +1 -1
  175. package/generators/entity-server/templates/src/main/java/package/common/search_template.ejs +1 -1
  176. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +4 -3
  177. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.javax_lifecycle_events.ejs +31 -0
  178. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_persistable.ejs +54 -0
  179. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.spring_data_reactive.ejs +1 -1
  180. package/generators/entity-server/templates/src/main/java/package/domain/EntityCallback.java.ejs +43 -0
  181. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository.java.ejs +36 -23
  182. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryInternalImpl_reactive.java.ejs +24 -28
  183. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationships.java.ejs +37 -0
  184. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepositoryWithBagRelationshipsImpl.java.ejs +91 -0
  185. package/generators/entity-server/templates/src/main/java/package/repository/EntityRepository_reactive.java.ejs +17 -25
  186. package/generators/entity-server/templates/src/main/java/package/repository/EntitySqlHelper_reactive.java.ejs +2 -2
  187. package/generators/entity-server/templates/src/main/java/package/repository/rowmapper/EntityRowMapper.java.ejs +3 -3
  188. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +12 -27
  189. package/generators/entity-server/templates/src/main/java/package/service/EntityService.java.ejs +10 -2
  190. package/generators/entity-server/templates/src/main/java/package/service/criteria/EntityCriteria.java.ejs +8 -6
  191. package/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs +21 -5
  192. package/generators/entity-server/templates/src/main/java/package/service/mapper/EntityMapper.java.ejs +61 -90
  193. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +6 -4
  194. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +33 -20
  195. package/generators/export-jdl/esm.mjs +1 -3
  196. package/generators/gae/esm.mjs +1 -3
  197. package/generators/generate-blueprint/constants.mjs +146 -0
  198. package/generators/generate-blueprint/esm.mjs +19 -0
  199. package/generators/generate-blueprint/files.mjs +81 -0
  200. package/generators/generate-blueprint/generator.mjs +363 -0
  201. package/generators/generate-blueprint/index.mjs +20 -0
  202. package/generators/generate-blueprint/templates/.eslintrc.json.ejs +41 -0
  203. package/generators/generate-blueprint/templates/.github/workflows/generator.yml.ejs +32 -0
  204. package/generators/generate-blueprint/templates/.mocharc.cjs.ejs +29 -0
  205. package/generators/{server/templates/couchbase/src/main/java/package/config/couchbase/package-info.java.ejs → generate-blueprint/templates/.prettierignore.jhi.blueprint.ejs} +4 -7
  206. package/generators/generate-blueprint/templates/README.md.ejs +75 -0
  207. package/generators/generate-blueprint/templates/cli/cli.mjs.ejs +35 -0
  208. package/generators/generate-blueprint/templates/cli/commands.cjs.ejs +25 -0
  209. package/generators/generate-blueprint/templates/generators/generator/generator.mjs.jhi.ejs +98 -0
  210. package/generators/generate-blueprint/templates/generators/generator/generator.spec.mjs.ejs +42 -0
  211. package/generators/generate-blueprint/templates/generators/generator/index.mjs.ejs +19 -0
  212. package/generators/generate-blueprint/templates/generators/generator/templates/template-file.ejs +0 -0
  213. package/generators/generate-blueprint/templates/test/utils.mjs.ejs +17 -0
  214. package/generators/generator-base-blueprint.js +29 -0
  215. package/generators/generator-base-docker.js +1 -0
  216. package/generators/generator-base-entities.cjs +368 -0
  217. package/generators/generator-base-private.js +1 -1
  218. package/generators/generator-base.js +157 -23
  219. package/generators/generator-constants.js +22 -20
  220. package/generators/generator-list.js +2 -0
  221. package/generators/generator-transforms.js +0 -1
  222. package/generators/gradle/constants.cjs +1 -1
  223. package/generators/gradle/esm.mjs +19 -0
  224. package/generators/heroku/esm.mjs +1 -3
  225. package/generators/info/esm.mjs +1 -3
  226. package/generators/init/esm.mjs +19 -0
  227. package/generators/init/files.cjs +9 -3
  228. package/generators/init/index.cjs +5 -0
  229. package/generators/init/templates/.gitignore.jhi.ejs +5 -0
  230. package/generators/init/templates/{.lintstagedrc.js.ejs → .lintstagedrc.cjs.ejs} +0 -0
  231. package/generators/java/esm.mjs +19 -0
  232. package/generators/java/index.cjs +58 -2
  233. package/generators/kubernetes/esm.mjs +1 -3
  234. package/generators/kubernetes-helm/esm.mjs +1 -3
  235. package/generators/kubernetes-knative/esm.mjs +1 -3
  236. package/generators/languages/esm.mjs +2 -3
  237. package/generators/languages/templates/src/test/resources/i18n/messages_fr.properties.ejs +4 -1
  238. package/generators/maven/esm.mjs +19 -0
  239. package/generators/maven/files.cjs +0 -1
  240. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
  241. package/generators/maven/templates/.mvn/wrapper/maven-wrapper.properties +18 -2
  242. package/generators/maven/templates/mvnw +13 -7
  243. package/generators/maven/templates/mvnw.cmd +19 -13
  244. package/generators/maven/templates/pom.xml.jhi.ejs +1 -1
  245. package/generators/openapi-client/esm.mjs +1 -3
  246. package/generators/openapi-client/index.js +11 -4
  247. package/generators/openshift/esm.mjs +1 -3
  248. package/generators/page/esm.mjs +1 -3
  249. package/generators/project-name/esm.mjs +19 -0
  250. package/generators/server/cleanup.js +19 -3
  251. package/generators/server/esm.mjs +2 -2
  252. package/generators/server/files-couchbase.js +28 -31
  253. package/generators/server/files.js +115 -18
  254. package/generators/server/index.js +23 -17
  255. package/generators/server/needle-api/needle-server-gradle.js +38 -0
  256. package/generators/server/needle-api/needle-server-maven.js +1 -1
  257. package/generators/server/templates/.mvn/jvm.config +1 -0
  258. package/generators/server/templates/.mvn/wrapper/maven-wrapper.jar +0 -0
  259. package/generators/server/templates/.mvn/wrapper/maven-wrapper.properties +18 -2
  260. package/generators/server/templates/build.gradle.ejs +7 -5
  261. package/generators/server/templates/couchbase/src/main/java/package/repository/CouchbaseSearchRepository.java.ejs +91 -0
  262. package/generators/server/templates/couchbase/src/main/java/package/repository/JHipsterCouchbaseRepository.java.ejs +47 -45
  263. package/generators/server/templates/couchbase/src/main/java/package/repository/PersistentTokenRepository_couchbase.java.ejs +2 -2
  264. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/authority/ROLE_ADMIN.json.ejs +3 -0
  265. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/authority/ROLE_USER.json.ejs +3 -0
  266. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/{user__admin.json.ejs → user/admin.json.ejs} +2 -2
  267. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/{user__user.json.ejs → user/user.json.ejs} +2 -2
  268. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.2__create_indexes.n1ql.ejs +34 -0
  269. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0__create_collections.n1ql.ejs +8 -0
  270. package/generators/server/templates/couchbase/src/test/java/package/CouchbaseTestContainerExtension.java.ejs +4 -3
  271. package/generators/server/templates/couchbase/src/test/java/package/repository/{JHipsterCouchbaseRepositoryTest.java.ejs → CouchbaseSearchRepositoryTest.java.ejs} +2 -2
  272. package/generators/server/templates/devcontainer/Dockerfile.ejs +25 -0
  273. package/generators/server/templates/devcontainer/devcontainer.json.ejs +64 -0
  274. package/generators/server/templates/gradle/profile_prod.gradle.ejs +4 -0
  275. package/generators/server/templates/gradle/wrapper/gradle-wrapper.jar +0 -0
  276. package/generators/server/templates/gradle.properties.ejs +8 -8
  277. package/generators/server/templates/mvnw +13 -7
  278. package/generators/server/templates/mvnw.cmd +19 -13
  279. package/generators/server/templates/npmw +14 -5
  280. package/generators/server/templates/pom.xml.ejs +65 -58
  281. package/generators/server/templates/settings.gradle.ejs +6 -4
  282. package/generators/server/templates/src/main/docker/app.yml.ejs +4 -6
  283. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -1
  284. package/generators/server/templates/src/main/docker/mysql.yml.ejs +1 -0
  285. package/generators/server/templates/src/main/docker/zipkin.yml.ejs +25 -0
  286. package/generators/server/templates/src/main/java/package/config/AsyncConfiguration.java.ejs +6 -0
  287. package/generators/server/templates/src/main/java/package/config/DatabaseConfiguration_couchbase.java.ejs +26 -16
  288. package/generators/{client/templates/react/src/main/webapp/app/entities/index.tsx.ejs → server/templates/src/main/java/package/config/KafkaSseConsumer.java.ejs} +8 -14
  289. package/generators/server/templates/src/main/java/package/config/KafkaSseProducer.java.ejs +30 -0
  290. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration_reactive.java.ejs +1 -1
  291. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +12 -10
  292. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +2 -1
  293. package/generators/server/templates/src/main/java/package/domain/Authority.java.ejs +11 -0
  294. package/generators/server/templates/src/main/java/package/domain/PersistentToken.java.ejs +6 -6
  295. package/generators/server/templates/src/main/java/package/domain/User.java.ejs +9 -7
  296. package/generators/server/templates/src/main/java/package/repository/AuthorityRepository.java.ejs +1 -11
  297. package/generators/server/templates/src/main/java/package/repository/EntityManager.java.ejs +48 -38
  298. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +48 -72
  299. package/generators/server/templates/src/main/java/package/security/jwt/JWTFilter.java.ejs +1 -1
  300. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +1 -1
  301. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +1 -1
  302. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +8 -6
  303. package/generators/server/templates/src/main/java/package/web/filter/OAuth2ReactiveRefreshTokensWebFilter.java.ejs +0 -1
  304. package/generators/server/templates/src/main/java/package/web/rest/AccountResource.java.ejs +1 -1
  305. package/generators/server/templates/src/main/java/package/web/rest/KafkaResource.java.ejs +60 -108
  306. package/generators/server/templates/src/main/java/package/web/rest/KafkaResource_reactive.java.ejs +74 -0
  307. package/generators/server/templates/src/main/java/package/web/rest/LogoutResource_reactive.java.ejs +1 -1
  308. package/generators/server/templates/src/main/java/package/web/rest/PublicUserResource.java.ejs +2 -2
  309. package/generators/server/templates/src/main/resources/config/application-dev.yml.ejs +8 -0
  310. package/generators/server/templates/src/main/resources/config/application-prod.yml.ejs +6 -0
  311. package/generators/server/templates/src/main/resources/config/application.yml.ejs +28 -22
  312. package/generators/server/templates/src/test/java/package/CassandraKeyspaceIT.java.ejs +3 -4
  313. package/generators/server/templates/src/test/java/package/IntegrationTest.java.ejs +12 -4
  314. package/generators/server/templates/src/test/java/package/TechnicalStructureTest.java.ejs +18 -15
  315. package/generators/server/templates/src/test/java/package/config/CassandraTestContainer.java.ejs +122 -0
  316. package/generators/server/templates/src/test/java/package/config/EmbeddedCassandra.java.ejs +11 -0
  317. package/generators/server/templates/src/test/java/package/config/EmbeddedKafka.java.ejs +11 -0
  318. package/generators/server/templates/src/test/java/package/config/EmbeddedMongo.java.ejs +11 -0
  319. package/generators/server/templates/src/test/java/package/config/JHipsterBlockHoundIntegration.java.ejs +2 -0
  320. package/generators/server/templates/src/test/java/package/config/KafkaTestContainer.java.ejs +38 -0
  321. package/generators/server/templates/src/test/java/package/config/MongoDbTestContainer.java.ejs +67 -0
  322. package/generators/server/templates/src/test/java/package/config/TestContainersSpringContextCustomizerFactory.java.ejs +114 -0
  323. package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +3 -10
  324. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/StepDefs.java.ejs +8 -0
  325. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/UserStepDefs.java.ejs +17 -3
  326. package/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIT.java.ejs +1 -4
  327. package/generators/server/templates/src/test/java/package/security/SecurityUtilsUnitTest_reactive.java.ejs +1 -1
  328. package/generators/server/templates/src/test/java/package/security/jwt/JWTFilterTest.java.ejs +5 -5
  329. package/generators/server/templates/src/test/java/package/security/oauth2/CustomClaimConverterIT.java.ejs +1 -1
  330. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +2 -4
  331. package/generators/server/templates/src/test/java/package/service/UserServiceIT.java.ejs +1 -4
  332. package/generators/server/templates/src/test/java/package/service/mapper/UserMapperTest.java.ejs +1 -1
  333. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +15 -8
  334. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_oauth2.java.ejs +1 -4
  335. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT_skipUserManagement.java.ejs +1 -4
  336. package/generators/server/templates/src/test/java/package/web/rest/KafkaResourceIT.java.ejs +52 -123
  337. package/generators/server/templates/src/test/java/package/web/rest/KafkaResourceIT_reactive.java.ejs +99 -0
  338. package/generators/server/templates/src/test/java/package/web/rest/PublicUserResourceIT.java.ejs +7 -10
  339. package/generators/server/templates/src/test/java/package/web/rest/TestUtil.java.ejs +1 -6
  340. package/generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIT.java.ejs +1 -4
  341. package/generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs +42 -47
  342. package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT.java.ejs +1 -4
  343. package/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT_reactive.java.ejs +2 -5
  344. package/generators/server/templates/src/test/resources/META-INF/spring.factories.ejs +1 -1
  345. package/generators/server/templates/src/test/resources/config/application.yml.ejs +21 -20
  346. package/generators/server/templates/src/test/resources/testcontainers.properties.ejs +1 -0
  347. package/generators/spring-boot/esm.mjs +19 -0
  348. package/generators/spring-controller/esm.mjs +1 -3
  349. package/generators/spring-service/esm.mjs +1 -3
  350. package/generators/upgrade/esm.mjs +1 -3
  351. package/generators/upgrade-config/esm.mjs +1 -3
  352. package/generators/workspaces/esm.mjs +1 -3
  353. package/generators/workspaces/index.js +2 -1
  354. package/lib/constants/logo.cjs +30 -0
  355. package/lib/constants/priorities.cjs +216 -2
  356. package/lib/constants/priorities.mjs +29 -1
  357. package/lib/index.mjs +6 -0
  358. package/lib/support/mixin.cjs +5 -1
  359. package/lib/support/shared-data.cjs +34 -1
  360. package/package.json +33 -29
  361. package/utils/entity.js +21 -2
  362. package/utils/faker.js +3 -3
  363. package/utils/field.js +69 -52
  364. package/utils/relationship.js +15 -4
  365. package/utils/user.js +109 -0
  366. package/generators/app/generator.spec.mjs +0 -47
  367. package/generators/aws/generator.spec.mjs +0 -47
  368. package/generators/azure-app-service/generator.spec.mjs +0 -47
  369. package/generators/azure-spring-cloud/generator.spec.mjs +0 -47
  370. package/generators/base/generator.spec.mjs +0 -44
  371. package/generators/bootstrap/generator.spec.mjs +0 -44
  372. package/generators/ci-cd/generator.spec.mjs +0 -47
  373. package/generators/client/__workflow/devserver-angular.json +0 -13
  374. package/generators/client/__workflow/devserver-react.json +0 -13
  375. package/generators/client/__workflow/devserver-vue.json +0 -13
  376. package/generators/client/generator.spec.mjs +0 -47
  377. package/generators/cloudfoundry/generator.spec.mjs +0 -47
  378. package/generators/common/generator.spec.mjs +0 -47
  379. package/generators/cypress/generator.spec.mjs +0 -47
  380. package/generators/database-changelog/generator.spec.mjs +0 -47
  381. package/generators/database-changelog-liquibase/generator.spec.mjs +0 -47
  382. package/generators/docker-compose/generator.spec.mjs +0 -44
  383. package/generators/entities/generator.spec.mjs +0 -47
  384. package/generators/entities-client/generator.spec.mjs +0 -47
  385. package/generators/entity/generator.spec.mjs +0 -47
  386. package/generators/entity-client/generator.spec.mjs +0 -47
  387. package/generators/entity-i18n/generator.spec.mjs +0 -47
  388. package/generators/entity-server/generator.spec.mjs +0 -47
  389. package/generators/entity-server/templates/src/main/java/package/repository/search/SortToFieldSortBuilderConverter.java.ejs +0 -24
  390. package/generators/export-jdl/generator.spec.mjs +0 -44
  391. package/generators/gae/generator.spec.mjs +0 -47
  392. package/generators/gradle/__snapshots__/generator.spec.cjs.snap +0 -59
  393. package/generators/gradle/generator.spec.cjs +0 -71
  394. package/generators/heroku/generator.spec.mjs +0 -47
  395. package/generators/info/generator.spec.mjs +0 -44
  396. package/generators/init/__snapshots__/generator.spec.cjs.snap +0 -65
  397. package/generators/init/generator.spec.cjs +0 -112
  398. package/generators/java/__snapshots__/generator.spec.cjs.snap +0 -118
  399. package/generators/java/generator.spec.cjs +0 -87
  400. package/generators/kubernetes/generator.spec.mjs +0 -44
  401. package/generators/kubernetes-helm/generator.spec.mjs +0 -44
  402. package/generators/kubernetes-knative/generator.spec.mjs +0 -44
  403. package/generators/languages/generator.spec.mjs +0 -47
  404. package/generators/maven/__snapshots__/generator.spec.cjs.snap +0 -53
  405. package/generators/maven/generator.spec.cjs +0 -78
  406. package/generators/maven/templates/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
  407. package/generators/openapi-client/generator.spec.mjs +0 -47
  408. package/generators/openshift/generator.spec.mjs +0 -44
  409. package/generators/page/generator.spec.mjs +0 -47
  410. package/generators/project-name/generator.spec.cjs +0 -43
  411. package/generators/server/__snapshots__/generator.spec.mjs.snap +0 -1931
  412. package/generators/server/generator.spec.mjs +0 -52
  413. package/generators/server/templates/.mvn/wrapper/MavenWrapperDownloader.java +0 -117
  414. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryFactory.java.ejs +0 -83
  415. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryFactoryBean.java.ejs +0 -40
  416. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomCouchbaseRepositoryQuery.java.ejs +0 -44
  417. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomN1qlQueryCreator.java.ejs +0 -162
  418. package/generators/server/templates/couchbase/src/main/java/package/config/couchbase/CustomN1qlRepositoryQueryExecutor.java.ejs +0 -104
  419. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/ROLE_ADMIN.json.ejs +0 -3
  420. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0.1__initial_setup/ROLE_USER.json.ejs +0 -3
  421. package/generators/server/templates/couchbase/src/main/resources/config/couchmove/changelog/V0__create_indexes.n1ql.ejs +0 -19
  422. package/generators/server/templates/src/main/java/package/config/KafkaProperties.java.ejs +0 -68
  423. package/generators/server/templates/src/test/java/package/AbstractCassandraTest.java.ejs +0 -125
  424. package/generators/server/templates/src/test/java/package/MongoDbTestContainerExtension.java.ejs +0 -37
  425. package/generators/server/templates/src/test/java/package/TestContainersSpringContextCustomizerFactory.java.ejs +0 -24
  426. package/generators/spring-boot/__snapshots__/generator.spec.cjs.snap +0 -80
  427. package/generators/spring-boot/generator.spec.cjs +0 -64
  428. package/generators/spring-controller/generator.spec.mjs +0 -47
  429. package/generators/spring-service/generator.spec.mjs +0 -47
  430. package/generators/upgrade/generator.spec.mjs +0 -44
  431. package/generators/upgrade-config/generator.spec.mjs +0 -44
  432. package/generators/workspaces/generator.spec.mjs +0 -47
@@ -18,133 +18,85 @@
18
18
  -%>
19
19
  package <%= packageName %>.web.rest;
20
20
 
21
- import <%= packageName %>.config.KafkaProperties;
22
- import org.apache.kafka.clients.consumer.ConsumerRecord;
23
- <%_ if (!reactive) { _%>
24
- import org.apache.kafka.clients.consumer.ConsumerRecords;
25
- import org.apache.kafka.clients.consumer.KafkaConsumer;
26
- import org.apache.kafka.clients.producer.KafkaProducer;
27
- import org.apache.kafka.clients.producer.ProducerRecord;
28
- import org.apache.kafka.clients.producer.RecordMetadata;
29
- <%_ } _%>
21
+ import static org.springframework.web.servlet.mvc.method.annotation.SseEmitter.event;
22
+
23
+ import java.io.IOException;
24
+ import java.security.Principal;
25
+ import java.util.HashMap;
26
+ import java.util.Map;
27
+ import java.util.Optional;
28
+
30
29
  import org.slf4j.Logger;
31
30
  import org.slf4j.LoggerFactory;
31
+ import org.springframework.beans.factory.annotation.Qualifier;
32
+ import org.springframework.cloud.stream.annotation.StreamListener;
33
+ import org.springframework.http.MediaType;
34
+ import org.springframework.messaging.Message;
35
+ import org.springframework.messaging.MessageChannel;
36
+ import org.springframework.messaging.MessageHeaders;
37
+ import org.springframework.messaging.support.GenericMessage;
38
+ import org.springframework.util.MimeTypeUtils;
39
+
32
40
  import org.springframework.web.bind.annotation.*;
33
- <%_ if (reactive) { _%>
34
- import reactor.core.publisher.Flux;
35
- import reactor.core.publisher.Mono;
36
- import reactor.kafka.receiver.KafkaReceiver;
37
- import reactor.kafka.receiver.ReceiverOptions;
38
- import reactor.kafka.sender.KafkaSender;
39
- import reactor.kafka.sender.SenderOptions;
40
- import reactor.kafka.sender.SenderRecord;
41
- import reactor.kafka.sender.SenderResult;
42
- <%_ } _%>
43
- <%_ if (!reactive) { _%>
41
+ import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyEmitter;
44
42
  import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
45
- <%_ } _%>
46
43
 
47
- <%_ if (!reactive) { _%>
48
- import java.time.Duration;
49
- <%_ } _%>
50
- import java.time.Instant;
51
- import java.util.List;
52
- import java.util.Map;
53
- import java.util.concurrent.ExecutionException;
54
- <%_ if (!reactive) { _%>
55
- import java.util.concurrent.ExecutorService;
56
- import java.util.concurrent.Executors;
57
- <%_ } _%>
44
+ import <%= packageName %>.config.KafkaSseConsumer;
45
+ import <%= packageName %>.config.KafkaSseProducer;
58
46
 
59
47
  @RestController
60
48
  @RequestMapping("/api/<%= dasherizedBaseName %>-kafka")
61
49
  public class <%= upperFirstCamelCase(baseName) %>KafkaResource {
62
50
 
63
51
  private final Logger log = LoggerFactory.getLogger(<%= upperFirstCamelCase(baseName) %>KafkaResource.class);
52
+ private final MessageChannel output;
53
+
54
+ // TODO implement state of the art emitter repository to become 12 factor
55
+ private Map<String, SseEmitter> emitters = new HashMap<>();
64
56
 
65
- private final KafkaProperties kafkaProperties;
66
- <%_ if (reactive) { _%>
67
- private KafkaSender<String, String> sender;
68
- <%_ } else { _%>
69
- private KafkaProducer<String, String> producer;
70
- private ExecutorService sseExecutorService = Executors.newCachedThreadPool();
71
- <%_ } _%>
72
-
73
- public <%= upperFirstCamelCase(baseName) %>KafkaResource(KafkaProperties kafkaProperties) {
74
- this.kafkaProperties = kafkaProperties;
75
- <%_ if (reactive) { _%>
76
- this.sender = KafkaSender.create(SenderOptions.create(kafkaProperties.getProducerProps()));
77
- <%_ } else { _%>
78
- this.producer = new KafkaProducer<>(kafkaProperties.getProducerProps());
79
- <%_ } _%>
57
+ public <%= upperFirstCamelCase(baseName) %>KafkaResource(@Qualifier(KafkaSseProducer.CHANNELNAME) MessageChannel output) {
58
+ this.output = output;
80
59
  }
81
60
 
82
- @PostMapping("/publish/{topic}")
83
- public <% if (reactive) { %>Mono<PublishResult><% } else { %>PublishResult<% } %> publish(@PathVariable String topic, @RequestParam String message, @RequestParam(required = false) String key)<% if (!reactive) { %> throws ExecutionException, InterruptedException<% } %> {
84
- log.debug("REST request to send to Kafka topic {} with key {} the message : {}", topic, key, message);
85
- <%_ if (reactive) { _%>
86
- return Mono.just(SenderRecord.create(topic, null, null, key, message, null))
87
- .as(sender::send)
88
- .next()
89
- .map(SenderResult::recordMetadata)
90
- .map(metadata -> new PublishResult(metadata.topic(), metadata.partition(), metadata.offset(), Instant.ofEpochMilli(metadata.timestamp())));
91
- <%_ } else { _%>
92
- RecordMetadata metadata = producer.send(new ProducerRecord<>(topic, key, message)).get();
93
- return new PublishResult(metadata.topic(), metadata.partition(), metadata.offset(), Instant.ofEpochMilli(metadata.timestamp()));
94
- <%_ } _%>
61
+ @PostMapping("/publish")
62
+ public void publish(@RequestParam String message) {
63
+ log.debug("REST request the message : {} to send to Kafka topic ", message);
64
+ Map<String, Object> map = new HashMap<>();
65
+ map.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN_VALUE);
66
+ MessageHeaders headers = new MessageHeaders(map);
67
+ output.send(new GenericMessage<>(message, headers));
95
68
  }
96
69
 
97
- @GetMapping("/consume")
98
- public <% if (reactive) { %>Flux<String><% } else { %>SseEmitter<% } %> consume(@RequestParam("topic") List<String> topics, @RequestParam Map<String, String> consumerParams) {
99
- log.debug("REST request to consume records from Kafka topics {}", topics);
100
- Map<String, Object> consumerProps = kafkaProperties.getConsumerProps();
101
- consumerProps.putAll(consumerParams);
102
- consumerProps.remove("topic");
103
-
104
- <%_ if (reactive) { _%>
105
- ReceiverOptions<String, String> receiverOptions = ReceiverOptions.<String, String>create(consumerProps)
106
- .subscription(topics);
107
- return KafkaReceiver.create(receiverOptions)
108
- .receive()
109
- .map(ConsumerRecord::value);
110
- <%_ } else { _%>
111
- SseEmitter emitter = new SseEmitter(0L);
112
- sseExecutorService.execute(() -> {
113
- KafkaConsumer<String, String> consumer = new KafkaConsumer<>(consumerProps);
114
- emitter.onCompletion(consumer::close);
115
- consumer.subscribe(topics);
116
- boolean exitLoop = false;
117
- while(!exitLoop) {
70
+ @GetMapping("/register")
71
+ public ResponseBodyEmitter register(Principal principal) {
72
+ log.debug("Registering sse client for {}", principal.getName());
73
+ SseEmitter emitter = new SseEmitter();
74
+ emitter.onCompletion(() -> emitters.remove(emitter));
75
+ emitters.put(principal.getName(), emitter);
76
+ return emitter;
77
+ }
78
+
79
+ @GetMapping("/unregister")
80
+ public void unregister(Principal principal) {
81
+ String user = principal.getName();
82
+ log.debug("Unregistering sse emitter for user: {}", user);
83
+ Optional.ofNullable(emitters.get(user))
84
+ .ifPresent(ResponseBodyEmitter::complete);
85
+ }
86
+
87
+ @StreamListener(value = KafkaSseConsumer.CHANNELNAME, copyHeaders = "false")
88
+ public void consume(Message<String> message) {
89
+ log.debug("Got message from kafka stream: {}", message.getPayload());
90
+ emitters.entrySet().stream().map(Map.Entry::getValue)
91
+ .forEach((SseEmitter emitter) -> {
118
92
  try {
119
- ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(5));
120
- for (ConsumerRecord<String, String> record : records) {
121
- emitter.send(record.value());
122
- }
123
- emitter.send(SseEmitter.event().comment(""));
124
- } catch (Exception ex) {
125
- log.trace("Complete with error {}", ex.getMessage(), ex);
126
- emitter.completeWithError(ex);
127
- exitLoop = true;
128
- }
93
+ emitter.send(event().data(message.getPayload(), MediaType.TEXT_PLAIN));
94
+ } catch (IOException e) {
95
+ log.debug("error sending sse message, {}", message.getPayload());
129
96
  }
130
- consumer.close();
131
- emitter.complete();
132
97
  });
133
- return emitter;
134
- <%_ } _%>
135
98
  }
136
99
 
137
- private static class PublishResult {
138
- public final String topic;
139
- public final int partition;
140
- public final long offset;
141
- public final Instant timestamp;
142
-
143
- private PublishResult(String topic, int partition, long offset, Instant timestamp) {
144
- this.topic = topic;
145
- this.partition = partition;
146
- this.offset = offset;
147
- this.timestamp = timestamp;
148
- }
149
- }
100
+
150
101
  }
102
+
@@ -0,0 +1,74 @@
1
+ <%#
2
+ Copyright 2013-2022 the original author or authors from the JHipster project.
3
+
4
+ This file is part of the JHipster project, see https://www.jhipster.tech/
5
+ for more information.
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ https://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
18
+ -%>
19
+ package <%= packageName %>.web.rest;
20
+
21
+ import java.util.HashMap;
22
+ import java.util.Map;
23
+ import org.slf4j.Logger;
24
+ import org.slf4j.LoggerFactory;
25
+ import org.springframework.beans.factory.annotation.Qualifier;
26
+ import org.springframework.cloud.stream.annotation.StreamListener;
27
+ import org.springframework.http.ResponseEntity;
28
+ import org.springframework.messaging.Message;
29
+ import org.springframework.messaging.MessageChannel;
30
+ import org.springframework.messaging.MessageHeaders;
31
+ import org.springframework.messaging.support.GenericMessage;
32
+ import org.springframework.util.MimeTypeUtils;
33
+ import org.springframework.web.bind.annotation.*;
34
+ import reactor.core.publisher.Flux;
35
+ import reactor.core.publisher.Mono;
36
+ import reactor.core.publisher.Sinks;
37
+ import <%= packageName %>.config.KafkaSseConsumer;
38
+ import <%= packageName %>.config.KafkaSseProducer;
39
+
40
+ @RestController
41
+ @RequestMapping("/api/<%= dasherizedBaseName %>-kafka")
42
+ public class <%= upperFirstCamelCase(baseName) %>KafkaResource {
43
+
44
+ private final Logger log = LoggerFactory.getLogger(<%= upperFirstCamelCase(baseName) %>KafkaResource.class);
45
+
46
+ private final MessageChannel output;
47
+ private Sinks.Many<Message<String>> sink = Sinks.many().unicast().onBackpressureBuffer();
48
+
49
+ public <%= upperFirstCamelCase(baseName) %>KafkaResource(@Qualifier(KafkaSseProducer.CHANNELNAME) MessageChannel output) {
50
+ this.output = output;
51
+ }
52
+
53
+ @PostMapping("/publish")
54
+ public Mono<ResponseEntity<Void>> publish(@RequestParam String message) {
55
+ log.debug("REST request the message : {} to send to Kafka topic", message);
56
+ Map<String, Object> map = new HashMap<>();
57
+ map.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_PLAIN_VALUE);
58
+ MessageHeaders headers = new MessageHeaders(map);
59
+ output.send(new GenericMessage<>(message, headers));
60
+ return Mono.just(ResponseEntity.noContent().build());
61
+ }
62
+
63
+ @GetMapping("/consume")
64
+ public Flux<String> consume() {
65
+ log.debug("REST request to consume records from Kafka topics");
66
+ return sink.asFlux().map(m -> m.getPayload());
67
+ }
68
+
69
+ @StreamListener(value = KafkaSseConsumer.CHANNELNAME, copyHeaders = "false")
70
+ public void consume(Message<String> message) {
71
+ log.debug("Got message from kafka stream: {}", message.getPayload());
72
+ sink.emitNext(message, Sinks.EmitFailureHandler.FAIL_FAST);
73
+ }
74
+ }
@@ -1,5 +1,5 @@
1
1
  <%#
2
- Copyright 2013-2021 the original author or authors from the JHipster project.
2
+ Copyright 2013-2022 the original author or authors from the JHipster project.
3
3
 
4
4
  This file is part of the JHipster project, see https://www.jhipster.tech/
5
5
  for more information.
@@ -194,10 +194,10 @@ public class PublicUserResource {
194
194
  <%_ } _%>
195
195
  <%_ } else { _%>
196
196
  <%_ if (reactive) { _%>
197
- return userRepository.search(User.PREFIX, query).map(<%= asDto('User') %>::new).collectList();
197
+ return userRepository.search(query).map(<%= asDto('User') %>::new).collectList();
198
198
  <%_ } else { _%>
199
199
  return StreamSupport
200
- .stream(userRepository.search(User.PREFIX, query).spliterator(), false)
200
+ .stream(userRepository.search(query).spliterator(), false)
201
201
  .map(<%= asDto('User') %>::new)
202
202
  .collect(Collectors.toList());
203
203
  <%_ } _%>
@@ -255,6 +255,11 @@ spring:
255
255
  cache: false
256
256
  <%_ if (serviceDiscoveryType || applicationTypeGateway || applicationTypeMicroservice) { _%>
257
257
  sleuth:
258
+ # https://github.com/spring-projects/spring-framework/issues/27844#issuescomment-1002866885
259
+ # https://github.com/spring-cloud/spring-cloud-sleuth/issues/2094
260
+ async:
261
+ enabled: false
262
+ enabled: false
258
263
  sampler:
259
264
  probability: 1 # report 100% of traces
260
265
  zipkin: # Use the "zipkin" Maven profile to have the Spring Cloud Zipkin dependencies
@@ -290,6 +295,7 @@ jhipster:
290
295
  database:
291
296
  couchbase:
292
297
  bucket-name: <%= baseName %>
298
+ scope-name: <%= camelizedBaseName %>
293
299
  <%_ } _%>
294
300
  <%_ if (!cacheProviderNo) { _%>
295
301
  cache: # Cache configuration
@@ -350,6 +356,8 @@ jhipster:
350
356
  cors:
351
357
  # Allow Ionic for JHipster by default (* no longer allowed in Spring Boot 2.4+)
352
358
  allowed-origins: "http://localhost:8100,https://localhost:8100,http://localhost:9000,https://localhost:9000<%_ if (!skipClient) { _%>,http://localhost:<%= devServerPort %>,https://localhost:<%= devServerPort %><%_ if (applicationTypeGateway && microfrontend) { for ({applicationIndex, devServerPort: microserviceDevServerPort = devServerPort + applicationIndex} of Object.values(jhipsterConfig.applications || {})) { _%>,http://localhost:<%= microserviceDevServerPort %>,https://localhost:<%= microserviceDevServerPort %><%_ } } _%><%_ } _%>"
359
+ # Enable CORS when running in GitHub Codespaces
360
+ allowed-origin-patterns: 'https://*.githubpreview.dev'
353
361
  allowed-methods: "*"
354
362
  allowed-headers: "*"
355
363
  <%_ if (authenticationTypeSession) { _%>
@@ -209,6 +209,11 @@ spring:
209
209
  cache: true
210
210
  <%_ if (serviceDiscoveryType || applicationTypeGateway || applicationTypeMicroservice) { _%>
211
211
  sleuth:
212
+ # https://github.com/spring-projects/spring-framework/issues/27844#issuescomment-1002866885
213
+ # https://github.com/spring-cloud/spring-cloud-sleuth/issues/2094
214
+ async:
215
+ enabled: false
216
+ enabled: false
212
217
  sampler:
213
218
  probability: 1 # report 100% of traces
214
219
  zipkin: # Use the "zipkin" Maven profile to have the Spring Cloud Zipkin dependencies
@@ -269,6 +274,7 @@ jhipster:
269
274
  database:
270
275
  couchbase:
271
276
  bucket-name: <%= baseName %>
277
+ scope-name: <%= camelizedBaseName %>
272
278
  <%_ } _%>
273
279
  <%_ if (!cacheProviderNo) { _%>
274
280
  cache: # Cache configuration
@@ -113,6 +113,8 @@ management:
113
113
  info:
114
114
  git:
115
115
  mode: full
116
+ env:
117
+ enabled: true
116
118
  health:
117
119
  mail:
118
120
  enabled: false # When using the MailService, configure an SMTP server and set this to true
@@ -154,7 +156,7 @@ spring:
154
156
  <%_ } _%>
155
157
  application:
156
158
  name: <%= baseName %>
157
- <%_ if (serviceDiscoveryConsul || (applicationTypeGateway && reactive)) { _%>
159
+ <%_ if (serviceDiscoveryConsul || (applicationTypeGateway && reactive) || messageBrokerKafka) { _%>
158
160
  cloud:
159
161
  <%_ if (serviceDiscoveryConsul) { _%>
160
162
  consul:
@@ -187,6 +189,23 @@ spring:
187
189
  pool:
188
190
  max-connections: 1000
189
191
  <%_ } _%>
192
+ <%_ if (messageBrokerKafka) { _%>
193
+ stream:
194
+ kafka:
195
+ binder:
196
+ replicationFactor: 1
197
+ auto-create-topics: true
198
+ brokers: localhost:9092
199
+ bindings:
200
+ binding-in-sse:
201
+ destination: sse-topic
202
+ content-type: text/plain
203
+ group: <%= dasherizedBaseName %>
204
+ binding-out-sse:
205
+ destination: sse-topic
206
+ content-type: text/plain
207
+ group: <%= dasherizedBaseName %>
208
+ <%_ } _%>
190
209
  <%_ } _%>
191
210
  profiles:
192
211
  # The commented value for `active` can be replaced with valid Spring profiles to load.
@@ -250,7 +269,6 @@ spring:
250
269
  basename: i18n/messages
251
270
  main:
252
271
  allow-bean-definition-overriding: true
253
- allow-circular-references: true
254
272
  <%_ if (!reactive) { _%>
255
273
  mvc:
256
274
  pathmatch:
@@ -297,7 +315,7 @@ spring:
297
315
  client-id: web_app
298
316
  client-secret: web_app
299
317
  <%_ } _%>
300
- scope: openid,profile,email
318
+ scope: openid, profile, email, offline_access # last one for refresh tokens
301
319
  <%_ } _%>
302
320
 
303
321
  server:
@@ -328,11 +346,11 @@ jhipster:
328
346
  # allowed-origins: "http://localhost:8100,http://localhost:9000"
329
347
  # allowed-methods: "*"
330
348
  # allowed-headers: "*"
331
- <%_ if (authenticationType === 'session') { _%>
349
+ <%_ if (authenticationTypeSession) { _%>
332
350
  # exposed-headers: "Link,X-Total-Count,X-${jhipster.clientApp.name}-alert,X-${jhipster.clientApp.name}-error,X-${jhipster.clientApp.name}-params"
333
- <%_ } else { _%>
351
+ <%_ } else { _%>
334
352
  # exposed-headers: "Authorization,Link,X-Total-Count,X-${jhipster.clientApp.name}-alert,X-${jhipster.clientApp.name}-error,X-${jhipster.clientApp.name}-params"
335
- <%_ } _%>
353
+ <%_ } _%>
336
354
  # allow-credentials: true
337
355
  # max-age: 1800
338
356
  mail:
@@ -350,28 +368,16 @@ jhipster:
350
368
  license: unlicensed
351
369
  license-url:
352
370
  security:
353
- <%_ if (clientTheme !== 'none') { _%>
371
+ <%_ if (clientTheme !== 'none') { _%>
354
372
  content-security-policy: "default-src 'self'; frame-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://storage.googleapis.com; style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; img-src 'self' data:; font-src 'self' https://fonts.gstatic.com data:"
355
- <%_ } else { _%>
373
+ <%_ } else { _%>
356
374
  content-security-policy: "default-src 'self'; frame-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https://storage.googleapis.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:"
357
- <%_ } _%>
358
- <%_ if (authenticationType === 'oauth2') { _%>
375
+ <%_ } _%>
376
+ <%_ if (authenticationTypeOauth2) { _%>
359
377
  oauth2:
360
378
  audience:
361
379
  - account
362
380
  - api://default
363
- <%_ } _%>
364
- <%_ if (messageBroker === 'kafka') { _%>
365
- kafka:
366
- bootstrap-servers: localhost:9092
367
- consumer:
368
- key.deserializer: org.apache.kafka.common.serialization.StringDeserializer
369
- value.deserializer: org.apache.kafka.common.serialization.StringDeserializer
370
- group.id: <%= dasherizedBaseName %>
371
- auto.offset.reset: earliest
372
- producer:
373
- key.serializer: org.apache.kafka.common.serialization.StringSerializer
374
- value.serializer: org.apache.kafka.common.serialization.StringSerializer
375
381
  <%_ } _%>
376
382
 
377
383
  # ===================================================================
@@ -18,17 +18,16 @@
18
18
  -%>
19
19
  package <%= packageName %>;
20
20
 
21
- import <%= packageName %>.IntegrationTest;
22
21
  import com.datastax.oss.driver.api.core.CqlSession;
23
22
  import com.datastax.oss.driver.api.core.metadata.Metadata;
24
23
  import org.junit.jupiter.api.Test;
25
24
  import org.springframework.beans.factory.annotation.Autowired;
26
- import org.springframework.boot.test.context.SpringBootTest;
25
+ import org.cassandraunit.CQLDataLoader;
27
26
 
28
27
  import static org.assertj.core.api.Assertions.assertThat;
29
28
 
30
29
  @IntegrationTest
31
- public class CassandraKeyspaceIT extends AbstractCassandraTest {
30
+ public class CassandraKeyspaceIT {
32
31
 
33
32
  @Autowired
34
33
  private CqlSession session;
@@ -36,6 +35,6 @@ public class CassandraKeyspaceIT extends AbstractCassandraTest {
36
35
  @Test
37
36
  void shouldListCassandraUnitKeyspace() {
38
37
  Metadata metadata = session.getMetadata();
39
- assertThat(metadata.getKeyspace(CASSANDRA_UNIT_KEYSPACE)).isNotNull();
38
+ assertThat(metadata.getKeyspace(CQLDataLoader.DEFAULT_KEYSPACE_NAME)).isNotNull();
40
39
  }
41
40
  }
@@ -20,13 +20,17 @@ package <%= packageName %>;
20
20
 
21
21
  import <%= packageName %>.<%= mainClass %>;
22
22
  <%_ if (databaseTypeCouchbase) { _%>
23
- import <%= packageName %>.CouchbaseTestContainerExtension;
23
+ import org.springframework.test.context.ActiveProfiles;
24
+ import tech.jhipster.config.JHipsterConstants;
24
25
  <%_ } _%>
25
26
  <%_ if (databaseTypeNeo4j) { _%>
26
27
  import <%= packageName %>.AbstractNeo4jIT;
27
28
  <%_ } _%>
28
29
  <%_ if (databaseTypeMongodb) { _%>
29
- import <%= packageName %>.MongoDbTestContainerExtension;
30
+ import <%= packageName %>.config.EmbeddedMongo;
31
+ <%_ } _%>
32
+ <%_ if (databaseTypeCassandra) { _%>
33
+ import <%= packageName %>.config.EmbeddedCassandra;
30
34
  <%_ } _%>
31
35
  <%_ if (reactiveSqlTestContainers) { _%>
32
36
  import <%= packageName %>.ReactiveSqlTestContainerExtension;
@@ -37,7 +41,7 @@ import <%= packageName %>.RedisTestContainerExtension;
37
41
  <%_ if (authenticationTypeOauth2) { _%>
38
42
  import <%= packageName %>.config.TestSecurityConfiguration;
39
43
  <%_ } _%>
40
- <%_ if (cacheProviderRedis || databaseTypeNeo4j || databaseTypeCouchbase || reactiveSqlTestContainers || databaseTypeMongodb) { _%>
44
+ <%_ if (cacheProviderRedis || databaseTypeNeo4j || databaseTypeCouchbase || reactiveSqlTestContainers) { _%>
41
45
  import org.junit.jupiter.api.extension.ExtendWith;
42
46
  <%_ } _%>
43
47
 
@@ -63,9 +67,13 @@ import java.lang.annotation.Target;
63
67
  <%_ } _%>
64
68
  <%_ if (databaseTypeCouchbase) { _%>
65
69
  @ExtendWith(CouchbaseTestContainerExtension.class)
70
+ @ActiveProfiles(JHipsterConstants.SPRING_PROFILE_TEST)
66
71
  <%_ } _%>
67
72
  <%_ if (databaseTypeMongodb) { _%>
68
- @ExtendWith(MongoDbTestContainerExtension.class)
73
+ @EmbeddedMongo
74
+ <%_ } _%>
75
+ <%_ if (databaseTypeCassandra) { _%>
76
+ @EmbeddedCassandra
69
77
  <%_ } _%>
70
78
  <%_ if (databaseTypeNeo4j) { _%>
71
79
  @ExtendWith(AbstractNeo4jIT.class)
@@ -27,6 +27,11 @@ import static com.tngtech.archunit.base.DescribedPredicate.alwaysTrue;
27
27
  import static com.tngtech.archunit.core.domain.JavaClass.Predicates.belongToAnyOf;
28
28
  import static com.tngtech.archunit.library.Architectures.layeredArchitecture;
29
29
 
30
+ <%_
31
+ const hasClientLayer = !reactive && (applicationTypeMicroservice || applicationTypeGateway);
32
+ const hasDomainLayer = !databaseTypeNo;
33
+ const hasConstants = !skipUserManagement || databaseTypeSql || databaseTypeMongodb || databaseTypeCouchbase || databaseTypeNeo4j;
34
+ _%>
30
35
  @AnalyzeClasses(packagesOf = <%= mainClass %>.class, importOptions = DoNotIncludeTests.class)
31
36
  class TechnicalStructureTest {
32
37
 
@@ -34,36 +39,34 @@ class TechnicalStructureTest {
34
39
  @ArchTest
35
40
  static final ArchRule respectsTechnicalArchitectureLayers = layeredArchitecture()
36
41
  .layer("Config").definedBy("..config..")
37
- <%_ if (applicationTypeMicroservice) { _%>
42
+ <%_ if (hasClientLayer) { _%>
38
43
  .layer("Client").definedBy("..client..")
39
44
  <%_ } _%>
40
45
  .layer("Web").definedBy("..web..")
41
- <%_ if (!databaseTypeNo || authenticationTypeOauth2) { _%>
42
- .layer("Service").definedBy("..service..")
43
- <%_ } _%>
46
+ .optionalLayer("Service").definedBy("..service..")
44
47
  .layer("Security").definedBy("..security..")
45
- <%_ if (!databaseTypeNo) { _%>
48
+ <%_ if (hasDomainLayer) { _%>
46
49
  .layer("Persistence").definedBy("..repository..")
47
50
  .layer("Domain").definedBy("..domain..")
48
51
  <%_ } _%>
49
52
 
50
- <%_ if (messageBrokerKafka) { _%>
51
- .whereLayer("Config").mayOnlyBeAccessedByLayers("Web")
52
- <%_ } else { _%>
53
53
  .whereLayer("Config").mayNotBeAccessedByAnyLayer()
54
- <%_ } _%>
55
- <%_ if (applicationTypeMicroservice) { _%>
54
+ <%_ if (hasClientLayer) { _%>
56
55
  .whereLayer("Client").mayNotBeAccessedByAnyLayer()
57
56
  <%_ } _%>
58
57
  .whereLayer("Web").mayOnlyBeAccessedByLayers("Config")
59
- <%_ if (!databaseTypeNo || authenticationTypeOauth2) { _%>
60
58
  .whereLayer("Service").mayOnlyBeAccessedByLayers("Web", "Config")
61
- <%_ } _%>
62
- .whereLayer("Security").mayOnlyBeAccessedByLayers(<% if (applicationTypeMicroservice) { %>"Client", <% } %>"Web"<% if (!databaseTypeNo || authenticationTypeOauth2) { %>, "Service"<% } %>, "Config")
63
- <%_ if (!databaseTypeNo) { _%>
59
+ .whereLayer("Security").mayOnlyBeAccessedByLayers("Config", <% if (hasClientLayer) { %>"Client", <% } %>"Service", "Web")
60
+ <%_ if (hasDomainLayer) { _%>
64
61
  .whereLayer("Persistence").mayOnlyBeAccessedByLayers("Service", "Security", "Web", "Config")
65
62
  .whereLayer("Domain").mayOnlyBeAccessedByLayers("Persistence", "Service", "Security", "Web", "Config")
66
63
  <%_ } _%>
67
64
 
68
- .ignoreDependency(belongToAnyOf(<%= mainClass %>.class), alwaysTrue());
65
+ .ignoreDependency(belongToAnyOf(<%= mainClass %>.class), alwaysTrue())
66
+ .ignoreDependency(alwaysTrue(), belongToAnyOf(
67
+ <%_ if (hasConstants) { _%>
68
+ <%= packageName %>.config.Constants.class,
69
+ <%_ } _%>
70
+ <%= packageName %>.config.ApplicationProperties.class
71
+ ));
69
72
  }