Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add our account iban to hbci transaction mapper #1230

Merged
merged 1 commit into from
May 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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