FINERACT-1926: Fineract Asset Externalization events
- [x] Change events - [x] Create data enricher - [x] Core changes - [x] Remove AbstractBusinessEventSerializer - [x] BusinessEventSerializer.toAvroDto added and change the event serializers
This commit is contained in:
@@ -27,6 +27,30 @@
|
|||||||
"string"
|
"string"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"default": null,
|
||||||
|
"name": "externalOwnerId",
|
||||||
|
"type": [
|
||||||
|
"null",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": null,
|
||||||
|
"name": "settlementDate",
|
||||||
|
"type": [
|
||||||
|
"null",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": null,
|
||||||
|
"name": "purchasePriceRatio",
|
||||||
|
"type": [
|
||||||
|
"null",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"default": null,
|
"default": null,
|
||||||
"name": "status",
|
"name": "status",
|
||||||
|
|||||||
@@ -241,6 +241,14 @@
|
|||||||
"string"
|
"string"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"default": null,
|
||||||
|
"name": "externalOwnerId",
|
||||||
|
"type": [
|
||||||
|
"null",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"default": null,
|
"default": null,
|
||||||
"name": "submittedOnDate",
|
"name": "submittedOnDate",
|
||||||
|
|||||||
@@ -147,6 +147,14 @@
|
|||||||
"string"
|
"string"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"default": null,
|
||||||
|
"name": "externalOwnerId",
|
||||||
|
"type": [
|
||||||
|
"null",
|
||||||
|
"string"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"default": null,
|
"default": null,
|
||||||
"name": "transfer",
|
"name": "transfer",
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ dependencies {
|
|||||||
// Note that we never use 'api', because Fineract at least currently is a simple monolithic application ("WAR"), not a library.
|
// Note that we never use 'api', because Fineract at least currently is a simple monolithic application ("WAR"), not a library.
|
||||||
// We also (normally should have) no need to ever use 'compileOnly'.
|
// We also (normally should have) no need to ever use 'compileOnly'.
|
||||||
|
|
||||||
|
|
||||||
// implementation dependencies are directly used (compiled against) in src/main (and src/test)
|
// implementation dependencies are directly used (compiled against) in src/main (and src/test)
|
||||||
//
|
//
|
||||||
implementation(
|
implementation(
|
||||||
|
|||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.infrastructure.core.service;
|
||||||
|
|
||||||
|
public interface DataEnricher<T> {
|
||||||
|
|
||||||
|
boolean isDataTypeSupported(Class<T> dataType);
|
||||||
|
|
||||||
|
void enrich(T data);
|
||||||
|
}
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.infrastructure.core.service;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class DataEnricherProcessor {
|
||||||
|
|
||||||
|
private final List<DataEnricher<?>> enhancers;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
public DataEnricherProcessor(Optional<List<DataEnricher<?>>> enhancers) {
|
||||||
|
this.enhancers = enhancers.orElse(new ArrayList<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T> T enrich(T source) {
|
||||||
|
for (DataEnricher enhancer : enhancers) {
|
||||||
|
if (enhancer.isDataTypeSupported(source.getClass())) {
|
||||||
|
enhancer.enrich(source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,6 +26,10 @@ dependencies {
|
|||||||
//
|
//
|
||||||
implementation(project(path: ':fineract-core'))
|
implementation(project(path: ':fineract-core'))
|
||||||
implementation(project(path: ':fineract-loan'))
|
implementation(project(path: ':fineract-loan'))
|
||||||
|
implementation('org.apache.avro:avro')
|
||||||
|
implementation(
|
||||||
|
project(path: ':fineract-avro-schemas')
|
||||||
|
)
|
||||||
|
|
||||||
implementation(
|
implementation(
|
||||||
'org.springframework.boot:spring-boot-starter-web',
|
'org.springframework.boot:spring-boot-starter-web',
|
||||||
|
|||||||
+2
@@ -50,6 +50,7 @@ import org.apache.fineract.investor.data.ExternalTransferData;
|
|||||||
import org.apache.fineract.investor.data.ExternalTransferResponseData;
|
import org.apache.fineract.investor.data.ExternalTransferResponseData;
|
||||||
import org.apache.fineract.investor.service.ExternalAssetOwnersReadService;
|
import org.apache.fineract.investor.service.ExternalAssetOwnersReadService;
|
||||||
import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformServiceCommon;
|
import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformServiceCommon;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Page;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -57,6 +58,7 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
@Tag(name = "External Asset Owners", description = "External Asset Owners")
|
@Tag(name = "External Asset Owners", description = "External Asset Owners")
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
|
@ConditionalOnProperty(value = "fineract.module.external-asset-owner.enabled", havingValue = "true")
|
||||||
public class ExternalAssetOwnersApiResource {
|
public class ExternalAssetOwnersApiResource {
|
||||||
|
|
||||||
private final PlatformUserRightsContext platformUserRightsContext;
|
private final PlatformUserRightsContext platformUserRightsContext;
|
||||||
|
|||||||
+6
@@ -41,6 +41,12 @@ public interface ExternalAssetOwnerTransferRepository
|
|||||||
@Query("select e from ExternalAssetOwnerTransfer e where e.loanId = :loanId and e.id = (select max(ex.id) from ExternalAssetOwnerTransfer ex where ex.loanId = :loanId)")
|
@Query("select e from ExternalAssetOwnerTransfer e where e.loanId = :loanId and e.id = (select max(ex.id) from ExternalAssetOwnerTransfer ex where ex.loanId = :loanId)")
|
||||||
Optional<ExternalAssetOwnerTransfer> findLatestByLoanId(@Param("loanId") Long loanId);
|
Optional<ExternalAssetOwnerTransfer> findLatestByLoanId(@Param("loanId") Long loanId);
|
||||||
|
|
||||||
|
@Query("select m.ownerTransfer from ExternalAssetOwnerTransferLoanMapping m inner join fetch m.ownerTransfer o where m.loanId = :loanId")
|
||||||
|
Optional<ExternalAssetOwnerTransfer> findActiveByLoanId(@Param("loanId") Long loanId);
|
||||||
|
|
||||||
|
@Query("select m.ownerTransfer.owner from ExternalAssetOwnerTransferLoanMapping m where m.loanId = :loanId")
|
||||||
|
Optional<ExternalAssetOwner> findActiveOwnerByLoanId(@Param("loanId") Long loanId);
|
||||||
|
|
||||||
@Query("SELECT t FROM ExternalAssetOwnerTransfer t WHERE t.loanId = :loanId AND t.effectiveDateTo > :effectiveDate")
|
@Query("SELECT t FROM ExternalAssetOwnerTransfer t WHERE t.loanId = :loanId AND t.effectiveDateTo > :effectiveDate")
|
||||||
List<ExternalAssetOwnerTransfer> findEffectiveTransfers(@Param("loanId") Long loanId, @Param("effectiveDate") LocalDate effectiveDate);
|
List<ExternalAssetOwnerTransfer> findEffectiveTransfers(@Param("loanId") Long loanId, @Param("effectiveDate") LocalDate effectiveDate);
|
||||||
}
|
}
|
||||||
|
|||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.investor.enricher;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.apache.fineract.avro.loan.v1.LoanAccountDataV1;
|
||||||
|
import org.apache.fineract.infrastructure.core.domain.ExternalId;
|
||||||
|
import org.apache.fineract.infrastructure.core.service.DataEnricher;
|
||||||
|
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.investor.domain.ExternalAssetOwnerTransferRepository;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class LoanAccountDataV1Enricher implements DataEnricher<LoanAccountDataV1> {
|
||||||
|
|
||||||
|
private final ExternalAssetOwnerTransferRepository externalAssetOwnerTransferRepository;
|
||||||
|
private final ExternalIdMapper externalIdMapper;
|
||||||
|
private final AvroDateTimeMapper avroDateTimeMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDataTypeSupported(Class<LoanAccountDataV1> dataType) {
|
||||||
|
return dataType.isAssignableFrom(LoanAccountDataV1.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enrich(LoanAccountDataV1 data) {
|
||||||
|
externalAssetOwnerTransferRepository.findActiveByLoanId(data.getId()).ifPresent(transfer -> {
|
||||||
|
ExternalId transferOwnerExternalId = transfer.getOwner().getExternalId();
|
||||||
|
data.setExternalOwnerId(externalIdMapper.mapExternalId(transferOwnerExternalId));
|
||||||
|
data.setSettlementDate(avroDateTimeMapper.mapLocalDate(transfer.getSettlementDate()));
|
||||||
|
data.setPurchasePriceRatio(transfer.getPurchasePriceRatio());
|
||||||
|
if (data.getCharges() != null) {
|
||||||
|
data.getCharges().forEach(charge -> charge.setExternalOwnerId(externalIdMapper.mapExternalId(transferOwnerExternalId)));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.investor.enricher;
|
||||||
|
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.apache.fineract.avro.loan.v1.LoanChargeDataV1;
|
||||||
|
import org.apache.fineract.infrastructure.core.service.DataEnricher;
|
||||||
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.ExternalIdMapper;
|
||||||
|
import org.apache.fineract.investor.domain.ExternalAssetOwnerTransferRepository;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class LoanChargeDataV1Enricher implements DataEnricher<LoanChargeDataV1> {
|
||||||
|
|
||||||
|
private final ExternalAssetOwnerTransferRepository externalAssetOwnerTransferRepository;
|
||||||
|
private final ExternalIdMapper externalIdMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDataTypeSupported(Class<LoanChargeDataV1> dataType) {
|
||||||
|
return dataType.isAssignableFrom(LoanChargeDataV1.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enrich(LoanChargeDataV1 data) {
|
||||||
|
externalAssetOwnerTransferRepository.findActiveOwnerByLoanId(data.getLoanId())
|
||||||
|
.ifPresent(owner -> data.setExternalOwnerId(externalIdMapper.mapExternalId(owner.getExternalId())));
|
||||||
|
}
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.apache.fineract.infrastructure.core.config;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class AbstractFineractModuleProperties {
|
||||||
|
|
||||||
|
private boolean enabled;
|
||||||
|
}
|
||||||
+15
@@ -65,6 +65,8 @@ public class FineractProperties {
|
|||||||
|
|
||||||
private FineractSamplingProperties sampling;
|
private FineractSamplingProperties sampling;
|
||||||
|
|
||||||
|
private FineractModulesProperties module;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@Setter
|
@Setter
|
||||||
public static class FineractTenantProperties {
|
public static class FineractTenantProperties {
|
||||||
@@ -403,4 +405,17 @@ public class FineractProperties {
|
|||||||
private String sampledClasses;
|
private String sampledClasses;
|
||||||
private int resetPeriodSec;
|
private int resetPeriodSec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public static class FineractModulesProperties {
|
||||||
|
|
||||||
|
private FineractExternalAssetOwnerModuleProperties externalAssetOwner;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public static class FineractExternalAssetOwnerModuleProperties extends AbstractFineractModuleProperties {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-1
@@ -21,12 +21,15 @@ package org.apache.fineract.infrastructure.event.external.service;
|
|||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
import jakarta.persistence.PersistenceContext;
|
import jakarta.persistence.PersistenceContext;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.fineract.avro.BulkMessageItemV1;
|
import org.apache.fineract.avro.BulkMessageItemV1;
|
||||||
import org.apache.fineract.avro.BulkMessagePayloadV1;
|
import org.apache.fineract.avro.BulkMessagePayloadV1;
|
||||||
|
import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
||||||
|
import org.apache.fineract.infrastructure.core.service.DataEnricherProcessor;
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.BulkBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.BulkBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.repository.ExternalEventRepository;
|
import org.apache.fineract.infrastructure.event.external.repository.ExternalEventRepository;
|
||||||
@@ -50,6 +53,7 @@ public class ExternalEventService {
|
|||||||
private final BusinessEventSerializerFactory serializerFactory;
|
private final BusinessEventSerializerFactory serializerFactory;
|
||||||
private final ByteBufferConverter byteBufferConverter;
|
private final ByteBufferConverter byteBufferConverter;
|
||||||
private final BulkMessageItemFactory bulkMessageItemFactory;
|
private final BulkMessageItemFactory bulkMessageItemFactory;
|
||||||
|
private final DataEnricherProcessor dataEnricherProcessor;
|
||||||
|
|
||||||
private EntityManager entityManager;
|
private EntityManager entityManager;
|
||||||
|
|
||||||
@@ -98,7 +102,9 @@ public class ExternalEventService {
|
|||||||
String idempotencyKey = idempotencyKeyGenerator.generate(event);
|
String idempotencyKey = idempotencyKeyGenerator.generate(event);
|
||||||
BusinessEventSerializer serializer = serializerFactory.create(event);
|
BusinessEventSerializer serializer = serializerFactory.create(event);
|
||||||
String schema = serializer.getSupportedSchema().getName();
|
String schema = serializer.getSupportedSchema().getName();
|
||||||
byte[] data = serializer.serialize(event);
|
ByteBufferSerializable avroDto = dataEnricherProcessor.enrich(serializer.toAvroDTO(event));
|
||||||
|
ByteBuffer buffer = avroDto.toByteBuffer();
|
||||||
|
byte[] data = byteBufferConverter.convert(buffer);
|
||||||
Long aggregateRootId = event.getAggregateRootId();
|
Long aggregateRootId = event.getAggregateRootId();
|
||||||
|
|
||||||
return new ExternalEvent(eventType, eventCategory, schema, data, idempotencyKey, aggregateRootId);
|
return new ExternalEvent(eventType, eventCategory, schema, data, idempotencyKey, aggregateRootId);
|
||||||
|
|||||||
+6
-1
@@ -22,6 +22,8 @@ import java.io.IOException;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.fineract.avro.BulkMessageItemV1;
|
import org.apache.fineract.avro.BulkMessageItemV1;
|
||||||
|
import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
||||||
|
import org.apache.fineract.infrastructure.core.service.DataEnricherProcessor;
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializerFactory;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializerFactory;
|
||||||
@@ -34,10 +36,13 @@ public class BulkMessageItemFactory {
|
|||||||
|
|
||||||
private final BusinessEventSerializerFactory serializerFactory;
|
private final BusinessEventSerializerFactory serializerFactory;
|
||||||
private final ByteBufferConverter byteBufferConverter;
|
private final ByteBufferConverter byteBufferConverter;
|
||||||
|
private final DataEnricherProcessor dataEnricherProcessor;
|
||||||
|
|
||||||
public BulkMessageItemV1 createBulkMessageItem(int id, BusinessEvent<?> event) throws IOException {
|
public BulkMessageItemV1 createBulkMessageItem(int id, BusinessEvent<?> event) throws IOException {
|
||||||
BusinessEventSerializer eventSerializer = serializerFactory.create(event);
|
BusinessEventSerializer eventSerializer = serializerFactory.create(event);
|
||||||
byte[] serializedContent = eventSerializer.serialize(event);
|
ByteBufferSerializable avroDto = dataEnricherProcessor.enrich(eventSerializer.toAvroDTO(event));
|
||||||
|
ByteBuffer buffer = avroDto.toByteBuffer();
|
||||||
|
byte[] serializedContent = byteBufferConverter.convert(buffer);
|
||||||
String type = event.getType();
|
String type = event.getType();
|
||||||
String category = "nocategory"; // TODO: switch this to the actual category when implemented
|
String category = "nocategory"; // TODO: switch this to the actual category when implemented
|
||||||
String schema = eventSerializer.getSupportedSchema().getName();
|
String schema = eventSerializer.getSupportedSchema().getName();
|
||||||
|
|||||||
+5
-1
@@ -24,7 +24,7 @@ import org.apache.fineract.portfolio.loanaccount.data.LoanAccountData;
|
|||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mapping;
|
import org.mapstruct.Mapping;
|
||||||
|
|
||||||
@Mapper(config = AvroMapperConfig.class, uses = { LoanTransactionDataMapper.class })
|
@Mapper(config = AvroMapperConfig.class, uses = { LoanTransactionDataMapper.class, LoanChargeDataMapper.class })
|
||||||
public interface LoanAccountDataMapper {
|
public interface LoanAccountDataMapper {
|
||||||
|
|
||||||
// TODO: avoid prefix "is" in class attributes; I would recommend to fix this also in the Avro structures
|
// TODO: avoid prefix "is" in class attributes; I would recommend to fix this also in the Avro structures
|
||||||
@@ -32,5 +32,9 @@ public interface LoanAccountDataMapper {
|
|||||||
@Mapping(source = "floatingInterestRate", target = "isFloatingInterestRate")
|
@Mapping(source = "floatingInterestRate", target = "isFloatingInterestRate")
|
||||||
@Mapping(source = "topup", target = "isTopup")
|
@Mapping(source = "topup", target = "isTopup")
|
||||||
@Mapping(source = "interestRecalculationEnabled", target = "isInterestRecalculationEnabled")
|
@Mapping(source = "interestRecalculationEnabled", target = "isInterestRecalculationEnabled")
|
||||||
|
@Mapping(target = "externalOwnerId", ignore = true)
|
||||||
|
@Mapping(target = "settlementDate", ignore = true)
|
||||||
|
@Mapping(target = "purchasePriceRatio", ignore = true)
|
||||||
LoanAccountDataV1 map(LoanAccountData source);
|
LoanAccountDataV1 map(LoanAccountData source);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -23,10 +23,12 @@ import org.apache.fineract.avro.loan.v1.LoanChargeDataV1;
|
|||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.AvroMapperConfig;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.support.AvroMapperConfig;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanChargeData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanChargeData;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
|
||||||
@Mapper(config = AvroMapperConfig.class)
|
@Mapper(config = AvroMapperConfig.class)
|
||||||
public interface LoanChargeDataMapper {
|
public interface LoanChargeDataMapper {
|
||||||
|
|
||||||
|
@Mapping(target = "externalOwnerId", ignore = true)
|
||||||
LoanChargeDataV1 map(LoanChargeData source);
|
LoanChargeDataV1 map(LoanChargeData source);
|
||||||
|
|
||||||
LoanChargeDataRangeViewV1 mapRangeView(LoanChargeData source);
|
LoanChargeDataRangeViewV1 mapRangeView(LoanChargeData source);
|
||||||
|
|||||||
+1
@@ -29,5 +29,6 @@ public interface LoanTransactionDataMapper {
|
|||||||
|
|
||||||
// unpaidCharges are calculated and set explicitly based on if needed (only for charge-off transaction yet)
|
// unpaidCharges are calculated and set explicitly based on if needed (only for charge-off transaction yet)
|
||||||
@Mapping(target = "unpaidCharges", ignore = true)
|
@Mapping(target = "unpaidCharges", ignore = true)
|
||||||
|
@Mapping(target = "externalOwnerId", ignore = true)
|
||||||
LoanTransactionDataV1 map(LoanTransactionData source);
|
LoanTransactionDataV1 map(LoanTransactionData source);
|
||||||
}
|
}
|
||||||
|
|||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
/**
|
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
|
||||||
* or more contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. The ASF licenses this file
|
|
||||||
* to you under the Apache License, Version 2.0 (the
|
|
||||||
* "License"); you may not use this file except in compliance
|
|
||||||
* with the License. You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing,
|
|
||||||
* software distributed under the License is distributed on an
|
|
||||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
* KIND, either express or implied. See the License for the
|
|
||||||
* specific language governing permissions and limitations
|
|
||||||
* under the License.
|
|
||||||
*/
|
|
||||||
package org.apache.fineract.infrastructure.event.external.service.serialization.serializer;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.ByteBuffer;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.Setter;
|
|
||||||
import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
|
||||||
import org.apache.fineract.infrastructure.event.external.service.support.ByteBufferConverter;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
public abstract class AbstractBusinessEventSerializer implements BusinessEventSerializer {
|
|
||||||
|
|
||||||
@Setter(onMethod = @__({ @Autowired }))
|
|
||||||
private ByteBufferConverter byteBufferConverter;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> byte[] serialize(BusinessEvent<T> rawEvent) throws IOException {
|
|
||||||
ByteBufferSerializable avroDto = toAvroDTO(rawEvent);
|
|
||||||
ByteBuffer buffer = avroDto.toByteBuffer();
|
|
||||||
return byteBufferConverter.convert(buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent);
|
|
||||||
}
|
|
||||||
+4
-3
@@ -18,15 +18,16 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.fineract.infrastructure.event.external.service.serialization.serializer;
|
package org.apache.fineract.infrastructure.event.external.service.serialization.serializer;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import org.apache.avro.generic.GenericContainer;
|
import org.apache.avro.generic.GenericContainer;
|
||||||
|
import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
||||||
|
|
||||||
public interface BusinessEventSerializer {
|
public interface BusinessEventSerializer {
|
||||||
|
|
||||||
<T> boolean canSerialize(BusinessEvent<T> event);
|
<T> boolean canSerialize(BusinessEvent<T> event);
|
||||||
|
|
||||||
<T> byte[] serialize(BusinessEvent<T> rawEvent) throws IOException;
|
|
||||||
|
|
||||||
Class<? extends GenericContainer> getSupportedSchema();
|
Class<? extends GenericContainer> getSupportedSchema();
|
||||||
|
|
||||||
|
<T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -25,14 +25,14 @@ import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
|||||||
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.client.ClientBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.client.ClientBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.client.ClientDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.client.ClientDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.client.data.ClientData;
|
import org.apache.fineract.portfolio.client.data.ClientData;
|
||||||
import org.apache.fineract.portfolio.client.service.ClientReadPlatformService;
|
import org.apache.fineract.portfolio.client.service.ClientReadPlatformService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ClientBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class ClientBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final ClientReadPlatformService service;
|
private final ClientReadPlatformService service;
|
||||||
private final ClientDataMapper mapper;
|
private final ClientDataMapper mapper;
|
||||||
@@ -43,7 +43,7 @@ public class ClientBusinessEventSerializer extends AbstractBusinessEventSerializ
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
ClientBusinessEvent event = (ClientBusinessEvent) rawEvent;
|
ClientBusinessEvent event = (ClientBusinessEvent) rawEvent;
|
||||||
ClientData data = service.retrieveOne(event.get().getId());
|
ClientData data = service.retrieveOne(event.get().getId());
|
||||||
return mapper.map(data);
|
return mapper.map(data);
|
||||||
|
|||||||
+3
-3
@@ -25,7 +25,7 @@ import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
|||||||
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.deposit.FixedDepositAccountBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.deposit.FixedDepositAccountBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.fixeddeposit.FixedDepositAccountDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.fixeddeposit.FixedDepositAccountDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.savings.DepositAccountType;
|
import org.apache.fineract.portfolio.savings.DepositAccountType;
|
||||||
import org.apache.fineract.portfolio.savings.data.FixedDepositAccountData;
|
import org.apache.fineract.portfolio.savings.data.FixedDepositAccountData;
|
||||||
import org.apache.fineract.portfolio.savings.service.DepositAccountReadPlatformService;
|
import org.apache.fineract.portfolio.savings.service.DepositAccountReadPlatformService;
|
||||||
@@ -33,7 +33,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class FixedDepositAccountBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class FixedDepositAccountBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final DepositAccountReadPlatformService service;
|
private final DepositAccountReadPlatformService service;
|
||||||
private final FixedDepositAccountDataMapper mapper;
|
private final FixedDepositAccountDataMapper mapper;
|
||||||
@@ -44,7 +44,7 @@ public class FixedDepositAccountBusinessEventSerializer extends AbstractBusiness
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
FixedDepositAccountBusinessEvent event = (FixedDepositAccountBusinessEvent) rawEvent;
|
FixedDepositAccountBusinessEvent event = (FixedDepositAccountBusinessEvent) rawEvent;
|
||||||
FixedDepositAccountData data = (FixedDepositAccountData) service.retrieveOne(DepositAccountType.FIXED_DEPOSIT, event.get().getId());
|
FixedDepositAccountData data = (FixedDepositAccountData) service.retrieveOne(DepositAccountType.FIXED_DEPOSIT, event.get().getId());
|
||||||
return mapper.map(data);
|
return mapper.map(data);
|
||||||
|
|||||||
+3
-3
@@ -25,12 +25,12 @@ import org.apache.fineract.avro.generic.v1.CommandProcessingResultV1;
|
|||||||
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.group.GroupsBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.group.GroupsBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.generic.CommandProcessingResultMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.generic.CommandProcessingResultMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class GroupsBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class GroupsBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final CommandProcessingResultMapper mapper;
|
private final CommandProcessingResultMapper mapper;
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ public class GroupsBusinessEventSerializer extends AbstractBusinessEventSerializ
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
GroupsBusinessEvent event = (GroupsBusinessEvent) rawEvent;
|
GroupsBusinessEvent event = (GroupsBusinessEvent) rawEvent;
|
||||||
return mapper.map(event.get());
|
return mapper.map(event.get());
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -26,12 +26,12 @@ import org.apache.fineract.cob.data.LoanAccountsStayedLockedData;
|
|||||||
import org.apache.fineract.cob.loan.LoanAccountsStayedLockedBusinessEvent;
|
import org.apache.fineract.cob.loan.LoanAccountsStayedLockedBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanAccountsStayedLockedDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanAccountsStayedLockedDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class LoanAccountsStayedLockedBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanAccountsStayedLockedBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final LoanAccountsStayedLockedDataMapper mapper;
|
private final LoanAccountsStayedLockedDataMapper mapper;
|
||||||
|
|
||||||
@@ -41,7 +41,7 @@ public class LoanAccountsStayedLockedBusinessEventSerializer extends AbstractBus
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanAccountsStayedLockedBusinessEvent event = (LoanAccountsStayedLockedBusinessEvent) rawEvent;
|
LoanAccountsStayedLockedBusinessEvent event = (LoanAccountsStayedLockedBusinessEvent) rawEvent;
|
||||||
LoanAccountsStayedLockedData loanAccounts = event.get();
|
LoanAccountsStayedLockedData loanAccounts = event.get();
|
||||||
return mapper.map(loanAccounts);
|
return mapper.map(loanAccounts);
|
||||||
|
|||||||
+3
-3
@@ -26,7 +26,7 @@ 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.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
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.LoanChargePaidByReadPlatformService;
|
import org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadPlatformService;
|
||||||
@@ -35,7 +35,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class LoanAdjustTransactionBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanAdjustTransactionBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final LoanReadPlatformService service;
|
private final LoanReadPlatformService service;
|
||||||
private final LoanTransactionDataMapper mapper;
|
private final LoanTransactionDataMapper mapper;
|
||||||
@@ -47,7 +47,7 @@ public class LoanAdjustTransactionBusinessEventSerializer extends AbstractBusine
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanAdjustTransactionBusinessEvent event = (LoanAdjustTransactionBusinessEvent) rawEvent;
|
LoanAdjustTransactionBusinessEvent event = (LoanAdjustTransactionBusinessEvent) rawEvent;
|
||||||
LoanTransaction transactionToAdjust = event.get().getTransactionToAdjust();
|
LoanTransaction transactionToAdjust = event.get().getTransactionToAdjust();
|
||||||
LoanTransactionData transactionToAdjustData = service.retrieveLoanTransaction(transactionToAdjust.getLoan().getId(),
|
LoanTransactionData transactionToAdjustData = service.retrieveLoanTransaction(transactionToAdjust.getLoan().getId(),
|
||||||
|
|||||||
+3
-3
@@ -27,7 +27,7 @@ import org.apache.fineract.avro.loan.v1.LoanAccountDataV1;
|
|||||||
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.LoanBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.loan.LoanBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanAccountDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanAccountDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.delinquency.service.DelinquencyReadPlatformService;
|
import org.apache.fineract.portfolio.delinquency.service.DelinquencyReadPlatformService;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.CollectionData;
|
import org.apache.fineract.portfolio.loanaccount.data.CollectionData;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanAccountData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanAccountData;
|
||||||
@@ -40,7 +40,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class LoanBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final LoanReadPlatformService service;
|
private final LoanReadPlatformService service;
|
||||||
private final LoanAccountDataMapper mapper;
|
private final LoanAccountDataMapper mapper;
|
||||||
@@ -53,7 +53,7 @@ public class LoanBusinessEventSerializer extends AbstractBusinessEventSerializer
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanBusinessEvent event = (LoanBusinessEvent) rawEvent;
|
LoanBusinessEvent event = (LoanBusinessEvent) rawEvent;
|
||||||
Long loanId = event.get().getId();
|
Long loanId = event.get().getId();
|
||||||
LoanAccountData data = service.retrieveOne(loanId);
|
LoanAccountData data = service.retrieveOne(loanId);
|
||||||
|
|||||||
+3
-3
@@ -25,14 +25,14 @@ import org.apache.fineract.avro.loan.v1.LoanChargeDataV1;
|
|||||||
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.charge.LoanChargeBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.loan.charge.LoanChargeBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanChargeDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanChargeDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanChargeData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanChargeData;
|
||||||
import org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformService;
|
import org.apache.fineract.portfolio.loanaccount.service.LoanChargeReadPlatformService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class LoanChargeBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanChargeBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final LoanChargeReadPlatformService service;
|
private final LoanChargeReadPlatformService service;
|
||||||
private final LoanChargeDataMapper mapper;
|
private final LoanChargeDataMapper mapper;
|
||||||
@@ -43,7 +43,7 @@ public class LoanChargeBusinessEventSerializer extends AbstractBusinessEventSeri
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanChargeBusinessEvent event = (LoanChargeBusinessEvent) rawEvent;
|
LoanChargeBusinessEvent event = (LoanChargeBusinessEvent) rawEvent;
|
||||||
LoanChargeData data = service.retrieveLoanChargeDetails(event.get().getId(), event.get().getLoan().getId());
|
LoanChargeData data = service.retrieveLoanChargeDetails(event.get().getId(), event.get().getLoan().getId());
|
||||||
return mapper.map(data);
|
return mapper.map(data);
|
||||||
|
|||||||
+3
-3
@@ -24,7 +24,7 @@ import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
|||||||
import org.apache.fineract.avro.loan.v1.LoanChargeDeletedV1;
|
import org.apache.fineract.avro.loan.v1.LoanChargeDeletedV1;
|
||||||
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.charge.LoanDeleteChargeBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.loan.charge.LoanDeleteChargeBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.support.ByteBufferConverter;
|
import org.apache.fineract.infrastructure.event.external.service.support.ByteBufferConverter;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
|
import org.apache.fineract.portfolio.loanaccount.domain.LoanCharge;
|
||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
@@ -34,7 +34,7 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Order(Ordered.LOWEST_PRECEDENCE - 1)
|
@Order(Ordered.LOWEST_PRECEDENCE - 1)
|
||||||
public class LoanChargeDeletedBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanChargeDeletedBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final ByteBufferConverter byteBufferConverter;
|
private final ByteBufferConverter byteBufferConverter;
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ public class LoanChargeDeletedBusinessEventSerializer extends AbstractBusinessEv
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanDeleteChargeBusinessEvent event = (LoanDeleteChargeBusinessEvent) rawEvent;
|
LoanDeleteChargeBusinessEvent event = (LoanDeleteChargeBusinessEvent) rawEvent;
|
||||||
LoanCharge loanCharge = event.get();
|
LoanCharge loanCharge = event.get();
|
||||||
Long id = loanCharge.getId();
|
Long id = loanCharge.getId();
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ public class LoanChargeOffBusinessEventSerializer extends LoanTransactionBusines
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanTransactionDataV1 transactionDataV1 = (LoanTransactionDataV1) super.toAvroDTO(rawEvent);
|
LoanTransactionDataV1 transactionDataV1 = (LoanTransactionDataV1) super.toAvroDTO(rawEvent);
|
||||||
LoanTransactionBusinessEvent event = (LoanTransactionBusinessEvent) rawEvent;
|
LoanTransactionBusinessEvent event = (LoanTransactionBusinessEvent) rawEvent;
|
||||||
List<UnpaidChargeData> unpaidChargeDataList = loanTransactionRepository.fetchTotalUnpaidChargesForLoan(event.get().getLoan());
|
List<UnpaidChargeData> unpaidChargeDataList = loanTransactionRepository.fetchTotalUnpaidChargesForLoan(event.get().getLoan());
|
||||||
|
|||||||
+3
-3
@@ -34,7 +34,7 @@ import org.apache.fineract.infrastructure.event.external.service.serialization.m
|
|||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanChargeDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanChargeDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanDelinquencyRangeDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanDelinquencyRangeDataMapper;
|
||||||
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.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
|
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
|
||||||
import org.apache.fineract.portfolio.delinquency.service.DelinquencyReadPlatformService;
|
import org.apache.fineract.portfolio.delinquency.service.DelinquencyReadPlatformService;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.CollectionData;
|
import org.apache.fineract.portfolio.loanaccount.data.CollectionData;
|
||||||
@@ -50,7 +50,7 @@ import org.springframework.stereotype.Component;
|
|||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Order(Ordered.LOWEST_PRECEDENCE - 1)
|
@Order(Ordered.LOWEST_PRECEDENCE - 1)
|
||||||
public class LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanDelinquencyRangeChangeBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final LoanReadPlatformService service;
|
private final LoanReadPlatformService service;
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ public class LoanDelinquencyRangeChangeBusinessEventSerializer extends AbstractB
|
|||||||
private final AvroDateTimeMapper dataTimeMapper;
|
private final AvroDateTimeMapper dataTimeMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanDelinquencyRangeChangeBusinessEvent event = (LoanDelinquencyRangeChangeBusinessEvent) rawEvent;
|
LoanDelinquencyRangeChangeBusinessEvent event = (LoanDelinquencyRangeChangeBusinessEvent) rawEvent;
|
||||||
LoanAccountData data = service.retrieveOne(event.get().getId());
|
LoanAccountData data = service.retrieveOne(event.get().getId());
|
||||||
Long id = data.getId();
|
Long id = data.getId();
|
||||||
|
|||||||
+3
-3
@@ -25,14 +25,14 @@ import org.apache.fineract.avro.loan.v1.LoanProductDataV1;
|
|||||||
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.product.LoanProductBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.loan.product.LoanProductBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanProductDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanProductDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.loanproduct.data.LoanProductData;
|
import org.apache.fineract.portfolio.loanproduct.data.LoanProductData;
|
||||||
import org.apache.fineract.portfolio.loanproduct.service.LoanProductReadPlatformService;
|
import org.apache.fineract.portfolio.loanproduct.service.LoanProductReadPlatformService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class LoanProductBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanProductBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final LoanProductReadPlatformService service;
|
private final LoanProductReadPlatformService service;
|
||||||
private final LoanProductDataMapper mapper;
|
private final LoanProductDataMapper mapper;
|
||||||
@@ -43,7 +43,7 @@ public class LoanProductBusinessEventSerializer extends AbstractBusinessEventSer
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanProductBusinessEvent event = (LoanProductBusinessEvent) rawEvent;
|
LoanProductBusinessEvent event = (LoanProductBusinessEvent) rawEvent;
|
||||||
LoanProductData data = service.retrieveLoanProduct(event.get().getId());
|
LoanProductData data = service.retrieveLoanProduct(event.get().getId());
|
||||||
return mapper.map(data);
|
return mapper.map(data);
|
||||||
|
|||||||
+3
-3
@@ -30,7 +30,7 @@ import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
|||||||
import org.apache.fineract.infrastructure.event.business.domain.loan.repayment.LoanRepaymentBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.loan.repayment.LoanRepaymentBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanRepaymentPastDueDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.loan.LoanRepaymentPastDueDataMapper;
|
||||||
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.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
|
import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanRepaymentPastDueData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanRepaymentPastDueData;
|
||||||
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
|
||||||
@@ -40,14 +40,14 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class LoanRepaymentBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanRepaymentBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final AvroDateTimeMapper dataTimeMapper;
|
private final AvroDateTimeMapper dataTimeMapper;
|
||||||
private final LoanRepaymentPastDueDataMapper pastDueDataMapper;
|
private final LoanRepaymentPastDueDataMapper pastDueDataMapper;
|
||||||
private final LoanCalculateRepaymentPastDueService pastDueService;
|
private final LoanCalculateRepaymentPastDueService pastDueService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
|
|
||||||
LoanRepaymentBusinessEvent event = (LoanRepaymentBusinessEvent) rawEvent;
|
LoanRepaymentBusinessEvent event = (LoanRepaymentBusinessEvent) rawEvent;
|
||||||
LoanRepaymentScheduleInstallment repaymentInstallment = event.get();
|
LoanRepaymentScheduleInstallment repaymentInstallment = event.get();
|
||||||
|
|||||||
+3
-3
@@ -25,7 +25,7 @@ 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.transaction.LoanTransactionBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.loan.transaction.LoanTransactionBusinessEvent;
|
||||||
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.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
|
import org.apache.fineract.portfolio.loanaccount.data.LoanTransactionData;
|
||||||
import org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadPlatformService;
|
import org.apache.fineract.portfolio.loanaccount.service.LoanChargePaidByReadPlatformService;
|
||||||
import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService;
|
import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformService;
|
||||||
@@ -33,7 +33,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class LoanTransactionBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class LoanTransactionBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final LoanReadPlatformService service;
|
private final LoanReadPlatformService service;
|
||||||
private final LoanTransactionDataMapper loanTransactionMapper;
|
private final LoanTransactionDataMapper loanTransactionMapper;
|
||||||
@@ -45,7 +45,7 @@ public class LoanTransactionBusinessEventSerializer extends AbstractBusinessEven
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
LoanTransactionBusinessEvent event = (LoanTransactionBusinessEvent) rawEvent;
|
LoanTransactionBusinessEvent event = (LoanTransactionBusinessEvent) rawEvent;
|
||||||
Long loanId = event.get().getLoan().getId();
|
Long loanId = event.get().getLoan().getId();
|
||||||
Long loanTransactionId = event.get().getId();
|
Long loanTransactionId = event.get().getId();
|
||||||
|
|||||||
+3
-3
@@ -25,7 +25,7 @@ import org.apache.fineract.avro.recurringdeposit.v1.RecurringDepositAccountDataV
|
|||||||
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.deposit.RecurringDepositAccountBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.deposit.RecurringDepositAccountBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.recurringdeposit.RecurringDepositAccountDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.recurringdeposit.RecurringDepositAccountDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.savings.DepositAccountType;
|
import org.apache.fineract.portfolio.savings.DepositAccountType;
|
||||||
import org.apache.fineract.portfolio.savings.data.RecurringDepositAccountData;
|
import org.apache.fineract.portfolio.savings.data.RecurringDepositAccountData;
|
||||||
import org.apache.fineract.portfolio.savings.service.DepositAccountReadPlatformService;
|
import org.apache.fineract.portfolio.savings.service.DepositAccountReadPlatformService;
|
||||||
@@ -33,7 +33,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class RecurringDepositAccountBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class RecurringDepositAccountBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final DepositAccountReadPlatformService service;
|
private final DepositAccountReadPlatformService service;
|
||||||
private final RecurringDepositAccountDataMapper mapper;
|
private final RecurringDepositAccountDataMapper mapper;
|
||||||
@@ -44,7 +44,7 @@ public class RecurringDepositAccountBusinessEventSerializer extends AbstractBusi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
RecurringDepositAccountBusinessEvent event = (RecurringDepositAccountBusinessEvent) rawEvent;
|
RecurringDepositAccountBusinessEvent event = (RecurringDepositAccountBusinessEvent) rawEvent;
|
||||||
RecurringDepositAccountData data = (RecurringDepositAccountData) service.retrieveOne(DepositAccountType.RECURRING_DEPOSIT,
|
RecurringDepositAccountData data = (RecurringDepositAccountData) service.retrieveOne(DepositAccountType.RECURRING_DEPOSIT,
|
||||||
event.get().getId());
|
event.get().getId());
|
||||||
|
|||||||
+3
-3
@@ -25,14 +25,14 @@ import org.apache.fineract.avro.savings.v1.SavingsAccountDataV1;
|
|||||||
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.savings.SavingsAccountBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.savings.SavingsAccountBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.savings.SavingsAccountDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.savings.SavingsAccountDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
|
import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
|
||||||
import org.apache.fineract.portfolio.savings.service.SavingsAccountReadPlatformService;
|
import org.apache.fineract.portfolio.savings.service.SavingsAccountReadPlatformService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SavingsAccountBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class SavingsAccountBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final SavingsAccountReadPlatformService service;
|
private final SavingsAccountReadPlatformService service;
|
||||||
private final SavingsAccountDataMapper mapper;
|
private final SavingsAccountDataMapper mapper;
|
||||||
@@ -43,7 +43,7 @@ public class SavingsAccountBusinessEventSerializer extends AbstractBusinessEvent
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
SavingsAccountBusinessEvent event = (SavingsAccountBusinessEvent) rawEvent;
|
SavingsAccountBusinessEvent event = (SavingsAccountBusinessEvent) rawEvent;
|
||||||
SavingsAccountData data = service.retrieveOne(event.get().getId());
|
SavingsAccountData data = service.retrieveOne(event.get().getId());
|
||||||
return mapper.map(data);
|
return mapper.map(data);
|
||||||
|
|||||||
+3
-3
@@ -25,7 +25,7 @@ import org.apache.fineract.avro.savings.v1.SavingsAccountTransactionDataV1;
|
|||||||
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.savings.transaction.SavingsAccountTransactionBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.savings.transaction.SavingsAccountTransactionBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.savings.SavingsAccountTransactionDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.savings.SavingsAccountTransactionDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionData;
|
import org.apache.fineract.portfolio.savings.data.SavingsAccountTransactionData;
|
||||||
import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction;
|
import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction;
|
||||||
import org.apache.fineract.portfolio.savings.service.SavingsAccountReadPlatformService;
|
import org.apache.fineract.portfolio.savings.service.SavingsAccountReadPlatformService;
|
||||||
@@ -33,7 +33,7 @@ import org.springframework.stereotype.Component;
|
|||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SavingsAccountTransactionBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class SavingsAccountTransactionBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final SavingsAccountReadPlatformService service;
|
private final SavingsAccountReadPlatformService service;
|
||||||
private final SavingsAccountTransactionDataMapper mapper;
|
private final SavingsAccountTransactionDataMapper mapper;
|
||||||
@@ -44,7 +44,7 @@ public class SavingsAccountTransactionBusinessEventSerializer extends AbstractBu
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
SavingsAccountTransactionBusinessEvent event = (SavingsAccountTransactionBusinessEvent) rawEvent;
|
SavingsAccountTransactionBusinessEvent event = (SavingsAccountTransactionBusinessEvent) rawEvent;
|
||||||
SavingsAccountTransaction tx = event.get();
|
SavingsAccountTransaction tx = event.get();
|
||||||
SavingsAccountTransactionData data = service.retrieveSavingsTransaction(tx.getSavingsAccount().getId(), tx.getId(),
|
SavingsAccountTransactionData data = service.retrieveSavingsTransaction(tx.getSavingsAccount().getId(), tx.getId(),
|
||||||
|
|||||||
+3
-3
@@ -25,14 +25,14 @@ import org.apache.fineract.avro.share.v1.ShareAccountDataV1;
|
|||||||
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.share.ShareAccountBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.share.ShareAccountBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.share.ShareAccountDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.share.ShareAccountDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountData;
|
import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountData;
|
||||||
import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountReadPlatformService;
|
import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountReadPlatformService;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ShareAccountBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class ShareAccountBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final ShareAccountReadPlatformService service;
|
private final ShareAccountReadPlatformService service;
|
||||||
private final ShareAccountDataMapper mapper;
|
private final ShareAccountDataMapper mapper;
|
||||||
@@ -43,7 +43,7 @@ public class ShareAccountBusinessEventSerializer extends AbstractBusinessEventSe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
ShareAccountBusinessEvent event = (ShareAccountBusinessEvent) rawEvent;
|
ShareAccountBusinessEvent event = (ShareAccountBusinessEvent) rawEvent;
|
||||||
ShareAccountData data = service.retrieveOne(event.get().getId(), false);
|
ShareAccountData data = service.retrieveOne(event.get().getId(), false);
|
||||||
return mapper.map(data);
|
return mapper.map(data);
|
||||||
|
|||||||
+3
-3
@@ -25,14 +25,14 @@ import org.apache.fineract.avro.share.v1.ShareProductDataV1;
|
|||||||
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.share.ShareProductDividentsCreateBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.share.ShareProductDividentsCreateBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.share.ShareProductDataMapper;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.mapper.share.ShareProductDataMapper;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.AbstractBusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.portfolio.products.service.ShareProductReadPlatformService;
|
import org.apache.fineract.portfolio.products.service.ShareProductReadPlatformService;
|
||||||
import org.apache.fineract.portfolio.shareproducts.data.ShareProductData;
|
import org.apache.fineract.portfolio.shareproducts.data.ShareProductData;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class ShareProductDividentsCreateBusinessEventSerializer extends AbstractBusinessEventSerializer {
|
public class ShareProductDividentsCreateBusinessEventSerializer implements BusinessEventSerializer {
|
||||||
|
|
||||||
private final ShareProductReadPlatformService service;
|
private final ShareProductReadPlatformService service;
|
||||||
private final ShareProductDataMapper mapper;
|
private final ShareProductDataMapper mapper;
|
||||||
@@ -43,7 +43,7 @@ public class ShareProductDividentsCreateBusinessEventSerializer extends Abstract
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
public <T> ByteBufferSerializable toAvroDTO(BusinessEvent<T> rawEvent) {
|
||||||
ShareProductDividentsCreateBusinessEvent event = (ShareProductDividentsCreateBusinessEvent) rawEvent;
|
ShareProductDividentsCreateBusinessEvent event = (ShareProductDividentsCreateBusinessEvent) rawEvent;
|
||||||
ShareProductData data = (ShareProductData) service.retrieveOne(event.get(), false);
|
ShareProductData data = (ShareProductData) service.retrieveOne(event.get(), false);
|
||||||
return mapper.map(data);
|
return mapper.map(data);
|
||||||
|
|||||||
@@ -124,6 +124,8 @@ fineract.sampling.samplingRate=${FINERACT_SAMPLING_RATE:1000}
|
|||||||
fineract.sampling.sampledClasses=${FINERACT_SAMPLED_CLASSES:}
|
fineract.sampling.sampledClasses=${FINERACT_SAMPLED_CLASSES:}
|
||||||
fineract.sampling.resetPeriodSec=${FINERACT_SAMPLING_RESET_PERIOD_IN_SEC:60}
|
fineract.sampling.resetPeriodSec=${FINERACT_SAMPLING_RESET_PERIOD_IN_SEC:60}
|
||||||
|
|
||||||
|
fineract.module.external-asset-owner.enabled=${FINERACT_MODULE_EXTERNAL_ASSET_OWNER_ENABLED:true}
|
||||||
|
|
||||||
# Logging pattern for the console
|
# Logging pattern for the console
|
||||||
logging.pattern.console=${CONSOLE_LOG_PATTERN:%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(%replace([%X{correlationId}]){'\\[\\]', ''}) %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}
|
logging.pattern.console=${CONSOLE_LOG_PATTERN:%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(%replace([%X{correlationId}]){'\\[\\]', ''}) %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}}
|
||||||
|
|
||||||
|
|||||||
+25
-7
@@ -22,6 +22,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.BDDMockito.given;
|
import static org.mockito.BDDMockito.given;
|
||||||
|
import static org.mockito.Mockito.lenient;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
|
|
||||||
@@ -31,13 +32,17 @@ import java.nio.ByteBuffer;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
import org.apache.fineract.avro.BulkMessageItemV1;
|
import org.apache.fineract.avro.BulkMessageItemV1;
|
||||||
|
import org.apache.fineract.avro.generator.ByteBufferSerializable;
|
||||||
import org.apache.fineract.avro.loan.v1.LoanAccountDataV1;
|
import org.apache.fineract.avro.loan.v1.LoanAccountDataV1;
|
||||||
import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
|
import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
|
||||||
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
|
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
|
||||||
|
import org.apache.fineract.infrastructure.core.service.DataEnricherProcessor;
|
||||||
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
|
import org.apache.fineract.infrastructure.core.service.ThreadLocalContextUtil;
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.BulkBusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.BulkBusinessEvent;
|
||||||
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
import org.apache.fineract.infrastructure.event.business.domain.BusinessEvent;
|
||||||
@@ -48,6 +53,7 @@ import org.apache.fineract.infrastructure.event.external.service.message.BulkMes
|
|||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializer;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializerFactory;
|
import org.apache.fineract.infrastructure.event.external.service.serialization.serializer.BusinessEventSerializerFactory;
|
||||||
import org.apache.fineract.infrastructure.event.external.service.support.ByteBufferConverter;
|
import org.apache.fineract.infrastructure.event.external.service.support.ByteBufferConverter;
|
||||||
|
import org.apache.fineract.investor.enricher.LoanAccountDataV1Enricher;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
@@ -59,6 +65,9 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
|||||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||||
class ExternalEventServiceTest {
|
class ExternalEventServiceTest {
|
||||||
|
|
||||||
|
public static final String DUMMY_EXTERNAL_OWNER_ID = "dummy-external-owner-id";
|
||||||
|
|
||||||
|
public static final String DUMMY_SETTLEMENT_DATE = "2021-01-01";
|
||||||
@Mock
|
@Mock
|
||||||
private ExternalEventRepository repository;
|
private ExternalEventRepository repository;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -72,12 +81,17 @@ class ExternalEventServiceTest {
|
|||||||
@Mock
|
@Mock
|
||||||
private EntityManager entityManager;
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private LoanAccountDataV1Enricher loanAccountDataV1Enricher;
|
||||||
|
|
||||||
private ExternalEventService underTest;
|
private ExternalEventService underTest;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
lenient().when(loanAccountDataV1Enricher.isDataTypeSupported(any())).thenReturn(true);
|
||||||
|
DataEnricherProcessor dataEnricherProcessor = new DataEnricherProcessor(Optional.of(Arrays.asList(loanAccountDataV1Enricher)));
|
||||||
underTest = new ExternalEventService(repository, idempotencyKeyGenerator, serializerFactory, byteBufferConverter,
|
underTest = new ExternalEventService(repository, idempotencyKeyGenerator, serializerFactory, byteBufferConverter,
|
||||||
bulkMessageItemFactory);
|
bulkMessageItemFactory, dataEnricherProcessor);
|
||||||
underTest.setEntityManager(entityManager);
|
underTest.setEntityManager(entityManager);
|
||||||
FineractPlatformTenant tenant = new FineractPlatformTenant(1L, "default", "Default Tenant", "Europe/Budapest", null);
|
FineractPlatformTenant tenant = new FineractPlatformTenant(1L, "default", "Default Tenant", "Europe/Budapest", null);
|
||||||
ThreadLocalContextUtil.setTenant(tenant);
|
ThreadLocalContextUtil.setTenant(tenant);
|
||||||
@@ -101,7 +115,9 @@ class ExternalEventServiceTest {
|
|||||||
given(idempotencyKeyGenerator.generate(event)).willReturn("");
|
given(idempotencyKeyGenerator.generate(event)).willReturn("");
|
||||||
given(serializerFactory.create(event)).willReturn(eventSerializer);
|
given(serializerFactory.create(event)).willReturn(eventSerializer);
|
||||||
given(eventSerializer.getSupportedSchema()).will(invocation -> LoanAccountDataV1.class);
|
given(eventSerializer.getSupportedSchema()).will(invocation -> LoanAccountDataV1.class);
|
||||||
given(eventSerializer.serialize(event)).willThrow(IOException.class);
|
ByteBufferSerializable byteBuffer = mock(LoanAccountDataV1.class);
|
||||||
|
given(eventSerializer.toAvroDTO(event)).willReturn(byteBuffer);
|
||||||
|
given(byteBuffer.toByteBuffer()).willThrow(new IOException(""));
|
||||||
// when & then
|
// when & then
|
||||||
assertThatThrownBy(() -> underTest.postEvent(event)).isExactlyInstanceOf(RuntimeException.class);
|
assertThatThrownBy(() -> underTest.postEvent(event)).isExactlyInstanceOf(RuntimeException.class);
|
||||||
}
|
}
|
||||||
@@ -121,12 +137,16 @@ class ExternalEventServiceTest {
|
|||||||
given(event.getType()).willReturn(eventType);
|
given(event.getType()).willReturn(eventType);
|
||||||
given(idempotencyKeyGenerator.generate(event)).willReturn(idempotencyKey);
|
given(idempotencyKeyGenerator.generate(event)).willReturn(idempotencyKey);
|
||||||
given(serializerFactory.create(event)).willReturn(eventSerializer);
|
given(serializerFactory.create(event)).willReturn(eventSerializer);
|
||||||
|
LoanAccountDataV1 loanAccountData = new LoanAccountDataV1();
|
||||||
given(eventSerializer.getSupportedSchema()).will(invocation -> LoanAccountDataV1.class);
|
given(eventSerializer.getSupportedSchema()).will(invocation -> LoanAccountDataV1.class);
|
||||||
given(eventSerializer.serialize(event)).willReturn(data);
|
given(eventSerializer.toAvroDTO(event)).willReturn(loanAccountData);
|
||||||
|
given(byteBufferConverter.convert(any(ByteBuffer.class))).willReturn(data);
|
||||||
// when
|
// when
|
||||||
underTest.postEvent(event);
|
underTest.postEvent(event);
|
||||||
// then
|
// then
|
||||||
verify(repository).save(externalEventArgumentCaptor.capture());
|
verify(repository).save(externalEventArgumentCaptor.capture());
|
||||||
|
verify(loanAccountDataV1Enricher).isDataTypeSupported(LoanAccountDataV1.class);
|
||||||
|
verify(loanAccountDataV1Enricher).enrich(loanAccountData);
|
||||||
ExternalEvent externalEvent = externalEventArgumentCaptor.getValue();
|
ExternalEvent externalEvent = externalEventArgumentCaptor.getValue();
|
||||||
assertThat(externalEvent.getIdempotencyKey()).isEqualTo(idempotencyKey);
|
assertThat(externalEvent.getIdempotencyKey()).isEqualTo(idempotencyKey);
|
||||||
assertThat(externalEvent.getData()).isEqualTo(data);
|
assertThat(externalEvent.getData()).isEqualTo(data);
|
||||||
@@ -171,14 +191,13 @@ class ExternalEventServiceTest {
|
|||||||
String idempotencyKey = "key";
|
String idempotencyKey = "key";
|
||||||
BusinessEvent event = mock(BusinessEvent.class);
|
BusinessEvent event = mock(BusinessEvent.class);
|
||||||
BusinessEventSerializer eventSerializer = mock(BusinessEventSerializer.class);
|
BusinessEventSerializer eventSerializer = mock(BusinessEventSerializer.class);
|
||||||
byte[] data = new byte[0];
|
|
||||||
|
|
||||||
given(event.getType()).willReturn(eventType);
|
given(event.getType()).willReturn(eventType);
|
||||||
given(event.getCategory()).willReturn(eventCategory);
|
given(event.getCategory()).willReturn(eventCategory);
|
||||||
given(idempotencyKeyGenerator.generate(event)).willReturn(idempotencyKey);
|
given(idempotencyKeyGenerator.generate(event)).willReturn(idempotencyKey);
|
||||||
given(serializerFactory.create(event)).willReturn(eventSerializer);
|
given(serializerFactory.create(event)).willReturn(eventSerializer);
|
||||||
given(eventSerializer.getSupportedSchema()).will(invocation -> LoanAccountDataV1.class);
|
given(eventSerializer.getSupportedSchema()).will(invocation -> LoanAccountDataV1.class);
|
||||||
given(eventSerializer.serialize(event)).willReturn(data);
|
given(eventSerializer.toAvroDTO(event)).willReturn(new LoanAccountDataV1());
|
||||||
// when
|
// when
|
||||||
underTest.postEvent(event);
|
underTest.postEvent(event);
|
||||||
// then
|
// then
|
||||||
@@ -198,14 +217,13 @@ class ExternalEventServiceTest {
|
|||||||
String idempotencyKey = "key";
|
String idempotencyKey = "key";
|
||||||
BusinessEvent event = mock(BusinessEvent.class);
|
BusinessEvent event = mock(BusinessEvent.class);
|
||||||
BusinessEventSerializer eventSerializer = mock(BusinessEventSerializer.class);
|
BusinessEventSerializer eventSerializer = mock(BusinessEventSerializer.class);
|
||||||
byte[] data = new byte[0];
|
|
||||||
|
|
||||||
given(event.getType()).willReturn(eventType);
|
given(event.getType()).willReturn(eventType);
|
||||||
given(event.getCategory()).willReturn(eventCategory);
|
given(event.getCategory()).willReturn(eventCategory);
|
||||||
given(idempotencyKeyGenerator.generate(event)).willReturn(idempotencyKey);
|
given(idempotencyKeyGenerator.generate(event)).willReturn(idempotencyKey);
|
||||||
given(serializerFactory.create(event)).willReturn(eventSerializer);
|
given(serializerFactory.create(event)).willReturn(eventSerializer);
|
||||||
given(eventSerializer.getSupportedSchema()).will(invocation -> LoanAccountDataV1.class);
|
given(eventSerializer.getSupportedSchema()).will(invocation -> LoanAccountDataV1.class);
|
||||||
given(eventSerializer.serialize(event)).willReturn(data);
|
given(eventSerializer.toAvroDTO(event)).willReturn(new LoanAccountDataV1());
|
||||||
// when
|
// when
|
||||||
underTest.postEvent(event);
|
underTest.postEvent(event);
|
||||||
// then
|
// then
|
||||||
|
|||||||
-1
@@ -103,7 +103,6 @@ public class LoanRepaymentBusinessEventSerializerTest {
|
|||||||
LocalDate loanInstallmentRepaymentDueDate = DateUtils.getBusinessLocalDate().plusDays(1);
|
LocalDate loanInstallmentRepaymentDueDate = DateUtils.getBusinessLocalDate().plusDays(1);
|
||||||
|
|
||||||
Loan loanForProcessing = Mockito.mock(Loan.class);
|
Loan loanForProcessing = Mockito.mock(Loan.class);
|
||||||
LoanProduct loanProduct = Mockito.mock(LoanProduct.class);
|
|
||||||
LoanSummary loanSummary = Mockito.mock(LoanSummary.class);
|
LoanSummary loanSummary = Mockito.mock(LoanSummary.class);
|
||||||
MonetaryCurrency loanCurrency = Mockito.mock(MonetaryCurrency.class);
|
MonetaryCurrency loanCurrency = Mockito.mock(MonetaryCurrency.class);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user