Skip to content

Commit

Permalink
Merge pull request #123 from pagopa/PAGOPA-1492-sviluppo-implementazi…
Browse files Browse the repository at this point in the history
…one-struttura-nuove-api

PAGOPA-1492 multi cart implementation
  • Loading branch information
FedericoRuzzier authored Feb 23, 2024
2 parents 014cf5e + db5c53d commit 340ae9e
Show file tree
Hide file tree
Showing 33 changed files with 1,504 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import it.gov.pagopa.afm.calculator.model.PaymentOption;
import it.gov.pagopa.afm.calculator.model.PaymentOptionByPsp;
import it.gov.pagopa.afm.calculator.model.PaymentOptionByPspMulti;
import it.gov.pagopa.afm.calculator.model.PaymentOptionMulti;
import it.gov.pagopa.afm.calculator.model.ProblemJson;
import it.gov.pagopa.afm.calculator.model.PspSearchCriteria;
import it.gov.pagopa.afm.calculator.model.calculator.BundleOption;
Expand Down Expand Up @@ -234,21 +236,19 @@ public BundleOption getFees(
@PostMapping(
value = "/psps/{idPsp}/fees/multi",
produces = {MediaType.APPLICATION_JSON_VALUE})
public BundleOption getFeesByPspMulti(
public it.gov.pagopa.afm.calculator.model.calculatormulti.BundleOption getFeesByPspMulti(
@Parameter(description = "PSP identifier", required = true) @PathVariable("idPsp")
String idPsp,
@RequestBody @Valid PaymentOptionByPsp paymentOptionByPsp,
@RequestBody @Valid PaymentOptionByPspMulti paymentOptionByPsp,
@RequestParam(required = false, defaultValue = "10") Integer maxOccurrences,
@RequestParam(required = false, defaultValue = "true")
@Parameter(
description =
"Flag for the exclusion of Poste bundles: false -> excluded, true or null ->"
+ " included")
String allCcp) {
PaymentOption paymentOption =
PaymentOption.builder()
.paymentAmount(paymentOptionByPsp.getPaymentAmount())
.primaryCreditorInstitution(paymentOptionByPsp.getPrimaryCreditorInstitution())
PaymentOptionMulti paymentOption =
PaymentOptionMulti.builder()
.paymentMethod(paymentOptionByPsp.getPaymentMethod())
.touchpoint(paymentOptionByPsp.getTouchpoint())
.idPspList(
Expand All @@ -258,12 +258,11 @@ public BundleOption getFeesByPspMulti(
.idChannel(paymentOptionByPsp.getIdChannel())
.idBrokerPsp(paymentOptionByPsp.getIdBrokerPsp())
.build()))
.transferList(paymentOptionByPsp.getTransferList())
.bin(paymentOptionByPsp.getBin())
.paymentNotice(paymentOptionByPsp.getPaymentNotice())
.build();
return BundleOption.builder()
.belowThreshold(false)
.build();
return calculatorService.calculateMulti(
paymentOption, maxOccurrences, StringUtils.isBlank(allCcp) || Boolean.parseBoolean(allCcp));
}

@Operation(
Expand Down Expand Up @@ -319,17 +318,16 @@ public BundleOption getFeesByPspMulti(
@PostMapping(
value = "/fees/multi",
produces = {MediaType.APPLICATION_JSON_VALUE})
public BundleOption getFeesMulti(
@RequestBody @Valid PaymentOption paymentOption,
public it.gov.pagopa.afm.calculator.model.calculatormulti.BundleOption getFeesMulti(
@RequestBody @Valid PaymentOptionMulti paymentOption,
@RequestParam(required = false, defaultValue = "10") Integer maxOccurrences,
@RequestParam(required = false, defaultValue = "true")
@Parameter(
description =
"Flag for the exclusion of Poste bundles: false -> excluded, true or null ->"
+ " included")
String allCcp) {
return BundleOption.builder()
.belowThreshold(false)
.build();
return calculatorService.calculateMulti(
paymentOption, maxOccurrences, StringUtils.isBlank(allCcp) || Boolean.parseBoolean(allCcp));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package it.gov.pagopa.afm.calculator.model;

import lombok.*;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@ToString
public class PaymentNoticeItem {
@NotNull private Long paymentAmount;
@NotNull private String primaryCreditorInstitution;
@Valid @NotNull @NotEmpty private List<TransferListItem> transferList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package it.gov.pagopa.afm.calculator.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;

@AllArgsConstructor
@NoArgsConstructor
@Data
public class PaymentOptionByPspMulti {
private String idChannel;
private String idBrokerPsp;
private String paymentMethod;
private String touchpoint;
private String bin;
@Valid @NotNull @NotEmpty private ArrayList<PaymentNoticeItem> paymentNotice;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package it.gov.pagopa.afm.calculator.model;

import lombok.*;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@ToString
public class PaymentOptionMulti {
private String bin;
private String paymentMethod;
private String touchpoint;
private List<PspSearchCriteria> idPspList;
@Valid @NotNull @NotEmpty private List<PaymentNoticeItem> paymentNotice;

public Long getPaymentAmount () {
return this.getPaymentNotice().stream().mapToLong(PaymentNoticeItem::getPaymentAmount).sum();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package it.gov.pagopa.afm.calculator.model.calculatormulti;

import io.swagger.v3.oas.annotations.media.Schema;
import java.io.Serializable;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BundleOption implements Serializable {
/** generated serialVersionUID */
private static final long serialVersionUID = -7404184031676587394L;

@Schema(
description =
"if true (the payment amount is lower than the threshold value) the bundles onus is not"
+ " calculated (always false)")
private Boolean belowThreshold;

private List<Transfer> bundleOptions;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package it.gov.pagopa.afm.calculator.model.calculatormulti;

import lombok.*;
import java.io.Serializable;

@Builder
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Fee implements Serializable {
/** generated serialVersionUID */
private static final long serialVersionUID = 1287710978645388173L;

private String creditorInstitution;
private long primaryCiIncurredFee;
private long actualCiIncurredFee;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package it.gov.pagopa.afm.calculator.model.calculatormulti;

import lombok.*;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Comparator;
import java.util.List;

@Builder
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Transfer implements Comparable<Transfer>, Serializable {
/** generated serialVersionUID */
private static final long serialVersionUID = 1287710978645388173L;

private Long taxPayerFee;
private Long actualPayerFee;
private String paymentMethod;
private String touchpoint;
private String idBundle;
private String bundleName;
private String bundleDescription;
private List<String> idsCiBundle;
private String idPsp;
private String idChannel;
private String idBrokerPsp;
private Boolean onUs;
private String abi;
private String pspBusinessName;
@Valid @NotNull @NotEmpty private List<Fee> fees;

@Override
public int compareTo(Transfer t) {
// order by onUs
return Comparator.comparing((Transfer tr) -> tr.onUs).reversed().compare(this, t);
}
}
Loading

0 comments on commit 340ae9e

Please sign in to comment.