Skip to content

Commit

Permalink
add our account iban to hbci transaction mapper (#1230)
Browse files Browse the repository at this point in the history
  • Loading branch information
Maxim Grischenko committed May 13, 2021
1 parent 748c8e4 commit af75e6b
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,16 @@
@Value
@Builder
public class AccountListDetailBody {
private String resourceId;
private String iban;
private String bban;
private String msisdn;
private String currency;
private String name;
private String product;
private String cashAccountType;
private String status;
private String bic;
private String linkedAccounts;
private List<Balance> balances;

String resourceId;
String iban;
String bban;
String msisdn;
String currency;
String name;
String product;
String cashAccountType;
String status;
String bic;
String linkedAccounts;
List<Balance> balances;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
@Value
@Builder
public class AccountReference {
private String iban;
private String bban;
private String pan;
private String maskedPan;
private String msisdn;
private String currency;
String iban;
String bban;
String pan;
String maskedPan;
String msisdn;
String currency;
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package de.adorsys.opba.protocol.api.dto.result.body;

import lombok.Builder;
import lombok.Value;
import lombok.Data;

import java.time.LocalDate;

/**
* Transaction details representation list transactions result from protocol.
*/
@Value
@Data
@Builder
public class TransactionDetailsBody {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import de.adorsys.multibanking.domain.BalancesReport;
import de.adorsys.multibanking.domain.BankAccount;
import de.adorsys.opba.protocol.api.dto.context.ServiceContext;
import de.adorsys.opba.protocol.api.dto.request.payments.PaymentInfoBody;
import de.adorsys.opba.protocol.api.dto.request.payments.PaymentStatusBody;
import de.adorsys.opba.protocol.api.dto.request.payments.SinglePaymentBody;
import de.adorsys.opba.protocol.api.dto.request.transactions.ListTransactionsRequest;
import de.adorsys.opba.protocol.api.dto.result.body.AccountListBody;
import de.adorsys.opba.protocol.api.dto.result.body.AccountListDetailBody;
import de.adorsys.opba.protocol.api.dto.result.body.Amount;
Expand Down Expand Up @@ -49,9 +51,9 @@ public AccountListBody extractAccountList(ProcessResponse result) {
return accountsToFacadeMapper.map(accountsResult);
}

public TransactionsResponseBody extractTransactionsReport(ProcessResponse result) {
public TransactionsResponseBody extractTransactionsReport(ProcessResponse result, ServiceContext<ListTransactionsRequest> context) {
AisListTransactionsResult transactionsResult = (AisListTransactionsResult) result.getResult();
return transactionsToFacadeMapper.map(transactionsResult);
return transactionsToFacadeMapper.map(transactionsResult, context);
}

public SinglePaymentBody extractSinglePaymentBody(ProcessResponse result) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
package de.adorsys.opba.protocol.hbci.entrypoint;

import de.adorsys.multibanking.domain.Booking;
import de.adorsys.opba.protocol.api.dto.context.ServiceContext;
import de.adorsys.opba.protocol.api.dto.request.transactions.ListTransactionsRequest;
import de.adorsys.opba.protocol.api.dto.result.body.AccountReference;
import de.adorsys.opba.protocol.api.dto.result.body.AccountReport;
import de.adorsys.opba.protocol.api.dto.result.body.TransactionDetailsBody;
import de.adorsys.opba.protocol.api.dto.result.body.TransactionListBody;
import de.adorsys.opba.protocol.api.dto.result.body.TransactionsResponseBody;
import de.adorsys.opba.protocol.hbci.service.protocol.ais.dto.AisListTransactionsResult;
import lombok.RequiredArgsConstructor;
import org.mapstruct.AfterMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

import static de.adorsys.opba.protocol.bpmnshared.GlobalConst.SPRING_KEYWORD;
Expand All @@ -22,27 +28,32 @@ public class HbciTransactionsToFacadeMapper {

private final HbciToTransactionBodyMapper mapper;

public TransactionsResponseBody map(AisListTransactionsResult transactionsResult) {
public TransactionsResponseBody map(AisListTransactionsResult transactionsResult, ServiceContext<ListTransactionsRequest> context) {
TransactionsResponseBody.TransactionsResponseBodyBuilder response = TransactionsResponseBody.builder();
if (null != transactionsResult.getBookings()) {
response.transactions(mapBookings(transactionsResult.getBookings()));
response.transactions(mapBookings(transactionsResult.getBookings(), context));
}
return response.build();
}

private AccountReport mapBookings(List<Booking> bookings) {
private AccountReport mapBookings(List<Booking> bookings, ServiceContext<ListTransactionsRequest> context) {
AccountReport.AccountReportBuilder report = AccountReport.builder();
TransactionListBody booked = new TransactionListBody();
TransactionListBody pending = new TransactionListBody();

AccountReference ourAccount = AccountReference.builder()
.iban(context.getRequest().getAccountId())
.currency("EUR")
.build();

bookings.stream()
.filter(it -> null != it.getValutaDate())
.map(mapper::map)
.map((Booking booking) -> mapper.map(booking, ourAccount))
.forEach(booked::add);

bookings.stream()
.filter(it -> null == it.getValutaDate())
.map(mapper::map)
.map((Booking booking) -> mapper.map(booking, ourAccount))
.forEach(pending::add);


Expand All @@ -56,13 +67,24 @@ private AccountReport mapBookings(List<Booking> bookings) {
@Mapper(componentModel = SPRING_KEYWORD, implementationPackage = HBCI_MAPPERS_PACKAGE)
public interface HbciToTransactionBodyMapper {

@Mapping(source = "externalId", target = "transactionId")
@Mapping(source = "bookingDate", target = "bookingDate")
@Mapping(source = "valutaDate", target = "valueDate")
@Mapping(source = "booking.externalId", target = "transactionId")
@Mapping(source = "booking.bookingDate", target = "bookingDate")
@Mapping(source = "booking.valutaDate", target = "valueDate")
@Mapping(expression = "java(de.adorsys.opba.protocol.api.dto.result.body.Amount.builder().currency(booking.getCurrency()).amount(booking.getAmount().toString()).build())",
target = "transactionAmount")
@Mapping(source = "otherAccount", target = "debtorAccount")
@Mapping(source = "booking.otherAccount", target = "debtorAccount")
@Mapping(source = "booking.otherAccount", target = "creditorAccount")
@Mapping(expression = "java(null != booking.getUsage() ? booking.getUsage() : booking.getText())", target = "remittanceInformationUnstructured")
TransactionDetailsBody map(Booking booking);
TransactionDetailsBody map(Booking booking, AccountReference ourAccount);

@AfterMapping
default void update(@MappingTarget TransactionDetailsBody.TransactionDetailsBodyBuilder transactionDetailsBody, Booking booking, AccountReference ourAccount) {

if (booking.getAmount() != null && booking.getAmount().compareTo(BigDecimal.ZERO) > 0) {
transactionDetailsBody.debtorAccount(ourAccount);
} else {
transactionDetailsBody.creditorAccount(ourAccount);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public CompletableFuture<Result<TransactionsResponseBody>> execute(ServiceContex

registrar.addHandler(
instance.getProcessInstanceId(),
new HbciOutcomeMapper<>(result, extractor::extractTransactionsReport, errorMapper)
new HbciOutcomeMapper<>(result, res -> extractor.extractTransactionsReport(res, serviceContext), errorMapper)
);

return result;
Expand Down

0 comments on commit af75e6b

Please sign in to comment.