Skip to content

Commit 5f69ba5

Browse files
[SELC-7869] feat: Added new endpoint to retrive onboardingId from taxCode and status
1 parent 39ffcee commit 5f69ba5

File tree

12 files changed

+371
-191
lines changed

12 files changed

+371
-191
lines changed

app/src/main/resources/swagger/api-docs.json

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2263,6 +2263,91 @@
22632263
} ]
22642264
}
22652265
},
2266+
"/v2/institutions/onboardings" : {
2267+
"get" : {
2268+
"tags" : [ "institution-v-2-controller" ],
2269+
"summary" : "Retrieve onboarding information for an institution filtered by tax code and status",
2270+
"description" : "Returns a list of onboarding processes associated with the institution identified by the provided tax code. The results can be filtered by the onboarding status. Each item in the response contains key details such as the onboarding ID, related product, and current status.",
2271+
"operationId" : "getOnboardingInfo",
2272+
"parameters" : [ {
2273+
"name" : "taxCode",
2274+
"in" : "query",
2275+
"required" : true,
2276+
"schema" : {
2277+
"type" : "string"
2278+
}
2279+
}, {
2280+
"name" : "status",
2281+
"in" : "query",
2282+
"required" : true,
2283+
"schema" : {
2284+
"type" : "string"
2285+
}
2286+
} ],
2287+
"responses" : {
2288+
"200" : {
2289+
"description" : "OK",
2290+
"content" : {
2291+
"application/json" : {
2292+
"schema" : {
2293+
"type" : "array",
2294+
"items" : {
2295+
"$ref" : "#/components/schemas/OnboardingResult"
2296+
}
2297+
}
2298+
}
2299+
}
2300+
},
2301+
"400" : {
2302+
"description" : "Bad Request",
2303+
"content" : {
2304+
"application/problem+json" : {
2305+
"schema" : {
2306+
"type" : "object",
2307+
"description" : "Generic problem response"
2308+
}
2309+
}
2310+
}
2311+
},
2312+
"401" : {
2313+
"description" : "Unauthorized",
2314+
"content" : {
2315+
"application/problem+json" : {
2316+
"schema" : {
2317+
"type" : "object",
2318+
"description" : "Generic problem response"
2319+
}
2320+
}
2321+
}
2322+
},
2323+
"404" : {
2324+
"description" : "Not Found",
2325+
"content" : {
2326+
"application/problem+json" : {
2327+
"schema" : {
2328+
"type" : "object",
2329+
"description" : "Generic problem response"
2330+
}
2331+
}
2332+
}
2333+
},
2334+
"500" : {
2335+
"description" : "Internal Server Error",
2336+
"content" : {
2337+
"application/problem+json" : {
2338+
"schema" : {
2339+
"type" : "object",
2340+
"description" : "Generic problem response"
2341+
}
2342+
}
2343+
}
2344+
}
2345+
},
2346+
"security" : [ {
2347+
"bearerAuth" : [ "global" ]
2348+
} ]
2349+
}
2350+
},
22662351
"/v2/institutions/onboarding/recipient-code/verification" : {
22672352
"get" : {
22682353
"tags" : [ "institution-v-2-controller" ],
@@ -4241,6 +4326,20 @@
42414326
}
42424327
}
42434328
},
4329+
"OnboardingResult" : {
4330+
"type" : "object",
4331+
"properties" : {
4332+
"id" : {
4333+
"type" : "string"
4334+
},
4335+
"status" : {
4336+
"type" : "string"
4337+
},
4338+
"productId" : {
4339+
"type" : "string"
4340+
}
4341+
}
4342+
},
42444343
"Billing" : {
42454344
"type" : "object",
42464345
"properties" : {

connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/api/OnboardingMsConnector.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package it.pagopa.selfcare.onboarding.connector.api;
22

3+
import it.pagopa.selfcare.onboarding.connector.model.OnboardingResult;
34
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
45
import it.pagopa.selfcare.onboarding.connector.model.institutions.VerifyAggregateResult;
56
import it.pagopa.selfcare.onboarding.connector.model.onboarding.CheckManagerData;
@@ -53,4 +54,5 @@ public interface OnboardingMsConnector {
5354

5455
void onboardingUsersPgFromIcAndAde(OnboardingData onboardingUserPgRequest);
5556

57+
List<OnboardingResult> onboardingWithFilter(String taxCode, String status);
5658
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package it.pagopa.selfcare.onboarding.connector.model;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class OnboardingResult {
7+
String id;
8+
String status;
9+
String productId;
10+
}

connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImpl.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,18 @@
55
import it.pagopa.selfcare.onboarding.common.InstitutionType;
66
import it.pagopa.selfcare.onboarding.connector.api.OnboardingMsConnector;
77
import it.pagopa.selfcare.onboarding.connector.exceptions.InvalidRequestException;
8+
import it.pagopa.selfcare.onboarding.connector.model.OnboardingResult;
89
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
910
import it.pagopa.selfcare.onboarding.connector.model.institutions.VerifyAggregateResult;
1011
import it.pagopa.selfcare.onboarding.connector.model.onboarding.CheckManagerData;
1112
import it.pagopa.selfcare.onboarding.connector.model.onboarding.OnboardingData;
1213
import it.pagopa.selfcare.onboarding.connector.rest.client.*;
1314
import it.pagopa.selfcare.onboarding.connector.rest.mapper.OnboardingMapper;
14-
import it.pagopa.selfcare.onboarding.generated.openapi.v1.dto.OnboardingGet;
15-
import it.pagopa.selfcare.onboarding.generated.openapi.v1.dto.OnboardingResponse;
16-
import it.pagopa.selfcare.onboarding.generated.openapi.v1.dto.OnboardingStatus;
17-
import it.pagopa.selfcare.onboarding.generated.openapi.v1.dto.ReasonRequest;
15+
import it.pagopa.selfcare.onboarding.generated.openapi.v1.dto.*;
1816
import lombok.extern.slf4j.Slf4j;
1917
import org.springframework.core.io.Resource;
2018
import org.springframework.http.HttpStatus;
19+
import org.springframework.http.ResponseEntity;
2120
import org.springframework.stereotype.Service;
2221
import org.springframework.util.Assert;
2322
import org.springframework.util.StringUtils;
@@ -219,4 +218,26 @@ public void onboardingUsersPgFromIcAndAde(OnboardingData onboardingData) {
219218
msOnboardingApiClient._onboardingUsersPg(onboardingMapper.toOnboardingUserPgRequest(onboardingData));
220219
log.trace("onboardingUsersPgFromIcAndAde end");
221220
}
221+
222+
@Override
223+
public List<OnboardingResult> onboardingWithFilter(String taxCode, String status) {
224+
log.trace("onboardingWithFilter start");
225+
ResponseEntity<OnboardingGetResponse> response = msOnboardingApiClient._getOnboardingWithFilter( null,
226+
null,
227+
null,
228+
null,
229+
null,
230+
null,
231+
null,
232+
null,
233+
status,
234+
null,
235+
taxCode,
236+
null,
237+
null);
238+
List<OnboardingResult> onboardingResults = onboardingMapper.toOnboardingWithFilter(response.getBody());
239+
log.trace("onboardingWithFilter end");
240+
return onboardingResults;
241+
}
242+
222243
}

connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/rest/mapper/OnboardingMapper.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package it.pagopa.selfcare.onboarding.connector.rest.mapper;
22

33

4+
import it.pagopa.selfcare.onboarding.connector.model.OnboardingResult;
45
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
56
import it.pagopa.selfcare.onboarding.connector.model.institutions.VerifyAggregateResult;
67
import it.pagopa.selfcare.onboarding.connector.model.onboarding.*;
@@ -10,6 +11,7 @@
1011
import org.mapstruct.Mapping;
1112
import org.mapstruct.Named;
1213

14+
import java.util.List;
1315
import java.util.Objects;
1416
import java.util.Optional;
1517

@@ -142,4 +144,21 @@ default String setOrigin(Origin origin) {
142144
RecipientCodeStatusResult toRecipientCodeStatusResult(RecipientCodeStatus recipientCodeStatus);
143145

144146
OnboardingUserPgRequest toOnboardingUserPgRequest(OnboardingData onboardingData);
147+
148+
default List<OnboardingResult> toOnboardingWithFilter(OnboardingGetResponse onboardingGetResponse) {
149+
if (onboardingGetResponse == null || onboardingGetResponse.getItems() == null) {
150+
return List.of();
151+
}
152+
153+
return onboardingGetResponse.getItems().stream()
154+
.filter(Objects::nonNull)
155+
.map(current -> {
156+
OnboardingResult onboarding = new OnboardingResult();
157+
onboarding.setId(current.getId());
158+
onboarding.setProductId(current.getProductId());
159+
onboarding.setStatus(current.getStatus());
160+
return onboarding;
161+
})
162+
.toList();
163+
}
145164
}

connector/rest/src/test/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImplTest.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import it.pagopa.selfcare.onboarding.common.InstitutionType;
44
import it.pagopa.selfcare.onboarding.connector.exceptions.InvalidRequestException;
5+
import it.pagopa.selfcare.onboarding.connector.model.OnboardingResult;
56
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
67
import it.pagopa.selfcare.onboarding.connector.model.institutions.Institution;
78
import it.pagopa.selfcare.onboarding.connector.model.institutions.VerifyAggregateResult;
@@ -649,4 +650,61 @@ void verifyOnboardingSubunitCode() {
649650
._verifyOnboardingInfoByFilters(InstitutionType.PA.name(), origin, originId, productId, subunitCode, taxCode);
650651
verifyNoMoreInteractions(msOnboardingApiClient);
651652
}
653+
654+
@Test
655+
void onboardingWithFilterTest() {
656+
// Given
657+
final String taxCode = "taxCode";
658+
final String status = "status";
659+
660+
OnboardingGet onboardingGet = new OnboardingGet();
661+
onboardingGet.setProductId("prod-test");
662+
List<OnboardingGet> onboardingGets = List.of(onboardingGet);
663+
664+
OnboardingGetResponse onboardingGetResponse = new OnboardingGetResponse();
665+
onboardingGetResponse.setItems(onboardingGets);
666+
ResponseEntity<OnboardingGetResponse> responseEntity = ResponseEntity.ok(onboardingGetResponse);
667+
668+
when(msOnboardingApiClient._getOnboardingWithFilter( any(),
669+
any(),
670+
any(),
671+
any(),
672+
any(),
673+
any(),
674+
any(),
675+
any(),
676+
any(),
677+
any(),
678+
any(),
679+
any(),
680+
any())).thenReturn(responseEntity);
681+
682+
OnboardingResult onboardingResult = new OnboardingResult();
683+
onboardingResult.setProductId("product-test");
684+
when(onboardingMapper.toOnboardingWithFilter(responseEntity.getBody()))
685+
.thenReturn(List.of(onboardingResult));
686+
687+
// When
688+
onboardingMsConnector.onboardingWithFilter(taxCode, status);
689+
690+
// Then
691+
verify(msOnboardingApiClient, times(1))
692+
._getOnboardingWithFilter( any(),
693+
any(),
694+
any(),
695+
any(),
696+
any(),
697+
any(),
698+
any(),
699+
any(),
700+
any(),
701+
any(),
702+
any(),
703+
any(),
704+
any());
705+
verify(onboardingMapper, times(1))
706+
.toOnboardingWithFilter(responseEntity.getBody());
707+
verifyNoMoreInteractions(msOnboardingApiClient);
708+
verifyNoMoreInteractions(onboardingMapper);
709+
}
652710
}

core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import it.pagopa.selfcare.onboarding.connector.model.InstitutionLegalAddressData;
44
import it.pagopa.selfcare.onboarding.connector.model.InstitutionOnboardingData;
5+
import it.pagopa.selfcare.onboarding.connector.model.OnboardingResult;
56
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
67
import it.pagopa.selfcare.onboarding.connector.model.institutions.*;
78
import it.pagopa.selfcare.onboarding.connector.model.institutions.infocamere.InstitutionInfoIC;
@@ -55,4 +56,6 @@ public interface InstitutionService {
5556
void onboardingUsersPgFromIcAndAde(OnboardingData onboardingUserPgRequest);
5657

5758
ManagerVerification verifyManager(String taxCode, String companyTaxCode);
59+
60+
List<OnboardingResult> getOnboardingWithFilter(String taxCode, String status);
5861
}

core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImpl.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
11
package it.pagopa.selfcare.onboarding.core;
22

3-
import static io.netty.util.internal.StringUtil.isNullOrEmpty;
4-
import static it.pagopa.selfcare.onboarding.connector.model.user.User.Fields.*;
5-
63
import it.pagopa.selfcare.commons.base.logging.LogUtils;
74
import it.pagopa.selfcare.commons.base.utils.Origin;
85
import it.pagopa.selfcare.onboarding.common.InstitutionType;
96
import it.pagopa.selfcare.onboarding.common.PartyRole;
107
import it.pagopa.selfcare.onboarding.connector.api.*;
118
import it.pagopa.selfcare.onboarding.connector.exceptions.InvalidRequestException;
129
import it.pagopa.selfcare.onboarding.connector.exceptions.ResourceNotFoundException;
13-
import it.pagopa.selfcare.onboarding.connector.model.InstitutionLegalAddressData;
14-
import it.pagopa.selfcare.onboarding.connector.model.InstitutionOnboardingData;
15-
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
16-
import it.pagopa.selfcare.onboarding.connector.model.RelationshipState;
10+
import it.pagopa.selfcare.onboarding.connector.model.*;
1711
import it.pagopa.selfcare.onboarding.connector.model.institutions.*;
1812
import it.pagopa.selfcare.onboarding.connector.model.institutions.infocamere.BusinessInfoIC;
1913
import it.pagopa.selfcare.onboarding.connector.model.institutions.infocamere.InstitutionInfoIC;
@@ -36,7 +30,6 @@
3630
import it.pagopa.selfcare.product.entity.ProductStatus;
3731
import it.pagopa.selfcare.product.exception.ProductNotFoundException;
3832
import it.pagopa.selfcare.product.service.ProductService;
39-
import java.util.*;
4033
import jakarta.validation.ValidationException;
4134
import lombok.extern.slf4j.Slf4j;
4235
import org.owasp.encoder.Encode;
@@ -46,6 +39,11 @@
4639
import org.springframework.util.CollectionUtils;
4740
import org.springframework.web.multipart.MultipartFile;
4841

42+
import java.util.*;
43+
44+
import static io.netty.util.internal.StringUtil.isNullOrEmpty;
45+
import static it.pagopa.selfcare.onboarding.connector.model.user.User.Fields.*;
46+
4947
@Slf4j
5048
@Service
5149
class InstitutionServiceImpl implements InstitutionService {
@@ -718,4 +716,14 @@ private void setLocationInfo(InstitutionInfo institutionInfo){
718716
}
719717
}
720718

719+
public List<OnboardingResult> getOnboardingWithFilter(String inputTaxCode, String inputStatus) {
720+
log.trace("getOnboardingWithFilter start");
721+
String taxCode = Encode.forJava(inputTaxCode);
722+
String status = Encode.forJava(inputStatus);
723+
log.debug("getOnboardingWithFilter with taxCode = {}, stauts = {}", taxCode, status);
724+
List<OnboardingResult> result = onboardingMsConnector.onboardingWithFilter(taxCode, status);
725+
log.trace("getOnboardingWithFilter end");
726+
return result;
727+
}
728+
721729
}

0 commit comments

Comments
 (0)