Skip to content

Commit b21f510

Browse files
author
dalilaacqua
committed
Merge remote-tracking branch 'origin/EBE-549-refactoring-II' into EBE-549-refactoring-II
2 parents b17fe31 + e5ad8f2 commit b21f510

36 files changed

+2005
-3
lines changed

helm/values.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ microservice-chart:
8181

8282
rest-client:
8383
PDV_BASE_URL: pdv_decrypt_base_url
84+
MERCHANT_BASE_URL: idpay_merchant_host
8485

8586
envSecret:
8687
MONGODB_URI: mongodb-connection-string
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package it.gov.pagopa.idpay.transactions.connector.rest;
22

3+
import it.gov.pagopa.idpay.transactions.connector.rest.dto.MerchantDetailDTO;
34
import it.gov.pagopa.idpay.transactions.connector.rest.dto.PointOfSaleDTO;
45
import reactor.core.publisher.Mono;
56

67
public interface MerchantRestClient {
78

89
Mono<PointOfSaleDTO> getPointOfSale(String merchantId, String pointOfSaleId);
910

11+
Mono<MerchantDetailDTO> getMerchantDetail(String merchantId, String initiativeId);
12+
13+
1014
}

src/main/java/it/gov/pagopa/idpay/transactions/connector/rest/MerchantRestClientImpl.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,36 @@
11
package it.gov.pagopa.idpay.transactions.connector.rest;
22

33
import it.gov.pagopa.common.reactive.utils.PerformanceLogger;
4+
import it.gov.pagopa.common.web.exception.ClientExceptionWithBody;
5+
import it.gov.pagopa.idpay.transactions.connector.rest.dto.MerchantDetailDTO;
46
import it.gov.pagopa.idpay.transactions.connector.rest.dto.PointOfSaleDTO;
57
import java.time.Duration;
68
import java.util.Map;
9+
10+
import it.gov.pagopa.idpay.transactions.utils.Utilities;
711
import lombok.extern.slf4j.Slf4j;
812
import org.springframework.beans.factory.annotation.Value;
913
import org.springframework.cache.annotation.CacheConfig;
1014
import org.springframework.cache.annotation.Cacheable;
1115
import org.springframework.http.HttpEntity;
1216
import org.springframework.http.HttpMethod;
17+
import org.springframework.http.HttpStatus;
1318
import org.springframework.stereotype.Service;
1419
import org.springframework.web.reactive.function.client.WebClient;
1520
import org.springframework.web.reactive.function.client.WebClientResponseException;
1621
import reactor.core.publisher.Mono;
1722
import reactor.util.retry.Retry;
1823

24+
import static it.gov.pagopa.idpay.transactions.utils.ExceptionConstants.ExceptionCode.MERCHANT_NOT_FOUND;
25+
import static it.gov.pagopa.idpay.transactions.utils.ExceptionConstants.ExceptionMessage.ERROR_MESSAGE_MERCHANT_NOT_FOUND;
26+
1927
@Service
2028
@Slf4j
2129
@CacheConfig
2230
public class MerchantRestClientImpl implements MerchantRestClient {
2331

2432
private static final String URI_POS_DETAIL = "/idpay/merchant/portal/{merchantId}/point-of-sales/{pointOfSaleId}";
33+
private static final String URI_MERCHANT_DETAIL = "/idpay/merchant/portal/initiatives/{initiativeId}";
2534
private final WebClient webClient;
2635
private final int retryDelay;
2736
private final long maxAttempts;
@@ -81,4 +90,41 @@ public Mono<PointOfSaleDTO> getPointOfSale(String merchantId, String pointOfSale
8190
return Mono.empty();
8291
});
8392
}
93+
94+
@Override
95+
public Mono<MerchantDetailDTO> getMerchantDetail(String merchantId, String initiativeId) {
96+
log.info("Sending request to merchant {} to get merchant details", Utilities.sanitizeString(merchantId));
97+
98+
return webClient
99+
.get()
100+
.uri(URI_MERCHANT_DETAIL, Map.of("initiativeId", initiativeId))
101+
.header("x-merchant-id", merchantId)
102+
.retrieve()
103+
.onStatus(HttpStatus.NOT_FOUND::equals, response ->
104+
response.bodyToMono(String.class)
105+
.flatMap(body -> {
106+
log.warn("Merchant not found for merchantId {}", Utilities.sanitizeString(merchantId));
107+
return Mono.error(new ClientExceptionWithBody(
108+
HttpStatus.NOT_FOUND,
109+
MERCHANT_NOT_FOUND,
110+
ERROR_MESSAGE_MERCHANT_NOT_FOUND.formatted(merchantId, initiativeId)
111+
));
112+
})
113+
)
114+
.bodyToMono(MerchantDetailDTO.class)
115+
.retryWhen(
116+
Retry.fixedDelay(maxAttempts, Duration.ofMillis(retryDelay))
117+
.filter(ex ->
118+
ex instanceof WebClientResponseException.TooManyRequests ||
119+
ex.getMessage().startsWith("Connection refused")
120+
)
121+
)
122+
.onErrorResume(WebClientResponseException.BadRequest.class, ex -> {
123+
log.warn("Invalid request for merchant {}", Utilities.sanitizeString(merchantId));
124+
return Mono.empty();
125+
});
126+
}
127+
128+
129+
84130
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package it.gov.pagopa.idpay.transactions.connector.rest.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Builder;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
@Data
9+
@NoArgsConstructor
10+
@AllArgsConstructor
11+
@Builder
12+
public class MerchantDetailDTO {
13+
14+
private String businessName;
15+
16+
}

src/main/java/it/gov/pagopa/idpay/transactions/controller/MerchantTransactionController.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,7 @@ Mono<MerchantTransactionsListDTO> getMerchantTransactions(@RequestHeader("x-merc
2626
Mono<List<String>> getProcessedTransactionStatuses(
2727
@RequestHeader(value = "x-organization-role", required = false) String organizationRole);
2828

29+
30+
31+
2932
}

src/main/java/it/gov/pagopa/idpay/transactions/controller/MerchantTransactionControllerImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,5 @@ public Mono<List<String>> getProcessedTransactionStatuses(
4242
return merchantTransactionService.getProcessedTransactionStatuses(
4343
organizationRole);
4444
}
45+
4546
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package it.gov.pagopa.idpay.transactions.controller;
2+
3+
import it.gov.pagopa.idpay.transactions.dto.PatchReportRequest;
4+
import it.gov.pagopa.idpay.transactions.dto.ReportDTO;
5+
import it.gov.pagopa.idpay.transactions.dto.ReportListDTO;
6+
import it.gov.pagopa.idpay.transactions.dto.ReportRequest;
7+
import jakarta.validation.Valid;
8+
import org.springframework.data.domain.Pageable;
9+
import org.springframework.data.web.PageableDefault;
10+
import org.springframework.web.bind.annotation.*;
11+
import reactor.core.publisher.Mono;
12+
13+
@RequestMapping("/idpay/merchant/portal")
14+
public interface ReportController {
15+
16+
@GetMapping("/initiatives/{initiativeId}/reports")
17+
Mono<ReportListDTO> getTransactionsReports(
18+
@RequestHeader(value = "x-merchant-id", required = false) String merchantId,
19+
@RequestHeader(value = "x-organization-role", required = false) String organizationRole,
20+
@PathVariable("initiativeId") String initiativeId,
21+
@PageableDefault Pageable pageable
22+
);
23+
24+
@PostMapping("/initiatives/{initiativeId}/reports")
25+
Mono<ReportDTO> generateReport(@RequestHeader("x-merchant-id") String merchantId,
26+
@RequestHeader(value = "x-organization-role", required = false) String organizationRole,
27+
@PathVariable("initiativeId") String initiativeId,
28+
@RequestBody @Valid ReportRequest request);
29+
30+
31+
@PatchMapping("/initiatives/{initiativeId}/reports/{reportId}")
32+
Mono<ReportDTO> patchReport(@PathVariable("initiativeId") String initiativeId,
33+
@PathVariable("reportId") String reportId,
34+
@RequestBody PatchReportRequest request);
35+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package it.gov.pagopa.idpay.transactions.controller;
2+
3+
import it.gov.pagopa.idpay.transactions.dto.PatchReportRequest;
4+
import it.gov.pagopa.idpay.transactions.dto.ReportDTO;
5+
import it.gov.pagopa.idpay.transactions.dto.ReportListDTO;
6+
import it.gov.pagopa.idpay.transactions.dto.ReportRequest;
7+
import it.gov.pagopa.idpay.transactions.service.ReportService;
8+
import it.gov.pagopa.idpay.transactions.dto.mapper.ReportMapper;
9+
import it.gov.pagopa.idpay.transactions.utils.Utilities;
10+
import lombok.extern.slf4j.Slf4j;
11+
import org.springframework.data.domain.Pageable;
12+
import org.springframework.web.bind.annotation.RestController;
13+
import reactor.core.publisher.Mono;
14+
15+
@RestController
16+
@Slf4j
17+
public class ReportControllerImpl implements ReportController {
18+
19+
private final ReportService reportService;
20+
private final ReportMapper reportMapper;
21+
22+
public ReportControllerImpl(ReportService reportService, ReportMapper reportMapper) {
23+
this.reportService = reportService;
24+
this.reportMapper = reportMapper;
25+
}
26+
27+
@Override
28+
public Mono<ReportListDTO> getTransactionsReports(
29+
String merchantId,
30+
String organizationRole,
31+
String initiativeId,
32+
Pageable pageable
33+
) {
34+
log.info("[GET_TRANSACTIONS_REPORTS] Request received for initiative: {}", Utilities.sanitizeString(initiativeId));
35+
36+
return reportService.getTransactionsReports(merchantId, organizationRole, initiativeId, pageable)
37+
.flatMap(page -> Mono.just(reportMapper.toListDTO(page)));
38+
}
39+
40+
41+
@Override
42+
public Mono<ReportDTO> generateReport(String merchantId,
43+
String organizationRole,
44+
String initiativeId,
45+
ReportRequest request
46+
) {
47+
return reportService.generateReport(merchantId, organizationRole, initiativeId, request);
48+
}
49+
50+
51+
@Override
52+
public Mono<ReportDTO> patchReport(String initiativeId,
53+
String reportId,
54+
PatchReportRequest request
55+
) {
56+
return reportService.patchReport(initiativeId, reportId, request);
57+
}
58+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package it.gov.pagopa.idpay.transactions.dto;
2+
3+
import it.gov.pagopa.idpay.transactions.enums.ReportStatus;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
9+
10+
@Data
11+
@AllArgsConstructor
12+
@NoArgsConstructor
13+
@Builder
14+
public class PatchReportRequest {
15+
16+
private ReportStatus reportStatus;
17+
18+
}
19+
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package it.gov.pagopa.idpay.transactions.dto;
2+
3+
import com.fasterxml.jackson.annotation.JsonInclude;
4+
import it.gov.pagopa.idpay.transactions.enums.ReportStatus;
5+
import it.gov.pagopa.idpay.transactions.enums.ReportType;
6+
import it.gov.pagopa.idpay.transactions.enums.RewardBatchAssignee;
7+
import lombok.AllArgsConstructor;
8+
import lombok.Builder;
9+
import lombok.Data;
10+
11+
import java.time.LocalDateTime;
12+
13+
@Data
14+
@AllArgsConstructor
15+
@Builder
16+
@JsonInclude(JsonInclude.Include.NON_NULL)
17+
public class ReportDTO {
18+
19+
String id;
20+
String initiativeId;
21+
ReportStatus reportStatus;
22+
LocalDateTime startPeriod;
23+
LocalDateTime endPeriod;
24+
String merchantId;
25+
String businessName;
26+
LocalDateTime requestDate;
27+
LocalDateTime elaborationDate;
28+
RewardBatchAssignee operatorLevel;
29+
String fileName;
30+
ReportType reportType;
31+
32+
}

0 commit comments

Comments
 (0)