generator-jhipster 8.0.0 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -57
- package/dist/cli/environment-builder.mjs +11 -4
- package/dist/cli/program.mjs +1 -1
- package/dist/generators/angular/cleanup.mjs +7 -0
- package/dist/generators/angular/files-angular.mjs +3 -4
- package/dist/generators/angular/generator.mjs +2 -15
- package/dist/generators/angular/needle-api/needle-client-angular.mjs +2 -8
- package/dist/generators/angular/resources/package.json +23 -23
- package/dist/generators/angular/support/translate-angular.mjs +2 -2
- package/dist/generators/angular/templates/README.md.jhi.client.angular.ejs +1 -1
- package/dist/generators/angular/templates/angular.json.ejs +3 -7
- package/dist/generators/angular/templates/src/main/webapp/app/account/activate/activate.component.html.ejs +6 -4
- package/dist/generators/angular/templates/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/account/password/password.component.html.ejs +39 -33
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +44 -36
- package/dist/generators/angular/templates/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +24 -23
- package/dist/generators/angular/templates/src/main/webapp/app/account/register/register.component.html.ejs +74 -62
- package/dist/generators/angular/templates/src/main/webapp/app/account/sessions/sessions.component.html.ejs +12 -4
- package/dist/generators/angular/templates/src/main/webapp/app/account/settings/settings.component.html.ejs +54 -48
- package/dist/generators/angular/templates/src/main/webapp/app/admin/admin.routes.ts.ejs +74 -0
- package/dist/generators/angular/templates/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +15 -5
- package/dist/generators/angular/templates/src/main/webapp/app/admin/docs/docs.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +20 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/health/health.component.html.ejs +10 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/health/modal/health-modal.component.html.ejs +9 -3
- package/dist/generators/angular/templates/src/main/webapp/app/admin/logs/logs.component.html.ejs +12 -4
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/jvm-memory/jvm-memory.component.html.ejs +13 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-cache/metrics-cache.component.html.ejs +6 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-datasource/metrics-datasource.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-endpoints-requests/metrics-endpoints-requests.component.html.ejs +13 -9
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-garbagecollector/metrics-garbagecollector.component.html.ejs +13 -5
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-modal-threads/metrics-modal-threads.component.html.ejs +21 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-request/metrics-request.component.html.ejs +6 -2
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/blocks/metrics-system/metrics-system.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +16 -7
- package/dist/generators/angular/templates/src/main/webapp/app/admin/tracker/tracker.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/delete/user-management-delete-dialog.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/detail/user-management-detail.component.html.ejs +11 -4
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/list/user-management.component.html.ejs +20 -11
- package/dist/generators/angular/templates/src/main/webapp/app/admin/user-management/update/user-management-update.component.html.ejs +48 -34
- package/dist/generators/angular/templates/src/main/webapp/app/app.component.ts.ejs +73 -0
- package/dist/generators/angular/templates/src/main/webapp/app/app.config.ts.ejs +67 -0
- package/dist/generators/angular/templates/src/main/webapp/app/app.routes.ts.ejs +85 -0
- package/dist/generators/angular/templates/src/main/webapp/app/core/microfrontend/index.ts.ejs +5 -4
- package/dist/generators/angular/templates/src/main/webapp/app/core/util/alert.service.spec.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/core/util/data-util.service.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/core/util/event-manager.service.spec.ts.ejs +12 -12
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.model.ts.ejs +4 -4
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/delete/_entityFile_-delete-dialog.component.html.ejs +3 -1
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/detail/_entityFile_-detail.component.html.ejs +26 -14
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.html.ejs +38 -25
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/list/_entityFile_.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.spec.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-form.service.ts.ejs +5 -12
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.html.ejs +55 -21
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.spec.ts.ejs +2 -2
- package/dist/generators/angular/templates/src/main/webapp/app/entities/_entityFolder_/update/_entityFile_-update.component.ts.ejs +10 -10
- package/dist/generators/angular/templates/src/main/webapp/app/entities/entity.routes.ts.ejs +25 -0
- package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.html.ejs +21 -17
- package/dist/generators/angular/templates/src/main/webapp/app/home/home.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/error/error.component.html.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.spec.ts.ejs +5 -2
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/main/main.component.ts.ejs +5 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +97 -78
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.scss.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/layouts/profiles/page-ribbon.component.ts.ejs +6 -4
- package/dist/generators/angular/templates/src/main/webapp/app/login/login.component.html.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert-error.component.html.ejs +6 -2
- package/dist/generators/angular/templates/src/main/webapp/app/shared/alert/alert.component.html.ejs +6 -2
- package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.component.html.ejs +11 -7
- package/dist/generators/angular/templates/src/main/webapp/app/shared/filter/filter.model.spec.ts.ejs +1 -1
- package/dist/generators/angular/templates/src/main/webapp/app/shared/sort/sort-by.directive.spec.ts.ejs +3 -3
- package/dist/generators/angular/templates/src/main/webapp/bootstrap.ts.ejs +5 -5
- package/dist/generators/angular/templates/src/main/webapp/content/scss/global.scss.ejs +1 -1
- package/dist/generators/angular/templates/webpack/webpack.microfrontend.js.ejs +2 -2
- package/dist/generators/app/README.md +108 -0
- package/dist/generators/app/USAGE +3 -0
- package/dist/generators/app/command.mjs +3 -3
- package/dist/generators/app/generator.mjs +11 -0
- package/dist/generators/base/command.mjs +0 -11
- package/dist/generators/base-application/generator.mjs +5 -6
- package/dist/generators/base-application/support/entities.mjs +2 -2
- package/dist/generators/base-application/support/index.mjs +1 -0
- package/dist/generators/base-application/support/prepare-entity.mjs +0 -1
- package/dist/generators/base-application/support/prepare-relationship.mjs +4 -0
- package/dist/generators/base-application/support/update-application-entities-transform.mjs +52 -0
- package/dist/generators/base-core/generator.mjs +17 -4
- package/dist/generators/base-entity-changes/generator.mjs +1 -1
- package/dist/generators/bootstrap/command.mjs +6 -0
- package/dist/generators/bootstrap/generator.mjs +27 -9
- package/dist/generators/bootstrap-application/generator.mjs +1 -19
- package/dist/generators/bootstrap-application-base/command.mjs +30 -0
- package/dist/generators/bootstrap-application-base/generator.mjs +27 -5
- package/dist/generators/bootstrap-application-base/index.mjs +1 -0
- package/dist/generators/bootstrap-application-base/support/export-jdl-transform.mjs +61 -0
- package/dist/generators/bootstrap-application-base/support/import-jdl-transform.mjs +64 -0
- package/dist/generators/bootstrap-application-base/support/index.mjs +2 -0
- package/dist/generators/client/command.mjs +2 -0
- package/dist/generators/client/resources/package.json +4 -4
- package/dist/generators/client/support/entity-definition.mjs +3 -3
- package/dist/generators/client/templates/README.md.jhi.client.ejs +2 -2
- package/dist/generators/client/templates/src/main/webapp/index.html.ejs +2 -2
- package/dist/generators/common/command.mjs +2 -0
- package/dist/generators/common/resources/package.json +3 -3
- package/dist/generators/common/templates/sonar-project.properties.ejs +1 -1
- package/dist/generators/cypress/templates/src/test/javascript/cypress/e2e/entity/_entity_.cy.ts.ejs +0 -1
- package/dist/generators/docker/generator.mjs +1 -1
- package/dist/generators/docker/templates/docker/cassandra.yml.ejs +2 -2
- package/dist/generators/docker/templates/docker/keycloak.yml.ejs +1 -1
- package/dist/generators/docker/templates/docker/realm-config/jhipster-realm.json.ejs +4 -1
- package/dist/generators/docker-compose/generator.mjs +4 -11
- package/dist/generators/docker-compose/templates/docker-compose.yml.ejs +1 -1
- package/dist/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +4 -1
- package/dist/generators/export-jdl/generator.mjs +1 -1
- package/dist/generators/feign-client/cleanup.mjs +12 -0
- package/dist/generators/feign-client/files.mjs +35 -0
- package/dist/generators/feign-client/generator.mjs +65 -0
- package/dist/generators/feign-client/index.mjs +19 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizationHeaderUtil.java.ejs +174 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/AuthorizedFeignClient.java.ejs +72 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/OAuth2InterceptedFeignConfiguration.java.ejs +35 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/OAuthIdpTokenResponseDTO.java.ejs +161 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/TokenRelayRequestInterceptor.java.ejs +42 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/client/UserFeignClientInterceptor_jwt.java.ejs +36 -0
- package/dist/generators/feign-client/templates/src/main/java/_package_/config/FeignConfiguration.java.ejs +45 -0
- package/dist/generators/feign-client/templates/src/test/java/_package_/client/AuthorizationHeaderUtilTest.java.ejs +263 -0
- package/dist/generators/generate-blueprint/command.mjs +1 -1
- package/dist/generators/generate-blueprint/resources/package.json +1 -1
- package/dist/generators/generate-blueprint/templates/vitest.config.ts.ejs +1 -1
- package/dist/generators/generator-constants.mjs +9 -5
- package/dist/generators/generator-list.mjs +1 -0
- package/dist/generators/git/generator.mjs +3 -5
- package/dist/generators/gradle/constants.mjs +1 -1
- package/dist/generators/java/command.mjs +6 -0
- package/dist/generators/java/entity-files.mjs +4 -0
- package/dist/generators/java/generator.mjs +3 -2
- package/dist/generators/java/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.jackson_identity_info.ejs +30 -0
- package/dist/generators/jdl/generator.mjs +18 -23
- package/dist/generators/kubernetes/templates/keycloak/keycloak-configmap.yml.ejs +4 -1
- package/dist/generators/kubernetes/templates/keycloak/keycloak.yml.ejs +1 -1
- package/dist/generators/languages/generator.mjs +24 -15
- package/dist/generators/languages/prompts.mjs +3 -1
- package/dist/generators/languages/support/translate.mjs +1 -1
- package/dist/generators/languages/templates/entity/i18n/entity_pt-br.json.ejs +1 -1
- package/dist/generators/liquibase/README.md +19 -0
- package/dist/generators/project-name/generator.mjs +14 -19
- package/dist/generators/project-name/support/name-resolver.mjs +35 -6
- package/dist/generators/react/resources/package.json +24 -24
- package/dist/generators/react/templates/src/main/webapp/app/config/notification-middleware.spec.ts.ejs +4 -4
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-detail.tsx.ejs +1 -2
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.tsx.ejs +12 -13
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.tsx.ejs +3 -8
- package/dist/generators/react/templates/src/main/webapp/app/entities/_entityFolder_/_entityModel_.model.ts.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/layout/header/header.scss.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/reducers/reducer.utils.ts.ejs +1 -1
- package/dist/generators/react/templates/src/main/webapp/app/shared/util/date-utils.ts.ejs +1 -1
- package/dist/generators/server/cleanup.mjs +5 -0
- package/dist/generators/server/command.mjs +13 -2
- package/dist/generators/server/entity-files.mjs +3 -3
- package/dist/generators/server/files.mjs +2 -38
- package/dist/generators/server/generator.mjs +35 -19
- package/dist/generators/server/jdl/application-definition.mjs +5 -2
- package/dist/generators/server/options/feign-client.mjs +24 -0
- package/dist/generators/server/options/index.mjs +1 -0
- package/dist/generators/server/resources/Dockerfile +16 -16
- package/dist/generators/server/resources/gradle/libs.versions.toml +4 -4
- package/dist/generators/server/resources/pom.xml +11 -11
- package/dist/generators/server/support/config.mjs +1 -0
- package/dist/generators/server/support/prepare-entity.mjs +4 -1
- package/dist/generators/server/templates/build.gradle.ejs +1 -2
- package/dist/generators/server/templates/gradle/profile_dev.gradle.ejs +3 -21
- package/dist/generators/server/templates/gradle/profile_prod.gradle.ejs +5 -15
- package/dist/generators/server/templates/pom.xml.ejs +1 -4
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/get_all_template.ejs +7 -7
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/_partials_entity_/search_template.ejs +4 -4
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/repository/_entityClass_Repository.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/service/mapper/_entityClass_Mapper.java.ejs +2 -2
- package/dist/generators/server/templates/src/main/java/_package_/_entityPackage_/web/rest/_entityClass_Resource.java.ejs +3 -3
- package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_imperative.java.ejs +20 -2
- package/dist/generators/server/templates/src/main/java/_package_/config/SecurityConfiguration_reactive.java.ejs +4 -1
- package/dist/generators/server/templates/src/main/java/_package_/security/oauth2/CustomClaimConverter.java.ejs +1 -5
- package/dist/generators/server/templates/src/main/java/_package_/service/MailService.java.ejs +48 -12
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/AccountResource.java.ejs +1 -1
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/LogoutResource_imperative.java.ejs +4 -13
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/LogoutResource_reactive.java.ejs +5 -11
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/PublicUserResource.java.ejs +3 -3
- package/dist/generators/server/templates/src/main/java/_package_/web/rest/UserResource.java.ejs +6 -6
- package/dist/generators/server/templates/src/main/resources/config/application.yml.ejs +8 -7
- package/dist/generators/server/templates/src/test/java/_package_/TechnicalStructureTest.java.ejs +1 -1
- package/dist/generators/server/templates/src/test/java/_package_/_entityPackage_/web/rest/_entityClass_ResourceIT.java.ejs +8 -8
- package/dist/generators/server/templates/src/test/java/_package_/web/rest/errors/ExceptionTranslatorTestController.java.ejs +2 -2
- package/dist/generators/spring-cache/internal/dependencies.mjs +1 -1
- package/dist/generators/spring-cache/templates/gradle/cache.gradle.ejs +1 -1
- package/dist/generators/spring-cache/templates/src/main/java/_package_/config/CacheFactoryConfiguration.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/templates/src/main/java/_package_/web/rest/KafkaResource_imperative.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/templates/src/main/java/_package_/web/rest/KafkaResource_reactive.java.ejs +1 -1
- package/dist/generators/spring-cloud-stream/templates/src/test/java/_package_/web/rest/KafkaResourceIT_reactive.java.ejs +3 -0
- package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.elastic_search.ejs +1 -1
- package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/_entityPackage_/repository/search/_entityClass_SearchRepository.java.ejs +1 -1
- package/dist/generators/spring-data-elasticsearch/templates/src/main/java/_package_/repository/search/UserSearchRepository.java.ejs +4 -4
- package/dist/generators/spring-data-neo4j/generator.mjs +43 -1
- package/dist/generators/spring-data-neo4j/templates/src/main/java/_package_/_entityPackage_/domain/_persistClass_.java.jhi.spring_data_neo4j.ejs +1 -1
- package/dist/generators/spring-data-relational/README.md +7 -0
- package/dist/generators/spring-data-relational/generator.mjs +2 -1
- package/dist/generators/spring-data-relational/internal/dependencies.mjs +29 -8
- package/dist/generators/spring-data-relational/support/database-data.mjs +4 -0
- package/dist/generators/spring-data-relational/templates/src/main/java/_package_/repository/EntityManager_reactive.java.ejs +49 -8
- package/dist/generators/spring-data-relational/templates/src/test/java/_package_/config/SqlTestContainersSpringContextCustomizerFactory.java.ejs +1 -1
- package/dist/generators/upgrade/generator.mjs +3 -3
- package/dist/generators/vue/resources/package.json +21 -21
- package/dist/generators/vue/templates/package.json.ejs +1 -0
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-details.vue.ejs +1 -2
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.component.spec.ts.ejs +1 -1
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.component.ts.ejs +3 -3
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_-update.vue.ejs +2 -15
- package/dist/generators/vue/templates/src/main/webapp/app/entities/_entityFolder_/_entityFile_.vue.ejs +2 -7
- package/dist/jdl/converters/jdl-to-json/jdl-to-json-basic-entity-converter.js +1 -0
- package/dist/jdl/converters/json-to-jdl-converter.js +1 -1
- package/dist/jdl/converters/json-to-jdl-entity-converter.js +1 -0
- package/dist/jdl/converters/parsed-jdl-to-jdl-object/entity-converter.js +5 -0
- package/dist/jdl/converters/parsed-jdl-to-jdl-object/parsed-jdl-to-jdl-object-converter.js +0 -27
- package/dist/jdl/exporters/jhipster-entity-exporter.js +3 -2
- package/dist/jdl/jhipster/default-application-options.js +1 -1
- package/dist/jdl/jhipster/field-types.js +1 -1
- package/dist/jdl/jhipster/json-entity.js +6 -0
- package/dist/jdl/models/jdl-entity.js +16 -1
- package/dist/jdl/models/jdl-field.js +13 -0
- package/dist/jdl/models/jdl-object.js +3 -3
- package/dist/jdl/models/jdl-relationship.js +23 -5
- package/dist/jdl/parsing/lexer/application-tokens.js +1 -1
- package/dist/testing/helpers.mjs +10 -3
- package/dist/types/cli/environment-builder.d.mts +2 -0
- package/dist/types/generators/angular/needle-api/needle-client-angular.d.mts +0 -1
- package/dist/types/generators/base/api.d.mts +12 -0
- package/dist/types/generators/base/support/needles.d.mts +1 -1
- package/dist/types/generators/base-application/generator.d.mts +2 -2
- package/dist/types/generators/base-application/support/index.d.mts +1 -0
- package/dist/types/generators/base-application/support/update-application-entities-transform.d.mts +4 -0
- package/dist/types/generators/base-application/types/relationship.d.mts +4 -0
- package/dist/types/generators/base-core/generator.d.mts +7 -1
- package/dist/types/generators/bootstrap-application-base/support/export-jdl-transform.d.mts +8 -0
- package/dist/types/generators/bootstrap-application-base/support/import-jdl-transform.d.mts +6 -0
- package/dist/types/generators/bootstrap-application-base/support/index.d.mts +2 -0
- package/dist/types/generators/client/support/entity-definition.d.mts +2 -2
- package/dist/types/generators/feign-client/types-export.d.ts +1 -0
- package/dist/types/generators/generator-constants.d.mts +52 -48
- package/dist/types/generators/generator-list.d.mts +1 -0
- package/dist/types/generators/project-name/support/name-resolver.d.mts +9 -1
- package/dist/types/generators/server/options/feign-client.d.mts +21 -0
- package/dist/types/generators/server/options/index.d.mts +1 -0
- package/dist/types/jdl/converters/json-to-jdl-converter.d.ts +1 -0
- package/dist/types/jdl/converters/parsed-jdl-to-jdl-object/option-converter.d.ts +1 -1
- package/dist/types/jdl/jhipster/json-entity.d.ts +2 -0
- package/dist/types/jdl/models/jdl-entity.d.ts +1 -0
- package/dist/types/jdl/models/jdl-relationship.d.ts +0 -18
- package/dist/types/jdl/types/types.d.mts +2 -2
- package/package.json +27 -27
|
@@ -59,19 +59,13 @@ public class LogoutResource {
|
|
|
59
59
|
|
|
60
60
|
private Map<String, String> prepareLogoutUri(ServerHttpRequest request, ClientRegistration clientRegistration, OidcIdToken idToken) {
|
|
61
61
|
StringBuilder logoutUrl = new StringBuilder();
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
logoutUrl.append(issuerUri.endsWith("/") ? issuerUri + "v2/logout" : issuerUri + "/v2/logout");
|
|
65
|
-
} else {
|
|
66
|
-
logoutUrl.append(clientRegistration.getProviderDetails().getConfigurationMetadata().get("end_session_endpoint").toString());
|
|
67
|
-
}
|
|
62
|
+
|
|
63
|
+
logoutUrl.append(clientRegistration.getProviderDetails().getConfigurationMetadata().get("end_session_endpoint").toString());
|
|
68
64
|
|
|
69
65
|
String originUrl = request.getHeaders().getOrigin();
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
logoutUrl.append("?id_token_hint=").append(idToken.getTokenValue()).append("&post_logout_redirect_uri=").append(originUrl);
|
|
74
|
-
}
|
|
66
|
+
|
|
67
|
+
logoutUrl.append("?id_token_hint=").append(idToken.getTokenValue()).append("&post_logout_redirect_uri=").append(originUrl);
|
|
68
|
+
|
|
75
69
|
return Map.of("logoutUrl", logoutUrl.toString());
|
|
76
70
|
}
|
|
77
71
|
}
|
|
@@ -59,7 +59,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest;
|
|
|
59
59
|
import org.springframework.web.bind.annotation.*;
|
|
60
60
|
<%_ if (reactive) { _%>
|
|
61
61
|
import org.springframework.web.server.ResponseStatusException;
|
|
62
|
-
import org.springframework.web.util.
|
|
62
|
+
import org.springframework.web.util.ForwardedHeaderUtils;
|
|
63
63
|
import reactor.core.publisher.Flux;
|
|
64
64
|
import reactor.core.publisher.Mono;
|
|
65
65
|
<%_ } else {_%>
|
|
@@ -133,7 +133,7 @@ public class PublicUserResource {
|
|
|
133
133
|
|
|
134
134
|
return userService.countManagedUsers()
|
|
135
135
|
.map(total -> new PageImpl<>(new ArrayList<>(), pageable, total))
|
|
136
|
-
.map(page -> PaginationUtil.generatePaginationHttpHeaders(
|
|
136
|
+
.map(page -> PaginationUtil.generatePaginationHttpHeaders(ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), page))
|
|
137
137
|
.map(headers -> ResponseEntity.ok().headers(headers).body(userService.getAllPublicUsers(pageable)));
|
|
138
138
|
}
|
|
139
139
|
<%_ } else { _%>
|
|
@@ -181,7 +181,7 @@ public class PublicUserResource {
|
|
|
181
181
|
* @return the result of the search.
|
|
182
182
|
*/
|
|
183
183
|
@GetMapping("/users/_search/{query}")
|
|
184
|
-
public <% if(reactive) { %>Mono<<% } %>List<<%= user.dtoClass %>><% if(reactive) { %>><% } %> search(@PathVariable String query) {
|
|
184
|
+
public <% if(reactive) { %>Mono<<% } %>List<<%= user.dtoClass %>><% if(reactive) { %>><% } %> search(@PathVariable("query") String query) {
|
|
185
185
|
<%_ if (searchEngineElasticsearch) { _%>
|
|
186
186
|
<%_ if (reactive) { _%>
|
|
187
187
|
return userSearchRepository.search(query).map(<%= user.dtoClass %>::new).collectList();
|
package/dist/generators/server/templates/src/main/java/_package_/web/rest/UserResource.java.ejs
CHANGED
|
@@ -62,7 +62,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
|
|
|
62
62
|
import org.springframework.web.bind.annotation.*;
|
|
63
63
|
<%_ if (reactive) { _%>
|
|
64
64
|
import org.springframework.web.server.ResponseStatusException;
|
|
65
|
-
import org.springframework.web.util.
|
|
65
|
+
import org.springframework.web.util.ForwardedHeaderUtils;
|
|
66
66
|
import reactor.core.publisher.Flux;
|
|
67
67
|
import reactor.core.publisher.Mono;
|
|
68
68
|
<%_ } else { _%>
|
|
@@ -270,7 +270,7 @@ public class UserResource {
|
|
|
270
270
|
|
|
271
271
|
return userService.countManagedUsers()
|
|
272
272
|
.map(total -> new PageImpl<>(new ArrayList<>(), pageable, total))
|
|
273
|
-
.map(page -> PaginationUtil.generatePaginationHttpHeaders(
|
|
273
|
+
.map(page -> PaginationUtil.generatePaginationHttpHeaders(ForwardedHeaderUtils.adaptFromForwardedHeaders(request.getURI(), request.getHeaders()), page))
|
|
274
274
|
.map(headers -> ResponseEntity.ok().headers(headers).body(userService.getAllManagedUsers(pageable)));
|
|
275
275
|
<%_ } else { _%>
|
|
276
276
|
public ResponseEntity<List<<%= user.adminUserDto %>>> getAllUsers(@org.springdoc.core.annotations.ParameterObject Pageable pageable) {
|
|
@@ -306,13 +306,13 @@ public class UserResource {
|
|
|
306
306
|
@GetMapping("/users/{login}")
|
|
307
307
|
@PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")")
|
|
308
308
|
<%_ if (reactive) { _%>
|
|
309
|
-
public Mono<<%= user.adminUserDto %>> getUser(@PathVariable String login) {
|
|
309
|
+
public Mono<<%= user.adminUserDto %>> getUser(@PathVariable("login") String login) {
|
|
310
310
|
log.debug("REST request to get User : {}", login);
|
|
311
311
|
return userService.getUserWithAuthoritiesByLogin(login)
|
|
312
312
|
.map(<%= user.adminUserDto %>::new)
|
|
313
313
|
.switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND)));
|
|
314
314
|
<%_ } else { _%>
|
|
315
|
-
public ResponseEntity<<%= user.adminUserDto %>> getUser(@PathVariable @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
|
|
315
|
+
public ResponseEntity<<%= user.adminUserDto %>> getUser(@PathVariable("login") @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
|
|
316
316
|
log.debug("REST request to get User : {}", login);
|
|
317
317
|
return ResponseUtil.wrapOrNotFound(
|
|
318
318
|
userService.getUserWithAuthoritiesByLogin(login)
|
|
@@ -329,12 +329,12 @@ public class UserResource {
|
|
|
329
329
|
@DeleteMapping("/users/{login}")
|
|
330
330
|
@PreAuthorize("hasAuthority(\"" + AuthoritiesConstants.ADMIN + "\")")
|
|
331
331
|
<%_ if (reactive) { _%>
|
|
332
|
-
public Mono<ResponseEntity<Void>> deleteUser(@PathVariable @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
|
|
332
|
+
public Mono<ResponseEntity<Void>> deleteUser(@PathVariable("login") @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
|
|
333
333
|
log.debug("REST request to delete User: {}", login);
|
|
334
334
|
return userService.deleteUser(login)
|
|
335
335
|
.then(Mono.just(ResponseEntity.noContent().headers(HeaderUtil.createAlert( applicationName, <% if (enableTranslation) { %> "userManagement.deleted"<% } else { %> "A user is deleted with identifier " + login<% } %>, login)).build()));
|
|
336
336
|
<%_ } else { _%>
|
|
337
|
-
public ResponseEntity<Void> deleteUser(@PathVariable @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
|
|
337
|
+
public ResponseEntity<Void> deleteUser(@PathVariable("login") @Pattern(regexp = Constants.LOGIN_REGEX) String login) {
|
|
338
338
|
log.debug("REST request to delete User: {}", login);
|
|
339
339
|
userService.deleteUser(login);
|
|
340
340
|
return ResponseEntity.noContent().headers(HeaderUtil.createAlert(applicationName, <% if (enableTranslation) { %> "userManagement.deleted"<% } else { %> "A user is deleted with identifier " + login<% } %>, login)).build();
|
|
@@ -142,6 +142,10 @@ management:
|
|
|
142
142
|
export:
|
|
143
143
|
enabled: true
|
|
144
144
|
step: 60
|
|
145
|
+
observations:
|
|
146
|
+
key-values:
|
|
147
|
+
application: ${spring.application.name}
|
|
148
|
+
metrics:
|
|
145
149
|
enable:
|
|
146
150
|
http: true
|
|
147
151
|
jvm: true
|
|
@@ -153,13 +157,10 @@ management:
|
|
|
153
157
|
all: true
|
|
154
158
|
percentiles:
|
|
155
159
|
all: 0, 0.5, 0.75, 0.95, 0.99, 1.0
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
request:
|
|
161
|
-
autotime:
|
|
162
|
-
enabled: true
|
|
160
|
+
data:
|
|
161
|
+
repository:
|
|
162
|
+
autotime:
|
|
163
|
+
enabled: true
|
|
163
164
|
|
|
164
165
|
<%_ if (databaseTypeMongodb) { _%>
|
|
165
166
|
mongock:
|
package/dist/generators/server/templates/src/test/java/_package_/TechnicalStructureTest.java.ejs
CHANGED
|
@@ -28,7 +28,7 @@ import static com.tngtech.archunit.core.domain.JavaClass.Predicates.belongToAnyO
|
|
|
28
28
|
import static com.tngtech.archunit.library.Architectures.layeredArchitecture;
|
|
29
29
|
|
|
30
30
|
<%_
|
|
31
|
-
const hasClientLayer =
|
|
31
|
+
const hasClientLayer = feignClient;
|
|
32
32
|
const hasDomainLayer = !databaseTypeNo;
|
|
33
33
|
const hasConstants = !skipUserManagement || databaseTypeSql || databaseTypeMongodb || databaseTypeCouchbase || databaseTypeNeo4j;
|
|
34
34
|
_%>
|
|
@@ -152,9 +152,6 @@ import org.springframework.test.web.servlet.MockMvc;
|
|
|
152
152
|
import org.springframework.transaction.annotation.Transactional;
|
|
153
153
|
<%_ } _%>
|
|
154
154
|
<%_ } _%>
|
|
155
|
-
<%_ if (anyFieldIsBlobDerived) { _%>
|
|
156
|
-
import org.springframework.util.Base64Utils;
|
|
157
|
-
<%_ } _%>
|
|
158
155
|
<%_ if (reactive && (implementsEagerLoadApis || searchEngineElasticsearch)) { _%>
|
|
159
156
|
import reactor.core.publisher.Flux;
|
|
160
157
|
import reactor.core.publisher.Mono;
|
|
@@ -190,6 +187,9 @@ import java.time.temporal.ChronoUnit;
|
|
|
190
187
|
<%_ if (!reactive && implementsEagerLoadApis) { _%>
|
|
191
188
|
import java.util.ArrayList;
|
|
192
189
|
<%_ } _%>
|
|
190
|
+
<%_ if (anyFieldIsBlobDerived) { _%>
|
|
191
|
+
import java.util.Base64;
|
|
192
|
+
<%_ } _%>
|
|
193
193
|
<%_ if (searchEngineElasticsearch && !reactive) { _%>
|
|
194
194
|
import java.util.Collections;
|
|
195
195
|
<%_ if (paginationNo) { _%>
|
|
@@ -933,7 +933,7 @@ _%>
|
|
|
933
933
|
<%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.[*].<%= field.fieldName %>ContentType").value(hasItem(<%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE))<%= !reactive ? ')' : '' %>
|
|
934
934
|
<%_ } _%>
|
|
935
935
|
<%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.[*].<%= field.fieldName %>").value(hasItem(<%
|
|
936
|
-
if (field.fieldTypeBinary && !field.blobContentTypeText) { %>
|
|
936
|
+
if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
|
|
937
937
|
if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
|
|
938
938
|
if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
|
|
939
939
|
if (field.fieldTypeBinary && !field.blobContentTypeText) { %><%
|
|
@@ -1020,7 +1020,7 @@ _%>
|
|
|
1020
1020
|
<%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.<%= field.fieldName %>ContentType").value(<%= reactive ? 'is(' : '' %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE))
|
|
1021
1021
|
<%_ } _%>
|
|
1022
1022
|
<%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.<%= field.fieldName %>").value(<%= reactive ? 'is(' : '' %><%
|
|
1023
|
-
if (field.fieldTypeBinary && !field.blobContentTypeText) { %>
|
|
1023
|
+
if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
|
|
1024
1024
|
if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
|
|
1025
1025
|
if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
|
|
1026
1026
|
if (field.fieldTypeBinary && !field.blobContentTypeText) { %><%
|
|
@@ -1259,7 +1259,7 @@ _%>
|
|
|
1259
1259
|
.jsonPath("$.[*].<%= field.fieldName %>ContentType").value(hasItem(<%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE))
|
|
1260
1260
|
<%_ } _%>
|
|
1261
1261
|
.jsonPath("$.[*].<%= field.fieldName %>").value(hasItem(<% if
|
|
1262
|
-
(field.fieldTypeBinary && !field.blobContentTypeText) { %>
|
|
1262
|
+
(field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
|
|
1263
1263
|
if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
|
|
1264
1264
|
if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
|
|
1265
1265
|
if (field.fieldTypeBinary && !field.blobContentTypeText) { %><% if (databaseTypeCassandra) { %>.array()<% } %>)<% } else
|
|
@@ -1301,7 +1301,7 @@ _%>
|
|
|
1301
1301
|
.andExpect(jsonPath("$.[*].<%= field.fieldName %>ContentType").value(hasItem(<%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE)))
|
|
1302
1302
|
<%_ } _%>
|
|
1303
1303
|
.andExpect(jsonPath("$.[*].<%= field.fieldName %>").value(hasItem(<%
|
|
1304
|
-
if (field.fieldTypeBinary && !field.blobContentTypeText) { %>
|
|
1304
|
+
if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
|
|
1305
1305
|
if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
|
|
1306
1306
|
if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
|
|
1307
1307
|
if (field.fieldTypeBinary && !field.blobContentTypeText) { %><%
|
|
@@ -1831,7 +1831,7 @@ _%>
|
|
|
1831
1831
|
<%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.[*].<%= field.fieldName %>ContentType").value(hasItem(<%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %>_CONTENT_TYPE))<%= !reactive ? ')' : '' %>
|
|
1832
1832
|
<%_ } _%>
|
|
1833
1833
|
<%= !reactive ? '.andExpect(' : '.' %>jsonPath("$.[*].<%= field.fieldName %>").value(hasItem(<%
|
|
1834
|
-
if (field.fieldTypeBinary && !field.blobContentTypeText) { %>
|
|
1834
|
+
if (field.fieldTypeBinary && !field.blobContentTypeText) { %>Base64.getEncoder().encodeToString(<% } else
|
|
1835
1835
|
if (field.fieldTypeZonedDateTime) { %>sameInstant(<% } else
|
|
1836
1836
|
if (field.fieldTypeBigDecimal) { %>sameNumber(<% } %><%= 'DEFAULT_' + field.fieldNameUnderscored.toUpperCase() %><%
|
|
1837
1837
|
if (field.fieldTypeBinary && !field.blobContentTypeText) { %><%
|
|
@@ -45,11 +45,11 @@ public class ExceptionTranslatorTestController {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
@GetMapping("/missing-servlet-request-part")
|
|
48
|
-
public void missingServletRequestPartException(@RequestPart String part) {
|
|
48
|
+
public void missingServletRequestPartException(@RequestPart("part") String part) {
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
@GetMapping("/missing-servlet-request-parameter")
|
|
52
|
-
public void missingServletRequestParameterException(@RequestParam String param) {
|
|
52
|
+
public void missingServletRequestParameterException(@RequestParam("param") String param) {
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
@GetMapping("/access-denied")
|
|
@@ -139,7 +139,7 @@ export const getCacheProviderMavenDefinition = (cacheProvider, javaDependencies)
|
|
|
139
139
|
javaxCacheApi,
|
|
140
140
|
{
|
|
141
141
|
groupId: 'org.infinispan',
|
|
142
|
-
artifactId: 'infinispan-hibernate-cache-
|
|
142
|
+
artifactId: 'infinispan-hibernate-cache-v62',
|
|
143
143
|
},
|
|
144
144
|
{
|
|
145
145
|
groupId: 'org.infinispan',
|
|
@@ -24,7 +24,7 @@ dependencies {
|
|
|
24
24
|
implementation "com.hazelcast:hazelcast-spring:${hazelcastSpringVersion}"
|
|
25
25
|
<%_ } _%>
|
|
26
26
|
<%_ if (cacheProviderInfinispan) { _%>
|
|
27
|
-
implementation "org.infinispan:infinispan-hibernate-cache-
|
|
27
|
+
implementation "org.infinispan:infinispan-hibernate-cache-v62"
|
|
28
28
|
implementation "org.infinispan:infinispan-spring-boot3-starter-embedded"
|
|
29
29
|
implementation "org.infinispan:infinispan-commons-jakarta"
|
|
30
30
|
implementation "org.infinispan:infinispan-core-jakarta"
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
package <%= packageName %>.config;
|
|
20
20
|
|
|
21
21
|
import org.hibernate.service.ServiceRegistry;
|
|
22
|
-
import org.infinispan.hibernate.cache.
|
|
22
|
+
import org.infinispan.hibernate.cache.v62.InfinispanRegionFactory;
|
|
23
23
|
import org.infinispan.manager.EmbeddedCacheManager;
|
|
24
24
|
import org.springframework.stereotype.Component;
|
|
25
25
|
|
|
@@ -43,7 +43,7 @@ public class <%= upperFirstCamelCaseBaseName %>KafkaResource {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
@PostMapping("/publish")
|
|
46
|
-
public void publish(@RequestParam String message) {
|
|
46
|
+
public void publish(@RequestParam("message") String message) {
|
|
47
47
|
log.debug("REST request the message : {} to send to Kafka topic ", message);
|
|
48
48
|
streamBridge.send(PRODUCER_BINDING_NAME, message);
|
|
49
49
|
}
|
|
@@ -44,7 +44,7 @@ public class <%= upperFirstCamelCaseBaseName %>KafkaResource {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
@PostMapping("/publish")
|
|
47
|
-
public Mono<ResponseEntity<Void>> publish(@RequestParam String message) {
|
|
47
|
+
public Mono<ResponseEntity<Void>> publish(@RequestParam("message") String message) {
|
|
48
48
|
log.debug("REST request the message : {} to send to Kafka topic", message);
|
|
49
49
|
streamBridge.send(PRODUCER_BINDING_NAME, message);
|
|
50
50
|
return Mono.just(ResponseEntity.noContent().build());
|
|
@@ -35,9 +35,11 @@ import java.util.Map;
|
|
|
35
35
|
|
|
36
36
|
import org.junit.jupiter.api.Test;
|
|
37
37
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
38
|
+
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
|
38
39
|
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
|
|
39
40
|
import org.springframework.cloud.stream.binder.test.InputDestination;
|
|
40
41
|
import org.springframework.cloud.stream.binder.test.OutputDestination;
|
|
42
|
+
import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration;
|
|
41
43
|
import org.springframework.http.MediaType;
|
|
42
44
|
import org.springframework.messaging.Message;
|
|
43
45
|
import org.springframework.messaging.MessageHeaders;
|
|
@@ -50,6 +52,7 @@ import org.springframework.util.MimeTypeUtils;
|
|
|
50
52
|
@WithMockUser
|
|
51
53
|
@EmbeddedKafka
|
|
52
54
|
@IntegrationTest
|
|
55
|
+
@ImportAutoConfiguration(TestChannelBinderConfiguration.class)
|
|
53
56
|
class <%= upperFirstCamelCaseBaseName %>KafkaResourceIT {
|
|
54
57
|
private static String KAFKA_API = "/api/<%= dasherizedBaseName %>-kafka/{command}";
|
|
55
58
|
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
|
|
46
46
|
<%_ for (const relationship of relationships) { -%>
|
|
47
47
|
<&_ if (fragment.relationship<%- relationship.relationshipNameCapitalized %>AnnotationSection) { -&>
|
|
48
|
-
<%
|
|
48
|
+
<% /* just break the cycle in the reactive area, we already have the annotation in place */
|
|
49
49
|
if (!relationship.ownerSide && !reactive) { %>
|
|
50
50
|
@org.springframework.data.annotation.Transient
|
|
51
51
|
<% } %>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
package <%= entityAbsolutePackage %>.repository.search;
|
|
20
20
|
|
|
21
21
|
import <%= entityAbsolutePackage %>.domain.<%= persistClass %>;
|
|
22
|
-
import <%= entityAbsolutePackage %>.repository.<%=
|
|
22
|
+
import <%= entityAbsolutePackage %>.repository.<%= entityClass %>Repository;
|
|
23
23
|
|
|
24
24
|
<%_ if (!paginationNo) { _%>
|
|
25
25
|
<%_ if (!reactive) { _%>
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
package <%= packageName %>.repository.search;
|
|
20
20
|
|
|
21
21
|
import <%= user.entityAbsoluteClass %>;
|
|
22
|
-
import <%= packageName %>.repository.<%= user.
|
|
22
|
+
import <%= packageName %>.repository.<%= user.entityClass %>Repository;
|
|
23
23
|
|
|
24
24
|
<%_ if (reactive) { _%>
|
|
25
25
|
import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchTemplate;
|
|
@@ -49,7 +49,7 @@ import java.util.UUID;
|
|
|
49
49
|
import static org.springframework.data.elasticsearch.client.elc.QueryBuilders.queryStringQuery;
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
|
-
* Spring Data Elasticsearch repository for the
|
|
52
|
+
* Spring Data Elasticsearch repository for the <%= user.persistClass %> entity.
|
|
53
53
|
*/
|
|
54
54
|
public interface UserSearchRepository extends <% if (reactive) {%>Reactive<% } %>ElasticsearchRepository<<%= user.persistClass %>, <%= user.primaryKey.type %>>, UserSearchRepositoryInternal {
|
|
55
55
|
}
|
|
@@ -70,7 +70,7 @@ class UserSearchRepositoryInternalImpl implements UserSearchRepositoryInternal {
|
|
|
70
70
|
@Override
|
|
71
71
|
public Flux<<%= user.persistClass %>> search(String query) {
|
|
72
72
|
NativeQuery nativeQuery = new NativeQuery(QueryStringQuery.of(qs -> qs.query(query))._toQuery());
|
|
73
|
-
return reactiveElasticsearchTemplate.search(nativeQuery,
|
|
73
|
+
return reactiveElasticsearchTemplate.search(nativeQuery, <%= user.persistClass %>.class).map(SearchHit::getContent);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
<%_ } else { _%>
|
|
@@ -105,7 +105,7 @@ class UserSearchRepositoryInternalImpl implements UserSearchRepositoryInternal {
|
|
|
105
105
|
public Stream<<%= user.persistClass %>> search(String query) {
|
|
106
106
|
NativeQuery nativeQuery = new NativeQuery(QueryStringQuery.of(qs -> qs.query(query))._toQuery());
|
|
107
107
|
return elasticsearchTemplate
|
|
108
|
-
.search(nativeQuery,
|
|
108
|
+
.search(nativeQuery, <%= user.persistClass %>.class)
|
|
109
109
|
.map(SearchHit::getContent)
|
|
110
110
|
.stream();
|
|
111
111
|
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* limitations under the License.
|
|
18
18
|
*/
|
|
19
19
|
import BaseApplicationGenerator from '../base-application/index.mjs';
|
|
20
|
-
import { GENERATOR_BOOTSTRAP_APPLICATION, GENERATOR_LIQUIBASE, GENERATOR_SPRING_DATA_NEO4J } from '../generator-list.mjs';
|
|
20
|
+
import { GENERATOR_BOOTSTRAP_APPLICATION, GENERATOR_JAVA, GENERATOR_LIQUIBASE, GENERATOR_SPRING_DATA_NEO4J } from '../generator-list.mjs';
|
|
21
21
|
import writeTask from './files.mjs';
|
|
22
22
|
import cleanupTask from './cleanup.mjs';
|
|
23
23
|
import writeEntitiesTask, { cleanupEntitiesTask } from './entity-files.mjs';
|
|
@@ -28,6 +28,8 @@ export default class Neo4jGenerator extends BaseApplicationGenerator {
|
|
|
28
28
|
}
|
|
29
29
|
if (!this.delegateToBlueprint) {
|
|
30
30
|
await this.dependsOnJHipster(GENERATOR_BOOTSTRAP_APPLICATION);
|
|
31
|
+
const javaGenerator = await this.dependsOnJHipster(GENERATOR_JAVA);
|
|
32
|
+
javaGenerator.useJacksonIdentityInfo = true;
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
get composing() {
|
|
@@ -57,6 +59,46 @@ export default class Neo4jGenerator extends BaseApplicationGenerator {
|
|
|
57
59
|
get [BaseApplicationGenerator.PREPARING]() {
|
|
58
60
|
return this.delegateTasksToBlueprint(() => this.preparing);
|
|
59
61
|
}
|
|
62
|
+
get configuringEachEntity() {
|
|
63
|
+
return this.asConfiguringEachEntityTaskGroup({
|
|
64
|
+
async configuringEachEntity({ entityConfig }) {
|
|
65
|
+
if (entityConfig.dto && entityConfig.dto !== 'no') {
|
|
66
|
+
this.log.warn(`The DTO option is not supported for Neo4j database. Neo4j persists the entire constellation, DTO causes the constelation to be incomplete. DTO is found in entity ${entityConfig.name}.`);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
get [BaseApplicationGenerator.CONFIGURING_EACH_ENTITY]() {
|
|
72
|
+
return this.delegateTasksToBlueprint(() => this.configuringEachEntity);
|
|
73
|
+
}
|
|
74
|
+
get preparingEachEntity() {
|
|
75
|
+
return this.asPreparingEachEntityTaskGroup({
|
|
76
|
+
prepareEntity({ entity }) {
|
|
77
|
+
entity.relationships.forEach(relationship => {
|
|
78
|
+
if (relationship.persistableRelationship === undefined) {
|
|
79
|
+
relationship.persistableRelationship = true;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
get [BaseApplicationGenerator.PREPARING_EACH_ENTITY]() {
|
|
86
|
+
return this.delegateTasksToBlueprint(() => this.preparingEachEntity);
|
|
87
|
+
}
|
|
88
|
+
get default() {
|
|
89
|
+
return this.asDefaultTaskGroup({
|
|
90
|
+
async checkUserRelationship({ entities }) {
|
|
91
|
+
entities.forEach(entity => {
|
|
92
|
+
if (entity.relationships.some(relationship => relationship.otherEntity.builtInUser)) {
|
|
93
|
+
this.log.warn(`Relationship with User entity should be avoided for Neo4j database. Neo4j persists the entire constelation, related User entity will be updated causing security problems. Relationship with User entity is found in entity ${entity.name}.`);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
get [BaseApplicationGenerator.DEFAULT]() {
|
|
100
|
+
return this.delegateTasksToBlueprint(() => this.default);
|
|
101
|
+
}
|
|
60
102
|
get writing() {
|
|
61
103
|
return this.asWritingTaskGroup({
|
|
62
104
|
cleanupTask,
|
|
@@ -57,7 +57,7 @@ import org.springframework.data.neo4j.core.schema.Relationship;
|
|
|
57
57
|
<%_ if (relationship.relationshipLeftSide) { _%>
|
|
58
58
|
@Relationship(value = "HAS_<%= this._.toUpper(this._.snakeCase(relationship.relationshipName)) %>", direction = Relationship.Direction.OUTGOING)
|
|
59
59
|
<%_ } else { _%>
|
|
60
|
-
@Relationship(value = "
|
|
60
|
+
@Relationship(value = "HAS_<%= this._.toUpper(this._.snakeCase(relationship.otherRelationship.relationshipName)) %>", direction = Relationship.Direction.INCOMING)
|
|
61
61
|
<%_ } _%>
|
|
62
62
|
<&_ } -&>
|
|
63
63
|
<%_ } -%>
|
|
@@ -24,7 +24,7 @@ import writeEntitiesTask, { cleanupEntitiesTask } from './entity-files.mjs';
|
|
|
24
24
|
import { isReservedTableName } from '../../jdl/jhipster/reserved-keywords.js';
|
|
25
25
|
import { databaseTypes } from '../../jdl/jhipster/index.mjs';
|
|
26
26
|
import { getDBCExtraOption, getJdbcUrl, getR2dbcUrl } from './support/index.mjs';
|
|
27
|
-
import { getCommonMavenDefinition, getDatabaseTypeMavenDefinition, getH2MavenDefinition, getImperativeMavenDefinition, getReactiveMavenDefinition, } from './internal/dependencies.mjs';
|
|
27
|
+
import { getCommonMavenDefinition, getDatabaseDriverForDatabase, getDatabaseTypeMavenDefinition, getH2MavenDefinition, getImperativeMavenDefinition, getReactiveMavenDefinition, } from './internal/dependencies.mjs';
|
|
28
28
|
import command from './command.mjs';
|
|
29
29
|
const { SQL } = databaseTypes;
|
|
30
30
|
export default class SqlGenerator extends BaseApplicationGenerator {
|
|
@@ -62,6 +62,7 @@ export default class SqlGenerator extends BaseApplicationGenerator {
|
|
|
62
62
|
const anyApp = application;
|
|
63
63
|
anyApp.devDatabaseExtraOptions = getDBCExtraOption(anyApp.devDatabaseType);
|
|
64
64
|
anyApp.prodDatabaseExtraOptions = getDBCExtraOption(anyApp.prodDatabaseType);
|
|
65
|
+
anyApp.prodDatabaseDriver = getDatabaseDriverForDatabase(application.prodDatabaseType);
|
|
65
66
|
},
|
|
66
67
|
});
|
|
67
68
|
}
|
|
@@ -22,6 +22,27 @@ const testcontainerFileForDB = {
|
|
|
22
22
|
mysql: 'MysqlTestContainer.java',
|
|
23
23
|
postgresql: 'PostgreSqlTestContainer.java',
|
|
24
24
|
};
|
|
25
|
+
const databaseArtifactForDB = {
|
|
26
|
+
mariadb: {
|
|
27
|
+
jdbc: { groupId: 'org.mariadb.jdbc', artifactId: 'mariadb-java-client' },
|
|
28
|
+
// maria-r2dbc driver is failing.
|
|
29
|
+
// r2dbc: { groupId: 'org.mariadb', artifactId: 'r2dbc-mariadb' },
|
|
30
|
+
r2dbc: { groupId: 'io.asyncer', artifactId: 'r2dbc-mysql' },
|
|
31
|
+
},
|
|
32
|
+
mssql: {
|
|
33
|
+
jdbc: { groupId: 'com.microsoft.sqlserver', artifactId: 'mssql-jdbc' },
|
|
34
|
+
r2dbc: { groupId: 'io.r2dbc', artifactId: 'r2dbc-mssql' },
|
|
35
|
+
},
|
|
36
|
+
mysql: {
|
|
37
|
+
jdbc: { groupId: 'com.mysql', artifactId: 'mysql-connector-j' },
|
|
38
|
+
r2dbc: { groupId: 'io.asyncer', artifactId: 'r2dbc-mysql' },
|
|
39
|
+
},
|
|
40
|
+
postgresql: {
|
|
41
|
+
jdbc: { groupId: 'org.postgresql', artifactId: 'postgresql' },
|
|
42
|
+
r2dbc: { groupId: 'org.postgresql', artifactId: 'r2dbc-postgresql' },
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
export const getDatabaseDriverForDatabase = (databaseType) => databaseArtifactForDB[databaseType];
|
|
25
46
|
export const getCommonMavenDefinition = ({ javaDependencies }) => ({
|
|
26
47
|
properties: [
|
|
27
48
|
{ property: 'jaxb-runtime.version', value: javaDependencies['jaxb-runtime'] },
|
|
@@ -98,34 +119,34 @@ export const getDatabaseTypeMavenDefinition = (databaseType, { inProfile }) => {
|
|
|
98
119
|
mariadb: {
|
|
99
120
|
jdbc: {
|
|
100
121
|
dependencies: [
|
|
101
|
-
{ inProfile,
|
|
122
|
+
{ inProfile, ...databaseArtifactForDB.mariadb.jdbc },
|
|
102
123
|
{ groupId: 'org.testcontainers', artifactId: 'mariadb', scope: 'test' },
|
|
103
124
|
],
|
|
104
125
|
},
|
|
105
126
|
r2dbc: {
|
|
106
|
-
dependencies: [{ inProfile,
|
|
127
|
+
dependencies: [{ inProfile, ...databaseArtifactForDB.mariadb.r2dbc }],
|
|
107
128
|
},
|
|
108
129
|
},
|
|
109
130
|
mssql: {
|
|
110
131
|
jdbc: {
|
|
111
132
|
dependencies: [
|
|
112
|
-
{ inProfile,
|
|
133
|
+
{ inProfile, ...databaseArtifactForDB.mssql.jdbc },
|
|
113
134
|
{ groupId: 'org.testcontainers', artifactId: 'mssqlserver', scope: 'test' },
|
|
114
135
|
],
|
|
115
136
|
},
|
|
116
137
|
r2dbc: {
|
|
117
|
-
dependencies: [{ inProfile,
|
|
138
|
+
dependencies: [{ inProfile, ...databaseArtifactForDB.mssql.r2dbc }],
|
|
118
139
|
},
|
|
119
140
|
},
|
|
120
141
|
mysql: {
|
|
121
142
|
jdbc: {
|
|
122
143
|
dependencies: [
|
|
123
|
-
{ inProfile,
|
|
144
|
+
{ inProfile, ...databaseArtifactForDB.mysql.jdbc },
|
|
124
145
|
{ groupId: 'org.testcontainers', artifactId: 'mysql', scope: 'test' },
|
|
125
146
|
],
|
|
126
147
|
},
|
|
127
148
|
r2dbc: {
|
|
128
|
-
dependencies: [{ inProfile,
|
|
149
|
+
dependencies: [{ inProfile, ...databaseArtifactForDB.mysql.r2dbc }],
|
|
129
150
|
},
|
|
130
151
|
},
|
|
131
152
|
oracle: {
|
|
@@ -140,12 +161,12 @@ export const getDatabaseTypeMavenDefinition = (databaseType, { inProfile }) => {
|
|
|
140
161
|
postgresql: {
|
|
141
162
|
jdbc: {
|
|
142
163
|
dependencies: [
|
|
143
|
-
{ inProfile,
|
|
164
|
+
{ inProfile, ...databaseArtifactForDB.postgresql.jdbc },
|
|
144
165
|
{ groupId: 'org.testcontainers', artifactId: 'postgresql', scope: 'test' },
|
|
145
166
|
],
|
|
146
167
|
},
|
|
147
168
|
r2dbc: {
|
|
148
|
-
dependencies: [{ inProfile,
|
|
169
|
+
dependencies: [{ inProfile, ...databaseArtifactForDB.postgresql.r2dbc }],
|
|
149
170
|
},
|
|
150
171
|
},
|
|
151
172
|
};
|
|
@@ -75,6 +75,10 @@ const databaseData = {
|
|
|
75
75
|
defaultUsername: 'root',
|
|
76
76
|
constraintNameMaxLength: 64,
|
|
77
77
|
tableNameMaxLength: 64,
|
|
78
|
+
r2dbc: {
|
|
79
|
+
// TODO switch to mariadb if r2dbc-mariadb is reinstated
|
|
80
|
+
protocolSuffix: 'mysql://',
|
|
81
|
+
},
|
|
78
82
|
},
|
|
79
83
|
[MYSQL]: {
|
|
80
84
|
name: 'MySQL',
|
|
@@ -21,27 +21,22 @@ package <%= packageName %>.repository;
|
|
|
21
21
|
import java.util.ArrayList;
|
|
22
22
|
import java.util.Collection;
|
|
23
23
|
import java.util.List;
|
|
24
|
-
import java.util.Map;
|
|
25
|
-
import java.util.Map.Entry;
|
|
26
24
|
import java.util.stream.Stream;
|
|
27
25
|
|
|
28
26
|
import org.springframework.data.domain.Pageable;
|
|
29
27
|
import org.springframework.data.domain.Sort;
|
|
30
|
-
import org.springframework.data.r2dbc.convert.R2dbcConverter;
|
|
31
28
|
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
|
|
32
29
|
import org.springframework.data.r2dbc.core.StatementMapper;
|
|
33
|
-
import org.springframework.data.r2dbc.mapping.OutboundRow;
|
|
34
30
|
import org.springframework.data.r2dbc.query.UpdateMapper;
|
|
31
|
+
import org.springframework.data.relational.core.mapping.RelationalPersistentEntity;
|
|
35
32
|
import org.springframework.data.relational.core.query.Criteria;
|
|
36
33
|
import org.springframework.data.relational.core.sql.Condition;
|
|
37
|
-
import org.springframework.data.relational.core.
|
|
38
|
-
import org.springframework.data.relational.core.sql.Conditions;
|
|
34
|
+
import org.springframework.data.relational.core.sql.Column;
|
|
39
35
|
import org.springframework.data.relational.core.sql.OrderByField;
|
|
40
36
|
import org.springframework.data.relational.core.sql.Select;
|
|
41
37
|
import org.springframework.data.relational.core.sql.SelectBuilder.SelectFromAndJoin;
|
|
42
38
|
import org.springframework.data.relational.core.sql.SelectBuilder.SelectFromAndJoinCondition;
|
|
43
39
|
import org.springframework.data.relational.core.sql.SelectBuilder.SelectOrdered;
|
|
44
|
-
import org.springframework.data.relational.core.sql.SqlIdentifier;
|
|
45
40
|
import org.springframework.data.relational.core.sql.Table;
|
|
46
41
|
import org.springframework.data.relational.core.sql.render.SqlRenderer;
|
|
47
42
|
import org.springframework.r2dbc.core.Parameter;
|
|
@@ -240,11 +235,57 @@ public class EntityManager {
|
|
|
240
235
|
for (Sort.Order order : sortToUse) {
|
|
241
236
|
|
|
242
237
|
String propertyName = order.getProperty();
|
|
243
|
-
OrderByField orderByField =
|
|
238
|
+
OrderByField orderByField = !propertyName.contains(".")
|
|
239
|
+
? OrderByField.from(table.column(propertyName).as(EntityManager.ALIAS_PREFIX + propertyName))
|
|
240
|
+
: createOrderByField(propertyName);
|
|
244
241
|
|
|
245
242
|
fields.add(order.isAscending() ? orderByField.asc() : orderByField.desc());
|
|
246
243
|
}
|
|
247
244
|
|
|
248
245
|
return fields;
|
|
249
246
|
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Creates an OrderByField instance for sorting a query by the specified property.
|
|
250
|
+
*
|
|
251
|
+
* @param propertyName The full property name in the format "tableName.columnName".
|
|
252
|
+
* @return An OrderByField instance for sorting by the specified property.
|
|
253
|
+
*/
|
|
254
|
+
private static OrderByField createOrderByField(String propertyName) {
|
|
255
|
+
// Split the propertyName into table name and column name
|
|
256
|
+
String[] parts = propertyName.split("\\.");
|
|
257
|
+
String tableName = parts[0];
|
|
258
|
+
String columnName = parts[1];
|
|
259
|
+
|
|
260
|
+
// Create and return an OrderByField instance
|
|
261
|
+
return OrderByField.from(
|
|
262
|
+
// Create a column with the given name and alias it with the table name and column name
|
|
263
|
+
Column.aliased(
|
|
264
|
+
columnName,
|
|
265
|
+
// Create a table alias with the same name as the table
|
|
266
|
+
Table.aliased(camelCaseToSnakeCase(tableName), tableName),
|
|
267
|
+
// Use a composite alias of "tableName_columnName"
|
|
268
|
+
String.format("%s_%s", tableName, columnName)
|
|
269
|
+
)
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Converts a camel case string to snake case.
|
|
275
|
+
*
|
|
276
|
+
* @param input The camel case string to be converted to snake case.
|
|
277
|
+
* @return The input string converted to snake case.
|
|
278
|
+
*/
|
|
279
|
+
public static String camelCaseToSnakeCase(String input) {
|
|
280
|
+
// Regular Expression
|
|
281
|
+
String regex = "([a-z])([A-Z]+)";
|
|
282
|
+
|
|
283
|
+
// Replacement string
|
|
284
|
+
String replacement = "$1_$2";
|
|
285
|
+
|
|
286
|
+
// Replace the given regex
|
|
287
|
+
// with replacement string
|
|
288
|
+
// and convert it to lower case.
|
|
289
|
+
return input.replaceAll(regex, replacement).toLowerCase();
|
|
290
|
+
}
|
|
250
291
|
}
|