generator-jhipster 7.4.1 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/generators/app/index.js +11 -1
  2. package/generators/cleanup.js +27 -171
  3. package/generators/client/files-angular.js +6 -1
  4. package/generators/client/files-vue.js +5 -1
  5. package/generators/client/index.js +2 -1
  6. package/generators/client/templates/angular/angular.json.ejs +5 -0
  7. package/generators/client/templates/angular/jest.conf.js.ejs +2 -0
  8. package/generators/client/templates/angular/package.json +24 -24
  9. package/generators/client/templates/angular/package.json.ejs +3 -1
  10. package/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs +4 -4
  11. package/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar/password-strength-bar.component.ts.ejs +1 -1
  12. package/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs +4 -4
  13. package/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +4 -4
  14. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.spec.ts.ejs +10 -9
  15. package/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs +1 -1
  16. package/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.spec.ts.ejs +8 -6
  17. package/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +4 -4
  18. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.spec.ts.ejs +4 -4
  19. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/list/user-management.component.ts.ejs +4 -4
  20. package/generators/client/templates/angular/src/main/webapp/app/admin/user-management/update/user-management-update.component.ts.ejs +8 -8
  21. package/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs +14 -3
  22. package/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs +8 -29
  23. package/generators/client/templates/angular/src/main/webapp/app/config/datepicker-adapter.ts.ejs +1 -1
  24. package/generators/client/templates/angular/src/main/webapp/app/config/dayjs.ts.ejs +4 -4
  25. package/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.spec.ts.ejs +14 -9
  26. package/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs +6 -6
  27. package/generators/client/templates/angular/src/main/webapp/app/core/util/parse-links.service.ts.ejs +1 -1
  28. package/generators/client/templates/angular/src/main/webapp/app/entities/entity-navbar-items.ts.ejs +29 -0
  29. package/generators/client/templates/angular/src/main/webapp/app/home/home.component.spec.ts.ejs +14 -4
  30. package/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs +1 -1
  31. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +20 -0
  32. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.spec.ts.ejs +10 -4
  33. package/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.ts.ejs +41 -2
  34. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.spec.ts.ejs +3 -2
  35. package/generators/client/templates/angular/src/main/webapp/app/login/login.component.ts.ejs +4 -4
  36. package/generators/client/templates/angular/src/main/webapp/app/shared/auth/has-any-authority.directive.spec.ts.ejs +4 -4
  37. package/generators/client/templates/angular/src/main/webapp/app/shared/date/duration.pipe.ts.ejs +1 -1
  38. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.spec.ts.ejs +1 -1
  39. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-date.pipe.ts.ejs +1 -1
  40. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.spec.ts.ejs +1 -1
  41. package/generators/client/templates/angular/src/main/webapp/app/shared/date/format-medium-datetime.pipe.ts.ejs +1 -1
  42. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translate.directive.ts.ejs +6 -6
  43. package/generators/client/templates/angular/src/main/webapp/app/shared/language/translation.module.ts.ejs +83 -0
  44. package/generators/client/templates/angular/src/main/webapp/declarations.d.ts.ejs +16 -2
  45. package/generators/client/templates/angular/tsconfig.json.ejs +2 -0
  46. package/generators/client/templates/angular/tsconfig.spec.json.ejs +0 -1
  47. package/generators/client/templates/angular/webpack/proxy.conf.js.ejs +0 -2
  48. package/generators/client/templates/angular/webpack/webpack.custom.js.ejs +0 -16
  49. package/generators/client/templates/angular/webpack/webpack.microfrontend.js.ejs +12 -5
  50. package/generators/client/templates/common/package.json +2 -2
  51. package/generators/client/templates/common/src/main/webapp/robots.txt.ejs +0 -1
  52. package/generators/client/templates/common/src/main/webapp/swagger-ui/index.html.ejs +86 -56
  53. package/generators/client/templates/react/package.json +27 -27
  54. package/generators/client/templates/react/package.json.ejs +2 -0
  55. package/generators/client/templates/react/src/main/webapp/app/config/axios-interceptor.spec.ts.ejs +3 -2
  56. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.scss.ejs +9 -0
  57. package/generators/client/templates/react/src/main/webapp/app/shared/layout/header/header.tsx.ejs +1 -1
  58. package/generators/client/templates/react/src/main/webapp/app/shared/reducers/authentication.spec.ts.ejs +1 -1
  59. package/generators/client/templates/react/webpack/webpack.dev.js.ejs +0 -2
  60. package/generators/client/templates/vue/package.json +22 -22
  61. package/generators/client/templates/vue/package.json.ejs +3 -3
  62. package/generators/client/templates/vue/src/main/webapp/app/account/account.service.ts.ejs +19 -9
  63. package/generators/client/templates/vue/src/main/webapp/app/entities/entities.component.ts.ejs +6 -0
  64. package/generators/client/templates/vue/src/main/webapp/app/entities/user/{user.oauth2.service.ts.ejs → user.service.ts.ejs} +1 -1
  65. package/generators/client/templates/vue/src/main/webapp/app/main.ts.ejs +0 -8
  66. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management-edit.component.spec.ts.ejs +4 -4
  67. package/generators/client/templates/vue/src/test/javascript/spec/app/admin/user-management/user-management.component.spec.ts.ejs +2 -2
  68. package/generators/client/templates/vue/webpack/webpack.common.js.ejs +0 -2
  69. package/generators/common/templates/README.md.jhi.ejs +1 -3
  70. package/generators/common/templates/package.json +3 -3
  71. package/generators/cypress/templates/cypress.json.ejs +9 -2
  72. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/login-page.spec.ts.ejs +3 -14
  73. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/password-page.spec.ts.ejs +33 -39
  74. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/register-page.spec.ts.ejs +52 -62
  75. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/reset-password-page.spec.ts.ejs +2 -10
  76. package/generators/cypress/templates/src/test/javascript/cypress/integration/account/settings-page.spec.ts.ejs +25 -34
  77. package/generators/cypress/templates/src/test/javascript/cypress/integration/administration/administration.spec.ts.ejs +1 -22
  78. package/generators/cypress/templates/src/test/javascript/cypress/support/commands.ts.ejs +38 -6
  79. package/generators/cypress/templates/src/test/javascript/cypress/support/index.ts.ejs +1 -6
  80. package/generators/cypress/templates/src/test/javascript/cypress/support/navbar.ts.ejs +7 -7
  81. package/generators/cypress/templates/src/test/javascript/cypress/support/oauth2.ts.ejs +0 -9
  82. package/generators/docker-compose/templates/realm-config/jhipster-realm.json.ejs +1 -1
  83. package/generators/entity/index.js +45 -3
  84. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/delete/entity-management-delete-dialog.component.spec.ts.ejs +1 -1
  85. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/detail/entity-management-detail.component.html.ejs +1 -1
  86. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs +1 -35
  87. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs +1 -1
  88. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.html.ejs +4 -4
  89. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.spec.ts.ejs +8 -8
  90. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/entity-management.component.ts.ejs +1 -1
  91. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/infinite-scroll-template.ejs +8 -8
  92. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/no-pagination-template.ejs +8 -8
  93. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/list/pagination-template.ejs +8 -8
  94. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/route/entity-management-routing-resolve.service.spec.ts.ejs +15 -6
  95. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.spec.ts.ejs +1 -1
  96. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/service/entity.service.ts.ejs +1 -1
  97. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.spec.ts.ejs +12 -5
  98. package/generators/entity-client/templates/angular/src/main/webapp/app/entities/update/entity-management-update.component.ts.ejs +5 -5
  99. package/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs +1 -1
  100. package/generators/entity-client/templates/common/src/test/javascript/cypress/integration/entity/entity.spec.ts.ejs +14 -37
  101. package/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs +5 -4
  102. package/generators/entity-client/templates/vue/src/main/webapp/app/entities/entity-update.component.ts.ejs +23 -19
  103. package/generators/entity-client/templates/vue/src/test/javascript/spec/app/entities/entity-update.component.spec.ts.ejs +4 -6
  104. package/generators/entity-server/files.js +10 -0
  105. package/generators/entity-server/templates/src/main/java/package/common/get_all_template.ejs +2 -2
  106. package/generators/entity-server/templates/src/main/java/package/common/search_template.ejs +1 -1
  107. package/generators/entity-server/templates/src/main/java/package/domain/Entity.java.jhi.ejs +5 -8
  108. package/generators/entity-server/templates/src/main/java/package/repository/search/EntitySearchRepository.java.ejs +18 -2
  109. package/generators/entity-server/templates/src/main/java/package/repository/search/SortToFieldSortBuilderConverter.java.ejs +24 -0
  110. package/generators/entity-server/templates/src/main/java/package/service/dto/EntityDTO.java.ejs +4 -6
  111. package/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs +2 -2
  112. package/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs +2 -2
  113. package/generators/generator-base-private.js +2 -1
  114. package/generators/generator-base.js +13 -3
  115. package/generators/generator-constants.js +7 -7
  116. package/generators/server/__snapshots__/generator.spec.mjs.snap +16 -15
  117. package/generators/server/cleanup.js +151 -0
  118. package/generators/server/files.js +16 -14
  119. package/generators/server/index.js +34 -23
  120. package/generators/server/templates/build.gradle.ejs +214 -188
  121. package/generators/server/templates/gradle.properties.ejs +8 -8
  122. package/generators/server/templates/npmw +7 -5
  123. package/generators/server/templates/npmw.cmd +12 -7
  124. package/generators/server/templates/pom.xml.ejs +419 -329
  125. package/generators/server/templates/src/main/docker/config/realm-config/jhipster-realm.json.ejs +2 -2
  126. package/generators/server/templates/src/main/java/package/config/LocaleConfiguration.java.ejs +3 -2
  127. package/generators/server/templates/src/main/java/package/config/OpenApiConfiguration.java.ejs +17 -54
  128. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration.java.ejs +5 -5
  129. package/generators/server/templates/src/main/java/package/config/SecurityConfiguration_reactive.java.ejs +3 -5
  130. package/generators/server/templates/src/main/java/package/config/WebConfigurer.java.ejs +0 -2
  131. package/generators/server/templates/src/main/java/package/config/neo4j/Neo4jMigrations.java.ejs +19 -9
  132. package/generators/server/templates/src/main/java/package/repository/AuthorityRepository.java.ejs +2 -2
  133. package/generators/server/templates/src/main/java/package/repository/UserRepository.java.ejs +0 -2
  134. package/generators/server/templates/src/main/java/package/security/jwt/TokenProvider.java.ejs +6 -4
  135. package/generators/server/templates/src/main/java/package/security/oauth2/CustomClaimConverter.java.ejs +2 -2
  136. package/generators/server/templates/src/main/java/package/service/UserService.java.ejs +3 -3
  137. package/generators/server/templates/src/main/java/package/service/dto/UserDTO.java.ejs +6 -6
  138. package/generators/server/templates/src/main/java/package/web/filter/ModifyServersOpenApiFilter.java.ejs +3 -2
  139. package/generators/server/templates/src/main/java/package/web/filter/SpaWebFilter.java.ejs +1 -1
  140. package/generators/server/templates/src/main/java/package/web/rest/PublicUserResource.java.ejs +2 -2
  141. package/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs +2 -2
  142. package/generators/server/templates/src/main/resources/config/application.yml.ejs +17 -3
  143. package/generators/server/templates/src/main/resources/logback-spring.xml.ejs +1 -2
  144. package/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs +2 -6
  145. package/generators/server/templates/src/test/java/package/cucumber/CucumberTestContextConfiguration.java.ejs +2 -3
  146. package/generators/server/templates/src/test/java/package/cucumber/stepdefs/UserStepDefs.java.ejs +41 -6
  147. package/generators/server/templates/src/test/java/package/management/SecurityMetersServiceTests.java.ejs +7 -7
  148. package/generators/server/templates/src/test/java/package/security/jwt/TokenProviderSecurityMetersTests.java.ejs +10 -10
  149. package/generators/server/templates/src/test/java/package/security/oauth2/AuthorizationHeaderUtilTest.java.ejs +1 -1
  150. package/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs +1 -1
  151. package/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs +2 -3
  152. package/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerTest.java.ejs +9 -0
  153. package/generators/server/templates/src/test/resources/junit-platform.properties.ejs +2 -0
  154. package/generators/server/templates/src/test/resources/logback.xml.ejs +1 -1
  155. package/generators/server/templates/src/test/{features → resources/package/features}/gitkeep +0 -0
  156. package/generators/server/templates/src/test/{features → resources/package/features}/user/user.feature.ejs +0 -0
  157. package/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIT.java.ejs +1 -1
  158. package/package.json +9 -9
  159. package/utils/entity.js +1 -5
  160. package/generators/server/templates/src/main/java/package/config/apidocs/GatewaySwaggerResourcesProvider.java.ejs +0 -91
  161. package/generators/server/templates/src/test/java/package/config/apidocs/GatewaySwaggerResourcesProviderTest.java.ejs +0 -79
  162. package/generators/server/templates/src/test/resources/cucumber.properties.ejs +0 -1
@@ -54,16 +54,16 @@
54
54
  page: pageToLoad - 1,
55
55
  query: this.currentSearch,
56
56
  size: this.itemsPerPage,
57
- sort: this.sort()}).subscribe(
58
- (res: HttpResponse<I<%= entityAngularName %>[]>) => {
57
+ sort: this.sort()}).subscribe({
58
+ next: (res: HttpResponse<I<%= entityAngularName %>[]>) => {
59
59
  this.isLoading = false;
60
60
  this.onSuccess(res.body, res.headers, pageToLoad, !dontNavigate);
61
61
  },
62
- () => {
62
+ error: () => {
63
63
  this.isLoading = false;
64
64
  this.onError();
65
65
  }
66
- );
66
+ });
67
67
  return;
68
68
  }
69
69
  <%_ } _%>
@@ -71,16 +71,16 @@
71
71
  this.<%= entityInstance %>Service.query({
72
72
  page: pageToLoad - 1,
73
73
  size: this.itemsPerPage,
74
- sort: this.sort()}).subscribe(
75
- (res: HttpResponse<I<%= entityAngularName %>[]>) => {
74
+ sort: this.sort()}).subscribe({
75
+ next: (res: HttpResponse<I<%= entityAngularName %>[]>) => {
76
76
  this.isLoading = false;
77
77
  this.onSuccess(res.body, res.headers, pageToLoad, !dontNavigate);
78
78
  },
79
- () => {
79
+ error: () => {
80
80
  this.isLoading = false;
81
81
  this.onError();
82
82
  }
83
- );
83
+ });
84
84
  }
85
85
 
86
86
  <%_ if (searchEngine) { _%>
@@ -19,12 +19,11 @@
19
19
  <%_
20
20
  const tsKeyId = generateTestEntityId(primaryKey.type);
21
21
  _%>
22
- jest.mock('@angular/router');
23
-
24
22
  import { TestBed } from '@angular/core/testing';
25
23
  import { HttpResponse } from '@angular/common/http';
26
24
  import { HttpClientTestingModule } from '@angular/common/http/testing';
27
- import { ActivatedRouteSnapshot, Router } from '@angular/router';
25
+ import { ActivatedRouteSnapshot, ActivatedRoute, Router, convertToParamMap } from '@angular/router';
26
+ import { RouterTestingModule } from '@angular/router/testing';
28
27
  import { of } from 'rxjs';
29
28
 
30
29
  import { I<%= entityAngularName %>, <%= entityAngularName %> } from '../<%= entityFileName %>.model';
@@ -41,11 +40,21 @@ describe('<%= entityAngularName %> routing resolve service', () => {
41
40
 
42
41
  beforeEach(() => {
43
42
  TestBed.configureTestingModule({
44
- imports: [HttpClientTestingModule],
45
- providers: [Router, ActivatedRouteSnapshot],
43
+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])],
44
+ providers: [
45
+ {
46
+ provide: ActivatedRoute,
47
+ useValue: {
48
+ snapshot: {
49
+ paramMap: convertToParamMap({})
50
+ },
51
+ },
52
+ },
53
+ ],
46
54
  });
47
55
  mockRouter = TestBed.inject(Router);
48
- mockActivatedRouteSnapshot = TestBed.inject(ActivatedRouteSnapshot);
56
+ jest.spyOn(mockRouter, 'navigate').mockImplementation(() => Promise.resolve(true));
57
+ mockActivatedRouteSnapshot = TestBed.inject(ActivatedRoute).snapshot;
49
58
  routingResolveService = TestBed.inject(<%= entityAngularName %>RoutingResolveService);
50
59
  service = TestBed.inject(<%= entityAngularName %>Service);
51
60
  result<%= entityAngularName %> = undefined;
@@ -25,7 +25,7 @@ _%>
25
25
  import { TestBed } from '@angular/core/testing';
26
26
  import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
27
27
  <%_ if (fieldsContainDate) { _%>
28
- import * as dayjs from 'dayjs';
28
+ import dayjs from 'dayjs/esm';
29
29
  <%_ } _%>
30
30
 
31
31
  <%_ if (fieldsContainDate) { _%>
@@ -27,7 +27,7 @@ import { HttpClient, HttpResponse } from '@angular/common/http';
27
27
  import { Observable } from 'rxjs';
28
28
  <%_ if (fieldsContainDate) { _%>
29
29
  import { map } from 'rxjs/operators';
30
- import * as dayjs from 'dayjs';
30
+ import dayjs from 'dayjs/esm';
31
31
  <%_ } _%>
32
32
 
33
33
  import { isPresent } from 'app/core/util/operators';
@@ -25,14 +25,13 @@ const allRelationshipsByEntityNeedingOptions = Object
25
25
  const testEntityPrimaryKey0 = generateTestEntityPrimaryKey(primaryKey, 0);
26
26
  const testEntityPrimaryKey1 = generateTestEntityPrimaryKey(primaryKey, 1);
27
27
  _%>
28
- jest.mock('@angular/router');
29
-
30
28
  import { ComponentFixture, TestBed } from '@angular/core/testing';
31
29
  import { HttpResponse } from '@angular/common/http';
32
30
  import { HttpClientTestingModule } from '@angular/common/http/testing';
33
31
  import { FormBuilder } from '@angular/forms';
34
32
  import { ActivatedRoute } from '@angular/router';
35
- import { of, Subject } from 'rxjs';
33
+ import { RouterTestingModule } from '@angular/router/testing';
34
+ import { of, Subject, from } from 'rxjs';
36
35
 
37
36
  import { <%= entityAngularName %>Service } from '../service/<%= entityFileName %>.service';
38
37
  import { I<%= entityAngularName %>, <%= entityAngularName %> } from '../<%= entityFileName %>.model';
@@ -62,9 +61,17 @@ describe('<%= entityAngularName %> Management Update Component', () => {
62
61
 
63
62
  beforeEach(() => {
64
63
  TestBed.configureTestingModule({
65
- imports: [HttpClientTestingModule],
64
+ imports: [HttpClientTestingModule, RouterTestingModule.withRoutes([])],
66
65
  declarations: [<%= entityAngularName %>UpdateComponent],
67
- providers: [FormBuilder, ActivatedRoute],
66
+ providers: [
67
+ FormBuilder,
68
+ {
69
+ provide: ActivatedRoute,
70
+ useValue: {
71
+ params: from([{}]),
72
+ },
73
+ },
74
+ ]
68
75
  })
69
76
  .overrideTemplate(<%= entityAngularName %>UpdateComponent, '')
70
77
  .compileComponents();
@@ -43,7 +43,7 @@ import { Observable } from 'rxjs';
43
43
  import { finalize<% if (relationships.some(rel => rel.ownerSide === true)) { %>, map<% } %> } from 'rxjs/operators';
44
44
 
45
45
  <%_ if (fieldsContainInstant || fieldsContainZonedDateTime) { _%>
46
- import * as dayjs from 'dayjs';
46
+ import dayjs from 'dayjs/esm';
47
47
  import { DATE_TIME_FORMAT } from 'app/config/input.constants';
48
48
  <%_ } _%>
49
49
 
@@ -239,10 +239,10 @@ _%>
239
239
  <%_ } _%>
240
240
 
241
241
  protected subscribeToSaveResponse(result: Observable<HttpResponse<I<%= entityAngularName %>>>): void {
242
- result.pipe(finalize(() => this.onSaveFinalize())).subscribe(
243
- () => this.onSaveSuccess(),
244
- () => this.onSaveError()
245
- );
242
+ result.pipe(finalize(() => this.onSaveFinalize())).subscribe({
243
+ next: () => this.onSaveSuccess(),
244
+ error: () => this.onSaveError()
245
+ });
246
246
  }
247
247
 
248
248
  protected onSaveSuccess(): void {
@@ -42,7 +42,7 @@ import {
42
42
  <%_ } _%>
43
43
  } from './<%= entityFileName %>.page-object';
44
44
  <%_ if (fieldsContainBlobOrImage) { _%>
45
- import * as path from 'path';
45
+ import path from 'path';
46
46
  <%_ } _%>
47
47
 
48
48
  const expect = chai.expect;
@@ -48,8 +48,8 @@ describe('<%= entityClass %> e2e test', () => {
48
48
 
49
49
  const <%= entityInstance %>PageUrl = '/<%= entityPage %>';
50
50
  const <%= entityInstance %>PageUrlPattern = new RegExp('/<%= entityPage %>(\\?.*)?$');
51
- const username = Cypress.env('E2E_USERNAME') ?? 'admin';
52
- const password = Cypress.env('E2E_PASSWORD') ?? 'admin';
51
+ const username = Cypress.env('E2E_USERNAME') ?? 'user';
52
+ const password = Cypress.env('E2E_PASSWORD') ?? 'user';
53
53
  const <%= entityInstance %>Sample = <%- JSON.stringify(generateTestEntity(sampleFields.map(field => field.reference))) %>;
54
54
 
55
55
  let <%= entityInstance %>: any;
@@ -57,30 +57,9 @@ describe('<%= entityClass %> e2e test', () => {
57
57
  <%_ if (skipCreateTest) { _%>// <%_ } _%>let <%= otherEntity.entityInstance %>: any;
58
58
  <%_ } _%>
59
59
 
60
- <%_ if (authenticationTypeOauth2) { _%>
61
60
  beforeEach(() => {
62
- cy.getOauth2Data();
63
- cy.get('@oauth2Data').then(oauth2Data => {
64
- cy.oauthLogin(oauth2Data, username, password);
65
- });
66
- cy.intercept('GET', '/<%= baseApi + entityApiUrl %>').as('entitiesRequest');
67
- cy.visit('');
68
- cy.get(entityItemSelector).should('exist');
69
- });
70
-
71
- beforeEach(() => {
72
- Cypress.Cookies.preserveOnce('XSRF-TOKEN', 'JSESSIONID');
73
- })
74
- <%_ } else { _%>
75
- before(() => {
76
- cy.window().then((win) => {
77
- win.sessionStorage.clear()
78
- });
79
- cy.visit('');
80
61
  cy.login(username, password);
81
- cy.get(entityItemSelector).should('exist');
82
62
  });
83
- <%_ } _%>
84
63
 
85
64
  <%_ if (requiredOtherEntities.length > 0) { _%>
86
65
  <%_ if (skipCreateTest) { _%>
@@ -159,13 +138,6 @@ describe('<%= entityClass %> e2e test', () => {
159
138
  */
160
139
  <%_ } _%>
161
140
 
162
- <%_ } _%>
163
- <%_ if (authenticationTypeOauth2) { _%>
164
-
165
- afterEach(() => {
166
- cy.oauthLogout();
167
- cy.clearCache();
168
- });
169
141
  <%_ } _%>
170
142
 
171
143
  it('<%= entityClassPlural %> menu should load <%= entityClassPlural %> page', () => {
@@ -191,11 +163,11 @@ describe('<%= entityClass %> e2e test', () => {
191
163
  });
192
164
 
193
165
  it('should load create <%= entityClass %> page', () => {
194
- cy.get(entityCreateButtonSelector).click({force: true});
166
+ cy.get(entityCreateButtonSelector).click();
195
167
  cy.url().should('match', new RegExp('/<%= entityPage %>/new$'));
196
168
  cy.getEntityCreateUpdateHeading('<%= entityClass %>');
197
169
  cy.get(entityCreateSaveButtonSelector).should('exist');
198
- cy.get(entityCreateCancelButtonSelector).click({force: true});
170
+ cy.get(entityCreateCancelButtonSelector).click();
199
171
  cy.wait('@entitiesRequest').then(({ response }) => {
200
172
  expect(response!.statusCode).to.equal(200);
201
173
  });
@@ -213,7 +185,7 @@ describe('<%= entityClass %> e2e test', () => {
213
185
  cy.authenticatedRequest({
214
186
  method: 'POST',
215
187
  url: '/<%= baseApi + entityApiUrl %>',
216
- <% if (requiredRelationships.length > 0) { %>
188
+ <%_ if (requiredRelationships.length > 0) { _%>
217
189
  body: {
218
190
  ...<%= entityInstance %>Sample,
219
191
  <%_ for (relationship of requiredRelationships) { _%>
@@ -234,6 +206,11 @@ describe('<%= entityClass %> e2e test', () => {
234
206
  },
235
207
  {
236
208
  statusCode: 200,
209
+ <%_ if (!paginationNo) { _%>
210
+ headers: {
211
+ link: '<http://localhost/<%= baseApi + entityApiUrl %>?page=0&size=20>; rel="last",<http://localhost/<%= baseApi + entityApiUrl %>?page=0&size=20>; rel="first"',
212
+ },
213
+ <%_ } _%>
237
214
  body: [<%= entityInstance %>],
238
215
  }
239
216
  ).as('entitiesRequestInternal');
@@ -263,7 +240,7 @@ describe('<%= entityClass %> e2e test', () => {
263
240
  it('detail button click should load details <%= entityClass %> page', () => {
264
241
  cy.get(entityDetailsButtonSelector).first().click();
265
242
  cy.getEntityDetailsHeading('<%= entityInstance %>');
266
- cy.get(entityDetailsBackButtonSelector).click({force: true});
243
+ cy.get(entityDetailsBackButtonSelector).click();
267
244
  cy.wait('@entitiesRequest').then(({ response }) => {
268
245
  expect(response!.statusCode).to.equal(200);
269
246
  });
@@ -275,7 +252,7 @@ describe('<%= entityClass %> e2e test', () => {
275
252
  cy.get(entityEditButtonSelector).first().click();
276
253
  cy.getEntityCreateUpdateHeading('<%= entityClass %>');
277
254
  cy.get(entityCreateSaveButtonSelector).should('exist');
278
- cy.get(entityCreateCancelButtonSelector).click({force: true});
255
+ cy.get(entityCreateCancelButtonSelector).click();
279
256
  cy.wait('@entitiesRequest').then(({ response }) => {
280
257
  expect(response!.statusCode).to.equal(200);
281
258
  });
@@ -291,7 +268,7 @@ describe('<%= entityClass %> e2e test', () => {
291
268
  cy.wait('@dialogDeleteRequest');
292
269
  <%_ } _%>
293
270
  cy.getEntityDeleteDialogHeading('<%= entityInstance %>').should('exist');
294
- cy.get(entityConfirmDeleteButtonSelector).click({force: true});
271
+ cy.get(entityConfirmDeleteButtonSelector).click();
295
272
  cy.wait('@deleteEntityRequest').then(({ response }) => {
296
273
  expect(response!.statusCode).to.equal(204);
297
274
  });
@@ -311,7 +288,7 @@ describe('<%= entityClass %> e2e test', () => {
311
288
  describe('new <%= entityClass %> page', () => {
312
289
  beforeEach(() => {
313
290
  cy.visit(`${<%= entityInstance %>PageUrl}`);
314
- cy.get(entityCreateButtonSelector).click({force: true});
291
+ cy.get(entityCreateButtonSelector).click();
315
292
  cy.getEntityCreateUpdateHeading('<%= entityClass %>');
316
293
  });
317
294
 
@@ -167,8 +167,9 @@ export const <%= entityReactName %>Slice = createEntitySlice({
167
167
  searchEntities,
168
168
  <%_ } _%>
169
169
  ), (state, action) => {
170
+ const { data<% if (!paginationNo) { %>, headers<% } %> } = action.payload;
170
171
  <%_ if (paginationInfiniteScroll) { _%>
171
- const links = parseHeaderForLinks(action.payload.headers.link);
172
+ const links = parseHeaderForLinks(headers.link);
172
173
  <%_ } _%>
173
174
 
174
175
  return {
@@ -177,14 +178,14 @@ export const <%= entityReactName %>Slice = createEntitySlice({
177
178
  <%_ if (paginationInfiniteScroll) { _%>
178
179
  <%_ if (!databaseTypeCassandra) { _%>
179
180
  links,
180
- entities: loadMoreDataWhenScrolled(state.entities, action.payload.data, links),
181
+ entities: loadMoreDataWhenScrolled(state.entities, data, links),
181
182
  <%_ } _%>
182
183
  <%_ } else { _%>
183
- entities: action.payload.data,
184
+ entities: data,
184
185
  <%_ } _%>
185
186
  <%_ if (!paginationNo) { _%>
186
187
  <%_ if (!databaseTypeCassandra) { _%>
187
- totalItems: parseInt(action.payload.headers['x-total-count'], 10)
188
+ totalItems: parseInt(headers['x-total-count'], 10)
188
189
  <%_ } _%>
189
190
  <%_ } _%>
190
191
  };
@@ -66,16 +66,16 @@ import AlertService from '@/shared/alert/alert.service';
66
66
  hasManyToMany = true;
67
67
  } _%>
68
68
  <%_ if (!importEntitiesSeen.includes(otherEntityAngularName)) { _%>
69
- <% if (relationship.otherEntityUser && !authenticationTypeOauth2) { %>
70
- import UserService from '@/admin/user-management/user-management.service';
71
- <% } else if (relationship.otherEntityUser && authenticationTypeOauth2) { %>
72
- import UserOAuth2Service from '@/entities/user/user.oauth2.service';
73
- <% } else if (!relationship.otherEntityUser) { %>
69
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
70
+ import UserService from '@/entities/user/user.service';
71
+ <% } else { %>
74
72
  import <%= otherEntityAngularName %>Service from '@/entities/<%= otherEntityClientRootFolder %><%= otherEntityFolderName %>/<%= otherEntityFileName %>.service';
75
73
  import { I<%= otherEntityAngularName %> } from '@/shared/model/<%= otherEntityModelName %>.model';
76
- <% } %>
74
+ <% } %>
75
+ <%_ } _%>
76
+ <%_ importEntitiesSeen.push(otherEntityAngularName); _%>
77
+ <%_ } _%>
77
78
  <%_ } _%>
78
- <%_ importEntitiesSeen.push(otherEntityAngularName); } } _%>
79
79
  import { I<%= entityAngularName %>, <%= entityAngularName %> } from '@/shared/model/<%= entityModelFileName %>.model';
80
80
  import <%= entityAngularName %>Service from './<%= entityFileName %>.service';
81
81
  <%_ const enumImports = generateEntityClientEnumImports(fields); _%>
@@ -142,16 +142,18 @@ export default class <%= entityAngularName %>Update extends <% if (fieldsContain
142
142
  const otherEntityAngularName = relationship.otherEntityAngularName;
143
143
  _%>
144
144
  <%_ if (!entitiesSeen.includes(otherEntityAngularName)) { %>
145
- <%_ if (otherEntityAngularName === 'User' && authenticationType === 'oauth2') { _%>
146
- @Inject('userOAuth2Service') private userOAuth2Service: () => UserOAuth2Service;
147
- <%_ } else {_%>
145
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
146
+ @Inject('userService') private userService: () => UserService;
147
+ <% } else { %>
148
148
  @Inject('<%= otherEntityName %>Service') private <%= otherEntityName %>Service: () => <%= otherEntityAngularName %>Service;
149
- <%_ } _%>
150
- <%_ } _%>
151
- <%_ if (!entitiesSeen.includes(otherEntityNamePlural)) { %>
149
+ <%_ } _%>
150
+ <%_ } _%>
151
+ <%_ if (!entitiesSeen.includes(otherEntityNamePlural)) { %>
152
152
  public <%= otherEntityNamePlural %> : <% if (otherEntityAngularName === 'User') { %>Array<any><%_ } else { _%>I<%= otherEntityAngularName %>[]<%_ } _%> = [];
153
+ <%_ } _%>
154
+ <%_ entitiesSeen.push(otherEntityAngularName);entitiesSeen.push(otherEntityNamePlural); _%>
153
155
  <%_ } _%>
154
- <%_ entitiesSeen.push(otherEntityAngularName);entitiesSeen.push(otherEntityNamePlural); } } _%>
156
+ <%_ } _%>
155
157
  <%_ enumImports.forEach( (importedPath, importedType) => { _%>
156
158
  public <%- _.lowerFirst(importedType) %>Values : string[] = Object.keys(<%- importedType %>);
157
159
  <%_ }); _%>
@@ -317,14 +319,16 @@ _%>
317
319
  if (!entitiesSet.has(otherEntityName)) {
318
320
  entitiesSet.add(otherEntityName);
319
321
  _%>
320
- <%_ if (otherEntityAngularName === 'User' && authenticationType === 'oauth2') { _%>
321
- this.userOAuth2Service().retrieve().then((res) => {
322
- <%_ } else {_%>
322
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
323
+ this.userService().retrieve().then((res) => {
324
+ <%_ } else { _%>
323
325
  this.<%= otherEntityName %>Service().retrieve().then((res) => {
324
- <%_ } _%>
326
+ <%_ } _%>
325
327
  this.<%= otherEntityNamePlural %> = res.data;
326
328
  });
327
- <%_ } } } _%>
329
+ <%_ } _%>
330
+ <%_ } _%>
331
+ <%_ } _%>
328
332
  }
329
333
 
330
334
  <%_ if (hasManyToMany) { _%>
@@ -45,10 +45,8 @@ import <%= entityAngularName %>Service from '@/entities/<%= entityFolderName %>/
45
45
  const otherEntityFolderName = relationship.otherEntityFileName;
46
46
  const otherEntityClientRootFolder = relationship.otherEntityClientRootFolder; _%>
47
47
  <%_ if (!importEntitiesSeen.includes(otherEntityAngularName)) { _%>
48
- <% if (relationship.otherEntityUser && !authenticationTypeOauth2) { %>
49
- import UserService from '@/admin/user-management/user-management.service';
50
- <%_ } else if (relationship.otherEntityUser && authenticationTypeOauth2) { _%>
51
- import UserOAuth2Service from '@/entities/user/user.oauth2.service';
48
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
49
+ import UserService from '@/entities/user/user.service';
52
50
  <% } else if (!relationship.otherEntityUser) { %>
53
51
  import <%= otherEntityAngularName %>Service from '@/entities/<%= otherEntityClientRootFolder %><%= otherEntityFolderName %>/<%= otherEntityFileName %>.service';
54
52
  <%_ } _%>
@@ -101,8 +99,8 @@ describe('Component Tests', () => {
101
99
  const otherEntityName = relationship.otherEntityName;
102
100
  const otherEntityAngularName = relationship.otherEntityAngularName; _%>
103
101
  <%_ if (!entitiesSeen.includes(otherEntityAngularName)) { %>
104
- <%_ if (relationship.otherEntityUser && authenticationTypeOauth2) { _%>
105
- userOAuth2Service: () => new UserOAuth2Service(),
102
+ <% if (relationship.otherEntityUser && (!skipUserManagement || authenticationTypeOauth2)) { %>
103
+ userService: () => new UserService(),
106
104
  <%_ } else { _%>
107
105
  <%= otherEntityName %>Service: () =>
108
106
  sinon.createStubInstance<<%= otherEntityAngularName %>Service>(<%= otherEntityAngularName %>Service, {
@@ -172,6 +172,16 @@ const serverFiles = {
172
172
  },
173
173
  ],
174
174
  },
175
+ {
176
+ condition: generator => generator.searchEngine === ELASTICSEARCH && !generator.embedded && !generator.paginationNo,
177
+ path: SERVER_MAIN_SRC_DIR,
178
+ templates: [
179
+ {
180
+ file: 'package/repository/search/SortToFieldSortBuilderConverter.java',
181
+ renameTo: generator => `${generator.entityAbsoluteFolder}/repository/search/SortToFieldSortBuilderConverter.java`,
182
+ },
183
+ ],
184
+ },
175
185
  {
176
186
  condition: generator => !generator.reactive && !generator.embedded && generator.databaseType !== COUCHBASE,
177
187
  path: SERVER_MAIN_SRC_DIR,
@@ -25,7 +25,7 @@
25
25
  const reactiveEntityToDto = (dtoMapstruct && !viaService) ? `.map(${entityToDtoReference})` : '';
26
26
  _%>
27
27
  <%_ if (jpaMetamodelFiltering) { _%>
28
- public ResponseEntity<List<<%= instanceType %>>> getAll<%= entityClassPlural %>(<%= entityClass %>Criteria criteria<% if (!paginationNo) { %>, Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %><% } %>) {
28
+ public ResponseEntity<List<<%= instanceType %>>> getAll<%= entityClassPlural %>(<%= entityClass %>Criteria criteria<% if (!paginationNo) { %>, @org.springdoc.api.annotations.ParameterObject Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %><% } %>) {
29
29
  log.debug("REST request to get <%= entityClassPlural %> by criteria: {}", criteria);
30
30
  <%_ if (paginationNo) { _%>
31
31
  List<<%= instanceType %>> entityList = <%= entityInstance %>QueryService.findByCriteria(criteria);
@@ -65,7 +65,7 @@ _%>
65
65
  return <%= entityInstance %>Repository.<% if (relationshipsContainEagerLoad) { %>findAllWithEagerRelationships<% } else { %>findAll<% } %>()<% if (reactive) { %>.collectList()<% } %>;
66
66
  <%_ } _%>
67
67
  <%_ } else { _%>
68
- public <% if (reactive) { %>Mono<ResponseEntity<List<<%= instanceType %>>>><% } else { %>ResponseEntity<List<<%= instanceType %>>><% } %> getAll<%= entityClassPlural %>(Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %><% if (fieldsContainNoOwnerOneToOne) { %>, @RequestParam(required = false) String filter<% } %><% if (relationshipsContainEagerLoad) { %>, @RequestParam(required = false, defaultValue = "false") boolean eagerload<% } %>) {<%- include('get_all_stream_template', {viaService: viaService}); -%>
68
+ public <% if (reactive) { %>Mono<ResponseEntity<List<<%= instanceType %>>>><% } else { %>ResponseEntity<List<<%= instanceType %>>><% } %> getAll<%= entityClassPlural %>(@org.springdoc.api.annotations.ParameterObject Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %><% if (fieldsContainNoOwnerOneToOne) { %>, @RequestParam(required = false) String filter<% } %><% if (relationshipsContainEagerLoad) { %>, @RequestParam(required = false, defaultValue = "false") boolean eagerload<% } %>) {<%- include('get_all_stream_template', {viaService: viaService}); -%>
69
69
  log.debug("REST request to get a page of <%= entityClassPlural %>");
70
70
  <%_ if (!reactive) { _%>
71
71
  <%_ if (relationshipsContainEagerLoad) { _%>
@@ -27,7 +27,7 @@ if (paginationNo) { %>
27
27
  public <% if (reactive) { %>Mono<<% } %>List<<%= instanceType %>><% if (reactive) { %>><% } %> search<%= entityClassPlural %>(@RequestParam String query) {
28
28
  log.debug("REST request to search <%= entityClassPlural %> for query {}", query);<%- include('search_stream_template', {viaService: viaService, fromResource: true}); -%>
29
29
  <% } if (!paginationNo) { %>
30
- public <% if (reactive) { %>Mono<<% } %>ResponseEntity<<%= listOrFlux %><<%= instanceType %>>><% if (reactive) { %>><% } %> search<%= entityClassPlural %>(@RequestParam String query, Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %>) {
30
+ public <% if (reactive) { %>Mono<<% } %>ResponseEntity<<%= listOrFlux %><<%= instanceType %>>><% if (reactive) { %>><% } %> search<%= entityClassPlural %>(@RequestParam String query, @org.springdoc.api.annotations.ParameterObject Pageable pageable<% if (reactive) { %>, ServerHttpRequest request<% } %>) {
31
31
  log.debug("REST request to search for a page of <%= entityClassPlural %> for query {}", query);
32
32
  <%_ if (!reactive) { _%>
33
33
  <%_ if (viaService) { _%>
@@ -50,11 +50,8 @@ package <%= entityAbsolutePackage %>.domain;
50
50
  <%_ if (relationshipsContainOtherSideIgnore) { _%>
51
51
  import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
52
52
  <%_ } _%>
53
- <%_ if (!dtoMapstruct && typeof javadoc !== 'undefined') { _%>
54
- import io.swagger.annotations.ApiModel;
55
- <%_ } _%>
56
- <%_ if (!dtoMapstruct && importApiModelProperty) { _%>
57
- import io.swagger.annotations.ApiModelProperty;
53
+ <%_ if (!dtoMapstruct && (typeof javadoc !== 'undefined' || importApiModelProperty)) { _%>
54
+ import io.swagger.v3.oas.annotations.media.Schema;
58
55
  <%_ } _%>
59
56
 
60
57
  import java.io.Serializable;
@@ -91,7 +88,7 @@ import <%= otherEntity.entityAbsoluteClass %>;
91
88
  <%_ } else { _%>
92
89
  <%- formatAsClassJavadoc(javadoc) %>
93
90
  <%_ if (!dtoMapstruct) { _%>
94
- @ApiModel(description = "<%- formatAsApiDescription(javadoc) %>")
91
+ @Schema(description = "<%- formatAsApiDescription(javadoc) %>")
95
92
  <%_ } _%>
96
93
  <%_ } _%>
97
94
  <&- fragments.annotationSection() -&>
@@ -111,7 +108,7 @@ public class <%= persistClass %> implements Serializable {
111
108
  <%- formatAsFieldJavadoc(field.javadoc) %>
112
109
  <%_ } _%>
113
110
  <%_ if (!dtoMapstruct && typeof field.javadoc !== 'undefined') { _%>
114
- @ApiModelProperty(value = "<%- formatAsApiDescription(field.javadoc) %>"<% if (field.fieldValidationRequired) { %>, required = true<% } %>)
111
+ @Schema(description = "<%- formatAsApiDescription(field.javadoc) %>"<% if (field.fieldValidationRequired) { %>, required = true<% } %>)
115
112
  <%_ } _%>
116
113
  <&- fragments.field<%- field.fieldNameCapitalized %>AnnotationSection() -&>
117
114
  private <%= field.javaFieldType %> <%= field.fieldName %>;
@@ -130,7 +127,7 @@ for (relationship of relationships.filter(relationship => !relationship.embedded
130
127
  if (typeof relationship.javadoc !== 'undefined') { _%>
131
128
  <%- formatAsFieldJavadoc(relationship.javadoc) %>
132
129
  <%_ if (!dtoMapstruct) { _%>
133
- @ApiModelProperty(value = "<%- formatAsApiDescription(relationship.javadoc) %>")
130
+ @Schema(description = "<%- formatAsApiDescription(relationship.javadoc) %>")
134
131
  <%_ } _%>
135
132
  <%_ } _%>
136
133
  <&- fragments.relationship<%- relationship.relationshipNameCapitalized %>AnnotationSection() -&>
@@ -29,6 +29,12 @@ import org.springframework.data.domain.Page;
29
29
  import org.springframework.data.domain.PageImpl;
30
30
  <%_ } _%>
31
31
  import org.springframework.data.domain.Pageable;
32
+ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
33
+ import org.elasticsearch.search.sort.FieldSortBuilder;
34
+ import java.util.List;
35
+ import org.springframework.data.domain.PageRequest;
36
+
37
+
32
38
  <%_ } _%>
33
39
  <%_ if (reactive) { _%>
34
40
  import org.springframework.data.elasticsearch.core.ReactiveElasticsearchTemplate;
@@ -72,9 +78,19 @@ class <%= entityClass %>SearchRepositoryInternalImpl implements <%= entityClass
72
78
 
73
79
  @Override
74
80
  public Flux<<%= entityClass %>> search(String query<% if (!paginationNo) { %>, Pageable pageable<% } %>) {
75
- NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryStringQuery(query));
76
81
  <%_ if (!paginationNo) { _%>
77
- nativeSearchQuery.setPageable(pageable);
82
+ List<FieldSortBuilder> builders = new SortToFieldSortBuilderConverter().convert(pageable.getSort());
83
+
84
+ NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder().withQuery(queryStringQuery(query))
85
+ .withPageable(PageRequest.of(pageable.getPageNumber(), pageable.getPageSize()));
86
+
87
+ builders.stream().forEach(builder -> {
88
+ queryBuilder.withSort(builder);
89
+ });
90
+
91
+ NativeSearchQuery nativeSearchQuery = queryBuilder.build();
92
+ <%_ } else { _%>
93
+ NativeSearchQuery nativeSearchQuery = new NativeSearchQuery(queryStringQuery(query));
78
94
  <%_ } _%>
79
95
  return reactiveElasticsearchTemplate
80
96
  .search(nativeSearchQuery, <%= entityClass %>.class)
@@ -0,0 +1,24 @@
1
+ package <%= entityAbsolutePackage %>.repository.search;
2
+
3
+ import org.elasticsearch.search.sort.FieldSortBuilder;
4
+ import org.elasticsearch.search.sort.SortOrder;
5
+ import org.springframework.core.convert.converter.Converter;
6
+ import org.springframework.data.domain.Sort;
7
+
8
+ import java.util.ArrayList;
9
+ import java.util.List;
10
+
11
+ public class SortToFieldSortBuilderConverter implements Converter<Sort, List<FieldSortBuilder>> {
12
+
13
+ @Override
14
+ public List<FieldSortBuilder> convert(Sort sort) {
15
+ List<FieldSortBuilder> builders = new ArrayList<>();
16
+ sort.stream().forEach(order -> {
17
+ String property = order.getProperty() + ".keyword";
18
+ SortOrder sortOrder = SortOrder.fromString(order.getDirection().name());
19
+ builders.add(new FieldSortBuilder(property).order(sortOrder));
20
+
21
+ });
22
+ return builders;
23
+ }
24
+ }
@@ -19,10 +19,8 @@
19
19
  package <%= entityAbsolutePackage %>.service.dto;
20
20
 
21
21
  import java.util.Objects;
22
- <%_ if (typeof javadoc !== 'undefined') { _%>
23
- import io.swagger.annotations.ApiModel;
24
- <%_ } if (importApiModelProperty) { _%>
25
- import io.swagger.annotations.ApiModelProperty;
22
+ <%_ if (typeof javadoc !== 'undefined' || importApiModelProperty) { _%>
23
+ import io.swagger.v3.oas.annotations.media.Schema;
26
24
  <%_ } _%>
27
25
  <%_ if (fieldsContainInstant) { _%>
28
26
  import java.time.Instant;
@@ -68,7 +66,7 @@ import <%= `${otherEntity.entityAbsolutePackage}.service.dto.${otherEntity.dtoCl
68
66
  * A DTO for the {@link <%= entityAbsolutePackage %>.domain.<%= persistClass %>} entity.
69
67
  */
70
68
  <%_ if (typeof javadoc !== 'undefined') { _%>
71
- @ApiModel(description = "<%- formatAsApiDescription(javadoc) %>")
69
+ @Schema(description = "<%- formatAsApiDescription(javadoc) %>")
72
70
  <%_ } _%>
73
71
  public class <%= dtoClass %> implements Serializable {
74
72
 
@@ -85,7 +83,7 @@ _%>
85
83
  <%_ }
86
84
  } _%>
87
85
  <%_ if (reference.doc) { _%>
88
- @ApiModelProperty(value = "<%- formatAsApiDescription(reference.doc) %>"<% if (required) { %>, required = true<% } %>)
86
+ @Schema(description = "<%- formatAsApiDescription(reference.doc) %>"<% if (required) { %>, required = true<% } %>)
89
87
  <%_ } _%>
90
88
  <%_ if (field && field.fieldTypeBytes && databaseTypeSql) { _%>
91
89
  @Lob
@@ -65,7 +65,6 @@ import org.springframework.data.domain.Pageable;
65
65
  import org.springframework.data.domain.PageImpl;
66
66
  <%_ } _%>
67
67
  import org.springframework.http.HttpHeaders;
68
- import org.springframework.http.HttpStatus;
69
68
  <%_ if (reactive) { _%>
70
69
  import org.springframework.http.server.reactive.ServerHttpRequest;
71
70
  <%_ } _%>
@@ -74,7 +73,8 @@ import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
74
73
  <%_ } else { _%>
75
74
  import org.springframework.web.util.UriComponentsBuilder;
76
75
  <%_ } _%>
77
- <%_ } else if (reactive) { _%>
76
+ <%_ } _%>
77
+ <%_ if (reactive || (!jpaMetamodelFiltering && !paginationNo)) { _%>
78
78
  import org.springframework.http.HttpStatus;
79
79
  <%_ } _%>
80
80
  <%_ if (reactive) { _%>