FINERACT-2181: Add customData field to LoanAdjustTransactionBusinessEvent
This commit is contained in:
committed by
Adam Saghy
parent
2143d35e29
commit
8ce76e1ad6
@@ -18,6 +18,17 @@
|
|||||||
"null",
|
"null",
|
||||||
"org.apache.fineract.avro.loan.v1.LoanTransactionDataV1"
|
"org.apache.fineract.avro.loan.v1.LoanTransactionDataV1"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": null,
|
||||||
|
"name": "customData",
|
||||||
|
"type": [
|
||||||
|
"null",
|
||||||
|
{
|
||||||
|
"values": "bytes",
|
||||||
|
"type": "map"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-3
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.fineract.infrastructure.event.external.service.serialization.serializer.loan;
|
package org.apache.fineract.infrastructure.event.external.service.serialization.serializer.loan;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.avro.generic.GenericContainer;
|
import org.apache.avro.generic.GenericContainer;
|
||||||
import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
||||||
@@ -26,7 +27,8 @@ import org.apache.fineract.avro.loan.v1.LoanTransactionDataV1;
|
|||||||
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.loan.LoanAdjustTransactionBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.loan.LoanAdjustTransactionBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanTransactionDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanTransactionDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventWithCustomDataSerializer;
|
||||||
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.ExternalEventCustomDataSerializer;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
|
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
|
||||||
import org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadService;
|
import org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadService;
|
||||||
@@ -35,11 +37,13 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class LoanAdjustTransactionBusinessEventSerializer implements BusinessEventSerializer {
|
public class LoanAdjustTransactionBusinessEventSerializer
|
||||||
|
extends AbstractBusinessEventWithCustomDataSerializer<LoanAdjustTransactionBusinessEvent> {
|
||||||
|
|
||||||
private final LoanReadPlatformService service;
|
private final LoanReadPlatformService service;
|
||||||
private final LoanTransactionDataMapper mapper;
|
private final LoanTransactionDataMapper mapper;
|
||||||
private final LoanChargePaidByReadService loanChargePaidByReadService;
|
private final LoanChargePaidByReadService loanChargePaidByReadService;
|
||||||
|
private final List<ExternalEventCustomDataSerializer<LoanAdjustTransactionBusinessEvent>> externalEventCustomDataSerializers;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> boolean canSerialize(BusinessEvent<T> event) {
|
public <T> boolean canSerialize(BusinessEvent<T> event) {
|
||||||
@@ -66,11 +70,16 @@ public class LoanAdjustTransactionBusinessEventSerializer implements BusinessEve
|
|||||||
newTransactionDetailAvroDto = mapper.map(newTransactionDetailData);
|
newTransactionDetailAvroDto = mapper.map(newTransactionDetailData);
|
||||||
|
|
||||||
}
|
}
|
||||||
return new LoanTransactionAdjustmentDataV1(transactionToAdjustAvroDto, newTransactionDetailAvroDto);
|
return new LoanTransactionAdjustmentDataV1(transactionToAdjustAvroDto, newTransactionDetailAvroDto, collectCustomData(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Class<? extends GenericContainer> getSupportedSchema() {
|
public Class<? extends GenericContainer> getSupportedSchema() {
|
||||||
return LoanTransactionAdjustmentDataV1.class;
|
return LoanTransactionAdjustmentDataV1.class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected List<ExternalEventCustomDataSerializer<LoanAdjustTransactionBusinessEvent>> getExternalEventCustomDataSerializers() {
|
||||||
|
return externalEventCustomDataSerializers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+47
-1
@@ -19,17 +19,21 @@
|
|||||||
|
|
||||||
package org.apache.fineract.infrastructure.event.external.service.serialization.serializer.loan;
|
package org.apache.fineract.infrastructure.event.external.service.serialization.serializer.loan;
|
||||||
|
|
||||||
|
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyLong;
|
import static org.mockito.ArgumentMatchers.anyLong;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.apache.fineract.avro.loan.v1.LoanTransactionAdjustmentDataV1;
|
import org.apache.fineract.avro.loan.v1.LoanTransactionAdjustmentDataV1;
|
||||||
import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
|
import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
|
||||||
@@ -41,6 +45,7 @@ import org.apache.fineract.infrastructure.event.business.domain.loan.LoanAdjustT
|
|||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanTransactionDataMapperImpl;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanTransactionDataMapperImpl;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.AvroDateTimeMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.AvroDateTimeMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.ExternalIdMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.ExternalIdMapper;
|
||||||
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.ExternalEventCustomDataSerializer;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
|
import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
|
||||||
@@ -87,8 +92,44 @@ public class LoanAdjustTransactionBusinessEventSerializerTest {
|
|||||||
@Test
|
@Test
|
||||||
void loanTransactionReversedOnDateSerializationTest() {
|
void loanTransactionReversedOnDateSerializationTest() {
|
||||||
Loan loanForProcessing = Mockito.mock(Loan.class);
|
Loan loanForProcessing = Mockito.mock(Loan.class);
|
||||||
|
final List<ExternalEventCustomDataSerializer<LoanAdjustTransactionBusinessEvent>> externalEventCustomDataSerializers = List
|
||||||
|
.of(new ExternalEventCustomDataSerializer<>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer serialize(final LoanAdjustTransactionBusinessEvent event) {
|
||||||
|
return ByteBuffer.wrap("test_data_for_loan_adjust_transaction".getBytes(UTF_8));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String key() {
|
||||||
|
return "test_key_1";
|
||||||
|
}
|
||||||
|
}, new ExternalEventCustomDataSerializer<>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer serialize(final LoanAdjustTransactionBusinessEvent event) {
|
||||||
|
return ByteBuffer.wrap("test_data_for_loan_adjust_transaction_1".getBytes(UTF_8));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String key() {
|
||||||
|
return "test_key_1";
|
||||||
|
}
|
||||||
|
}, new ExternalEventCustomDataSerializer<>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer serialize(final LoanAdjustTransactionBusinessEvent event) {
|
||||||
|
return ByteBuffer.wrap("test_data_for_loan_adjust_transaction_2".getBytes(UTF_8));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String key() {
|
||||||
|
return "test_key_2";
|
||||||
|
}
|
||||||
|
});
|
||||||
LoanAdjustTransactionBusinessEventSerializer serializer = new LoanAdjustTransactionBusinessEventSerializer(service,
|
LoanAdjustTransactionBusinessEventSerializer serializer = new LoanAdjustTransactionBusinessEventSerializer(service,
|
||||||
new LoanTransactionDataMapperImpl(avroDateTimeMapper, externalIdMapper), loanChargePaidByReadService);
|
new LoanTransactionDataMapperImpl(avroDateTimeMapper, externalIdMapper), loanChargePaidByReadService,
|
||||||
|
externalEventCustomDataSerializers);
|
||||||
LoanTransaction transactionToAdjust = Mockito.mock(LoanTransaction.class);
|
LoanTransaction transactionToAdjust = Mockito.mock(LoanTransaction.class);
|
||||||
LoanAdjustTransactionBusinessEvent.Data loanAdjustTransactionBusinessEventData = new LoanAdjustTransactionBusinessEvent.Data(
|
LoanAdjustTransactionBusinessEvent.Data loanAdjustTransactionBusinessEventData = new LoanAdjustTransactionBusinessEvent.Data(
|
||||||
transactionToAdjust);
|
transactionToAdjust);
|
||||||
@@ -112,5 +153,10 @@ public class LoanAdjustTransactionBusinessEventSerializerTest {
|
|||||||
LoanTransactionAdjustmentDataV1 loanTransactionAdjustmentDataV1 = (LoanTransactionAdjustmentDataV1) serializer
|
LoanTransactionAdjustmentDataV1 loanTransactionAdjustmentDataV1 = (LoanTransactionAdjustmentDataV1) serializer
|
||||||
.toAvroDTO(businessEvent);
|
.toAvroDTO(businessEvent);
|
||||||
assertEquals(reversedLocalDate, loanTransactionAdjustmentDataV1.getTransactionToAdjust().getReversedOnDate());
|
assertEquals(reversedLocalDate, loanTransactionAdjustmentDataV1.getTransactionToAdjust().getReversedOnDate());
|
||||||
|
|
||||||
|
assertNotNull(loanTransactionAdjustmentDataV1.getCustomData());
|
||||||
|
final Map<String, ByteBuffer> customData = loanTransactionAdjustmentDataV1.getCustomData();
|
||||||
|
assertEquals("test_data_for_loan_adjust_transaction_1", new String(customData.get("test_key_1").array(), UTF_8));
|
||||||
|
assertEquals("test_data_for_loan_adjust_transaction_2", new String(customData.get("test_key_2").array(), UTF_8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user