Skip to content

Commit 03d6911

Browse files
authored
fix: Add entity graph at findByOrganizationIdAndNav (#511)
1 parent 8fd4f6b commit 03d6911

File tree

8 files changed

+914
-788
lines changed

8 files changed

+914
-788
lines changed

openapi/generated.openapi.json

Lines changed: 798 additions & 781 deletions
Large diffs are not rendered by default.

openapi/p4pa-debt-position.openapi.yaml

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,57 @@ paths:
161161
application/json:
162162
schema:
163163
$ref: '#/components/schemas/DebtPositionErrorDTO'
164+
/debt-positions/by-nav/{organizationId}/{nav}:
165+
get:
166+
tags:
167+
- debt-position
168+
operationId: getDebtPositionsByOrganizationIdAndNav
169+
parameters:
170+
- name: organizationId
171+
in: path
172+
required: true
173+
schema:
174+
type: integer
175+
format: int64
176+
- name: nav
177+
in: path
178+
required: true
179+
schema:
180+
type: string
181+
- name: debtPositionOrigin
182+
in: query
183+
required: false
184+
schema:
185+
type: array
186+
items:
187+
$ref: "#/components/schemas/DebtPositionOrigin"
188+
responses:
189+
"200":
190+
description: Ok
191+
content:
192+
application/json:
193+
schema:
194+
type: array
195+
items:
196+
$ref: "#/components/schemas/DebtPositionDTO"
197+
"400":
198+
description: Invalid request
199+
content:
200+
application/json:
201+
schema:
202+
$ref: '#/components/schemas/DebtPositionErrorDTO'
203+
"404":
204+
description: Not Found
205+
content:
206+
application/json:
207+
schema:
208+
$ref: '#/components/schemas/DebtPositionErrorDTO'
209+
'500':
210+
description: Server Error
211+
content:
212+
application/json:
213+
schema:
214+
$ref: '#/components/schemas/DebtPositionErrorDTO'
164215
/debt-positions/by-iuv/{organizationId}/{iuv}:
165216
get:
166217
tags:

src/main/java/it/gov/pagopa/pu/debtpositions/controller/DebtPositionControllerImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,12 @@ public ResponseEntity<List<DebtPositionDTO>> getDebtPositionsByOrganizationIdAnd
130130
return ResponseEntity.ok(debtPositionService.getDebtPositionsByOrganizationIdAndIud(organizationId, iud, debtPositionOrigin));
131131
}
132132

133+
@Override
134+
public ResponseEntity<List<DebtPositionDTO>> getDebtPositionsByOrganizationIdAndNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigin) {
135+
log.info("Retrieving DebtPositions by organizationId {} and nav {}", organizationId, nav);
136+
return ResponseEntity.ok(debtPositionService.getDebtPositionsByOrganizationIdAndNav(organizationId, nav, debtPositionOrigin));
137+
}
138+
133139
@Override
134140
public ResponseEntity<List<DebtPositionDTO>> getDebtPositionsByOrganizationIdAndIuv(Long organizationId, String iuv, List<DebtPositionOrigin> debtPositionOrigin) {
135141
log.info("Retrieving DebtPosition by orgId[{}] and iuv [{}]", organizationId, iuv);

src/main/java/it/gov/pagopa/pu/debtpositions/repository/DebtPositionRepository.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,22 @@ Page<DebtPosition> findEntityGraphByIngestionFlowFileIdAndStatusToExclude(Long i
9696
List<InstallmentStatus> statusToExclude,
9797
Pageable pageable);
9898

99+
@RestResource(exported = false)
99100
@Query("""
100101
SELECT d
101-
FROM DebtPosition d
102-
JOIN d.paymentOptions p
103-
JOIN p.installments i
104-
WHERE d.organizationId = :organizationId
102+
FROM DebtPosition d
103+
WHERE d.organizationId = :organizationId
105104
AND (:debtPositionOrigins IS NULL OR d.debtPositionOrigin IN :debtPositionOrigins)
106-
AND i.nav = :nav
107-
""")
108-
List<DebtPosition> findByOrganizationIdAndInstallmentNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigins);
105+
AND EXISTS (
106+
SELECT 1
107+
FROM PaymentOption p
108+
JOIN p.installments i
109+
WHERE p.debtPositionId = d.debtPositionId
110+
AND i.nav = :nav
111+
)
112+
""")
113+
@EntityGraph(value = "completeDebtPosition")
114+
List<DebtPosition> findByOrganizationIdAndNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigins);
109115

110116
@RestResource(exported = false)
111117
@Query("""

src/main/java/it/gov/pagopa/pu/debtpositions/service/DebtPositionService.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public interface DebtPositionService {
2020

2121
PagedDebtPositions getPagedDebtPositionsByIngestionFlowFileId(Long ingestionFlowFileId, List<InstallmentStatus> statusToExclude, Pageable pageable);
2222
DebtPositionDTO getDebtPositionByInstallmentId(Long installmentId);
23+
List<DebtPositionDTO> getDebtPositionsByOrganizationIdAndNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigins);
2324
List<DebtPositionDTO> getDebtPositionsByOrganizationIdAndIuv(Long organizationId, String iuv, List<DebtPositionOrigin> debtPositionOrigin);
2425
List<DebtPositionDTO> getDebtPositionsByOrganizationIdAndIud(Long organizationId, String iud, List<DebtPositionOrigin> debtPositionOrigin);
2526
List<DebtPositionDTO> getDebtPositionsByDebtorFiscalCodeAndDebtorEntityType(String debtorFiscalCode, PersonEntityType debtorEntityType, List<InstallmentStatus> status, List<DebtPositionOrigin> debtPositionOrigin, List<String> debtPositionTypeOrgCodesToExclude, List<Long> organizationIds, LocalDateTimeIntervalFilter dateTimeIntervalFilter);

src/main/java/it/gov/pagopa/pu/debtpositions/service/DebtPositionServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,12 @@ public DebtPositionDTO getDebtPositionByInstallmentId(Long installmentId) {
7777
return mapDebtPosition(debtPosition);
7878
}
7979

80+
@Override
81+
public List<DebtPositionDTO> getDebtPositionsByOrganizationIdAndNav(Long organizationId, String nav, List<DebtPositionOrigin> debtPositionOrigins) {
82+
List<DebtPosition> debtPositions = debtPositionRepository.findByOrganizationIdAndNav(organizationId, nav, debtPositionOrigins);
83+
return debtPositions.stream().map(this::mapDebtPosition).toList();
84+
}
85+
8086
@Override
8187
public List<DebtPositionDTO> getDebtPositionsByOrganizationIdAndIuv(Long organizationId, String iuv, List<DebtPositionOrigin> debtPositionOrigin) {
8288
List<DebtPosition> debtPositions = debtPositionRepository.findEntityGraphByOrganizationIdAndInstallmentIuv(organizationId, iuv, debtPositionOrigin);

src/test/java/it/gov/pagopa/pu/debtpositions/controller/DebtPositionControllerTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,24 @@ void whenGetDebtPositionByInstallmentIdThenOk() throws Exception {
280280
assertEquals(expectedResult, resultResponse);
281281
}
282282

283+
@Test
284+
void whenGetDebtPositionsByOrganizationIdAndNavThenOk() throws Exception {
285+
Long organizationId = 1L;
286+
String nav = "301000000000000245";
287+
288+
List<DebtPositionDTO> expectedResult = List.of(new DebtPositionDTO());
289+
Mockito.when(debtPositionService.getDebtPositionsByOrganizationIdAndNav(organizationId, nav, null)).thenReturn(expectedResult);
290+
291+
MvcResult result = mockMvc.perform(
292+
get("/debt-positions/by-nav/" + organizationId + "/" + nav)
293+
.contentType(MediaType.APPLICATION_JSON_VALUE))
294+
.andExpect(status().isOk())
295+
.andReturn();
296+
297+
List<DebtPositionDTO> resultResponse = jsonMapper.readValue(result.getResponse().getContentAsString(), new TypeReference<ArrayList<DebtPositionDTO>>(){});
298+
assertEquals(expectedResult, resultResponse);
299+
}
300+
283301
@Test
284302
void whenGetDebtPositionsByOrganizationIdAndIuvThenOk() throws Exception {
285303
Long organizationId = 1L;

src/test/java/it/gov/pagopa/pu/debtpositions/service/DebtPositionServiceImplTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,27 @@ void givenNonExistingDebtPositionDetailWhenGetDebtPositionByInstallmentIdThenThr
181181
Mockito.verifyNoInteractions(debtPositionMapperMock);
182182
}
183183

184+
@Test
185+
void givenExistingDebtPositionWhenGetDebtPositionsByOrganizationIdAndNavThenOk() {
186+
// Given
187+
Long organizationId = 1L;
188+
String nav = "301000000000000245";
189+
List<DebtPositionDTO> expectedResult = List.of(podamFactory.manufacturePojo(DebtPositionDTO.class));
190+
List<DebtPosition> debtPositions = List.of(podamFactory.manufacturePojo(DebtPosition.class));
191+
192+
Mockito.when(debtPositionRepositoryMock.findByOrganizationIdAndNav(organizationId, nav, null)).thenReturn(debtPositions);
193+
Mockito.when(debtPositionMapperMock.mapToDto(debtPositions.getFirst())).thenReturn(expectedResult.getFirst());
194+
195+
// When
196+
List<DebtPositionDTO> result = debtPositionService.getDebtPositionsByOrganizationIdAndNav(
197+
organizationId, nav, null);
198+
199+
// Then
200+
Assertions.assertNotNull(result);
201+
Assertions.assertIterableEquals(expectedResult, result);
202+
Mockito.verifyNoMoreInteractions(debtPositionRepositoryMock, debtPositionMapperMock);
203+
}
204+
184205
@Test
185206
void givenExistingDebtPositionWhenGetDebtPositionsByOrganizationIdAndIuvThenOk() {
186207
// Given

0 commit comments

Comments
 (0)