This is an automated email from the ASF dual-hosted git repository.
adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git
The following commit(s) were added to refs/heads/develop by this push:
new 97515fcba9 FINERACT-2169: Refactor external assets owner api
controller;
97515fcba9 is described below
commit 97515fcba975edfe99d459bfb2eb0eeb3bea9013
Author: viktorpavlenko <[email protected]>
AuthorDate: Thu Mar 27 16:40:09 2025 +0200
FINERACT-2169: Refactor external assets owner api controller;
---
.../command/CommandHandlerRegistry.java} | 21 ++--
.../core/service/CommandParameterUtil.java | 5 +
.../AssetExternalizationStepDef.java | 14 +--
.../api/ExternalAssetOwnersApiResource.java | 112 +++++++++------------
.../api/ExternalAssetOwnersApiResourceSwagger.java | 91 -----------------
.../data/request/ExternalAssetOwnerRequest.java | 25 +++--
.../common/ExternalAssetOwnerHelper.java | 4 +-
.../ExternalAssetOwnerTransferCancelTest.java | 6 +-
.../ExternalAssetOwnerTransferTest.java | 6 +-
.../InitiateExternalAssetOwnerTransferTest.java | 6 +-
10 files changed, 105 insertions(+), 185 deletions(-)
diff --git
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
b/fineract-core/src/main/java/org/apache/fineract/batch/command/CommandHandlerRegistry.java
similarity index 58%
copy from
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
copy to
fineract-core/src/main/java/org/apache/fineract/batch/command/CommandHandlerRegistry.java
index 69da158c9a..632efd84c4 100644
---
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
+++
b/fineract-core/src/main/java/org/apache/fineract/batch/command/CommandHandlerRegistry.java
@@ -16,16 +16,25 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.fineract.infrastructure.core.service;
+package org.apache.fineract.batch.command;
-import org.apache.commons.lang3.StringUtils;
+import java.util.Map;
+import java.util.function.BiFunction;
+import lombok.RequiredArgsConstructor;
-public final class CommandParameterUtil {
+@RequiredArgsConstructor
+public final class CommandHandlerRegistry<K, P1, P2, R> {
- private CommandParameterUtil() {}
+ private final Map<K, BiFunction<P1, P2, R>> handlers;
- public static boolean is(final String commandParam, final String
commandValue) {
- return StringUtils.isNotBlank(commandParam) &&
commandParam.trim().equalsIgnoreCase(commandValue);
+ public void register(K key, BiFunction<P1, P2, R> handler) {
+ handlers.put(key, handler);
}
+ public R execute(K key, P1 param1, P2 param2, RuntimeException ex) {
+ return handlers.getOrDefault(key, (p1, p2) -> {
+ throw ex;
+ }).apply(param1, param2);
+
+ }
}
diff --git
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
index 69da158c9a..51e97d7358 100644
---
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
+++
b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
@@ -22,6 +22,11 @@ import org.apache.commons.lang3.StringUtils;
public final class CommandParameterUtil {
+ public static final String INTERMEDIARY_SALE_COMMAND_VALUE =
"intermediarySale";
+ public static final String SALE_COMMAND_VALUE = "sale";
+ public static final String BUY_BACK_COMMAND_VALUE = "buyback";
+ public static final String CANCEL_COMMAND_VALUE = "cancel";
+
private CommandParameterUtil() {}
public static boolean is(final String commandParam, final String
commandValue) {
diff --git
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/assetexternalization/AssetExternalizationStepDef.java
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/assetexternalization/AssetExternalizationStepDef.java
index c51da467ab..82d597abcb 100644
---
a/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/assetexternalization/AssetExternalizationStepDef.java
+++
b/fineract-e2e-tests-core/src/test/java/org/apache/fineract/test/stepdef/assetexternalization/AssetExternalizationStepDef.java
@@ -49,12 +49,12 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
+import org.apache.fineract.client.models.ExternalAssetOwnerRequest;
import org.apache.fineract.client.models.ExternalOwnerJournalEntryData;
import org.apache.fineract.client.models.ExternalOwnerTransferJournalEntryData;
import org.apache.fineract.client.models.ExternalTransferData;
import org.apache.fineract.client.models.JournalEntryData;
import org.apache.fineract.client.models.PageExternalTransferData;
-import org.apache.fineract.client.models.PostInitiateTransferRequest;
import org.apache.fineract.client.models.PostInitiateTransferResponse;
import org.apache.fineract.client.models.PostLoansResponse;
import org.apache.fineract.client.services.ExternalAssetOwnersApi;
@@ -116,7 +116,7 @@ public class AssetExternalizationStepDef extends
AbstractStepDef {
Response<PostLoansResponse> loanResponse =
testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
long loanId = loanResponse.body().getLoanId();
- PostInitiateTransferRequest request = new
PostInitiateTransferRequest();
+ ExternalAssetOwnerRequest request = new ExternalAssetOwnerRequest();
if (transferData.get(0).equals(TRANSACTION_TYPE_BUYBACK)) {
request.settlementDate(transferData.get(1))//
.transferExternalId(transferExternalId)//
@@ -163,7 +163,7 @@ public class AssetExternalizationStepDef extends
AbstractStepDef {
Response<PostLoansResponse> loanResponse =
testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
long loanId = loanResponse.body().getLoanId();
- PostInitiateTransferRequest request = new
PostInitiateTransferRequest()//
+ ExternalAssetOwnerRequest request = new ExternalAssetOwnerRequest()//
.settlementDate(settlementDate)//
.ownerExternalId(null)//
.transferExternalId(testContext().get(TestContextKey.ASSET_EXTERNALIZATION_TRANSFER_EXTERNAL_ID_FROM_RESPONSE))//
@@ -202,7 +202,7 @@ public class AssetExternalizationStepDef extends
AbstractStepDef {
Response<PostLoansResponse> loanResponse =
testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
String loanExternalId = loanResponse.body().getResourceExternalId();
- PostInitiateTransferRequest request = new
PostInitiateTransferRequest();
+ ExternalAssetOwnerRequest request = new ExternalAssetOwnerRequest();
if (transferData.get(0).equals(TRANSACTION_TYPE_BUYBACK)) {
request.settlementDate(transferData.get(1))//
.transferExternalId(transferExternalId)//
@@ -381,7 +381,7 @@ public class AssetExternalizationStepDef extends
AbstractStepDef {
String transferExternalId =
testContext().get(TestContextKey.ASSET_EXTERNALIZATION_TRANSFER_EXTERNAL_ID_FROM_RESPONSE);
- PostInitiateTransferRequest request = new
PostInitiateTransferRequest()//
+ ExternalAssetOwnerRequest request = new ExternalAssetOwnerRequest()//
.settlementDate(transferData.get(1))//
.transferExternalId(transferExternalId)//
.dateFormat(DATE_FORMAT_ASSET_EXT)//
@@ -417,7 +417,7 @@ public class AssetExternalizationStepDef extends
AbstractStepDef {
Response<PostLoansResponse> loanResponse =
testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
long loanId = loanResponse.body().getLoanId();
- PostInitiateTransferRequest request = new
PostInitiateTransferRequest();
+ ExternalAssetOwnerRequest request = new ExternalAssetOwnerRequest();
if (transferData.get(0).equals(TRANSACTION_TYPE_BUYBACK)) {
request.settlementDate(transferData.get(1))//
.transferExternalId(null)//
@@ -465,7 +465,7 @@ public class AssetExternalizationStepDef extends
AbstractStepDef {
Response<PostLoansResponse> loanResponse =
testContext().get(TestContextKey.LOAN_CREATE_RESPONSE);
long loanId = loanResponse.body().getLoanId();
- PostInitiateTransferRequest request = new
PostInitiateTransferRequest()//
+ ExternalAssetOwnerRequest request = new ExternalAssetOwnerRequest()//
.settlementDate(transferData.get(0))//
.ownerExternalId(null)//
.transferExternalId(null)//
diff --git
a/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java
b/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java
index e1bfb97472..fef390d75f 100644
---
a/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java
+++
b/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResource.java
@@ -18,6 +18,11 @@
*/
package org.apache.fineract.investor.api;
+import static
org.apache.fineract.infrastructure.core.service.CommandParameterUtil.BUY_BACK_COMMAND_VALUE;
+import static
org.apache.fineract.infrastructure.core.service.CommandParameterUtil.CANCEL_COMMAND_VALUE;
+import static
org.apache.fineract.infrastructure.core.service.CommandParameterUtil.INTERMEDIARY_SALE_COMMAND_VALUE;
+import static
org.apache.fineract.infrastructure.core.service.CommandParameterUtil.SALE_COMMAND_VALUE;
+
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
@@ -33,10 +38,11 @@ import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
-import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
-import jakarta.ws.rs.core.UriInfo;
+import java.util.Map;
import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.fineract.batch.command.CommandHandlerRegistry;
import org.apache.fineract.commands.domain.CommandWrapper;
import org.apache.fineract.commands.service.CommandWrapperBuilder;
import
org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
@@ -44,7 +50,6 @@ import
org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.domain.ExternalId;
import
org.apache.fineract.infrastructure.core.exception.UnrecognizedQueryParamException;
import
org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
-import org.apache.fineract.infrastructure.core.service.CommandParameterUtil;
import org.apache.fineract.infrastructure.core.service.PagedRequest;
import
org.apache.fineract.infrastructure.security.service.PlatformUserRightsContext;
import
org.apache.fineract.investor.api.search.ExternalAssetOwnersSearchApiDelegate;
@@ -52,7 +57,7 @@ import
org.apache.fineract.investor.config.InvestorModuleIsEnabledCondition;
import org.apache.fineract.investor.data.ExternalOwnerJournalEntryData;
import org.apache.fineract.investor.data.ExternalOwnerTransferJournalEntryData;
import org.apache.fineract.investor.data.ExternalTransferData;
-import org.apache.fineract.investor.data.ExternalTransferResponseData;
+import org.apache.fineract.investor.data.request.ExternalAssetOwnerRequest;
import org.apache.fineract.investor.service.ExternalAssetOwnersReadService;
import
org.apache.fineract.investor.service.search.domain.ExternalAssetOwnerSearchRequest;
import
org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformServiceCommon;
@@ -69,41 +74,55 @@ public class ExternalAssetOwnersApiResource {
private final PlatformUserRightsContext platformUserRightsContext;
private final ExternalAssetOwnersReadService
externalAssetOwnersReadService;
- private final DefaultToApiJsonSerializer<ExternalTransferResponseData>
postApiJsonSerializerService;
+ private final DefaultToApiJsonSerializer<String>
postApiJsonSerializerService;
private final PortfolioCommandSourceWritePlatformService
commandsSourceWritePlatformService;
private final LoanReadPlatformServiceCommon loanReadPlatformService;
private final ExternalAssetOwnersSearchApiDelegate delegate;
+ private static final CommandHandlerRegistry<String, Long, String,
CommandWrapper> COMMAND_HANDLER_REGISTRY = new CommandHandlerRegistry<>(
+ Map.of(CANCEL_COMMAND_VALUE, (id, json) -> new
CommandWrapperBuilder().cancelTransactionByIdToExternalAssetOwner(id).build(),
+ INTERMEDIARY_SALE_COMMAND_VALUE,
+ (id, json) -> new
CommandWrapperBuilder().withJson(json).intermediarySaleLoanToExternalAssetOwner(id).build(),
+ SALE_COMMAND_VALUE, (id, json) -> new
CommandWrapperBuilder().withJson(json).saleLoanToExternalAssetOwner(id).build(),
+ BUY_BACK_COMMAND_VALUE,
+ (id, json) -> new
CommandWrapperBuilder().withJson(json).buybackLoanToExternalAssetOwner(id).build()));
+
@POST
@Path("/transfers/loans/{loanId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
- @RequestBody(required = true, content = @Content(schema =
@Schema(implementation =
ExternalAssetOwnersApiResourceSwagger.PostInitiateTransferRequest.class)))
+ @RequestBody(required = true, content = @Content(schema =
@Schema(implementation = ExternalAssetOwnerRequest.class)))
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content =
@Content(schema = @Schema(implementation =
ExternalAssetOwnersApiResourceSwagger.PostInitiateTransferResponse.class))),
@ApiResponse(responseCode = "403", description = "Transfer cannot
be initiated") })
- public String transferRequestWithLoanId(@PathParam("loanId") final Long
loanId,
+ public CommandProcessingResult
transferRequestWithLoanId(@PathParam("loanId") final Long loanId,
@QueryParam("command") @Parameter(description = "command") final
String commandParam,
- @Parameter(hidden = true) final String apiRequestBodyAsJson) {
+ @Parameter(hidden = true) ExternalAssetOwnerRequest assetOwnerReq)
{
platformUserRightsContext.isAuthenticated();
- return getResult(loanId, apiRequestBodyAsJson, commandParam);
+ final String serializedAssetRequest =
postApiJsonSerializerService.serialize(assetOwnerReq);
+ final CommandWrapper commandRequest =
COMMAND_HANDLER_REGISTRY.execute(StringUtils.toRootLowerCase(commandParam),
loanId,
+ serializedAssetRequest, new
UnrecognizedQueryParamException("command", commandParam));
+ return
this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
}
@POST
@Path("/transfers/loans/external-id/{loanExternalId}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
- @RequestBody(required = true, content = @Content(schema =
@Schema(implementation =
ExternalAssetOwnersApiResourceSwagger.PostInitiateTransferRequest.class)))
+ @RequestBody(required = true, content = @Content(schema =
@Schema(implementation = ExternalAssetOwnerRequest.class)))
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content =
@Content(schema = @Schema(implementation =
ExternalAssetOwnersApiResourceSwagger.PostInitiateTransferResponse.class))),
@ApiResponse(responseCode = "403", description = "Transfer cannot
be initiated") })
- public String
transferRequestWithLoanExternalId(@PathParam("loanExternalId") final String
externalLoanId,
+ public CommandProcessingResult
transferRequestWithLoanExternalId(@PathParam("loanExternalId") final String
externalLoanId,
@QueryParam("command") @Parameter(description = "command") final
String commandParam,
- @Parameter(hidden = true) final String apiRequestBodyAsJson) {
+ @Parameter(hidden = true) ExternalAssetOwnerRequest assetOwnerReq)
{
platformUserRightsContext.isAuthenticated();
- Long loanId =
loanReadPlatformService.getLoanIdByLoanExternalId(externalLoanId);
+ final Long loanId =
loanReadPlatformService.getLoanIdByLoanExternalId(externalLoanId);
+ final String serializedAssetRequest =
postApiJsonSerializerService.serialize(assetOwnerReq);
+ final CommandWrapper commandRequest =
COMMAND_HANDLER_REGISTRY.execute(StringUtils.toRootLowerCase(commandParam),
loanId,
+ serializedAssetRequest, new
UnrecognizedQueryParamException("command", commandParam));
+ return
this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
- return getResult(loanId, apiRequestBodyAsJson, commandParam);
}
@POST
@@ -113,11 +132,14 @@ public class ExternalAssetOwnersApiResource {
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content =
@Content(schema = @Schema(implementation =
ExternalAssetOwnersApiResourceSwagger.PostInitiateTransferResponse.class))),
@ApiResponse(responseCode = "403", description = "Transfer cannot
be initiated") })
- public String transferRequestWithId(@PathParam("id") final Long id,
+ public CommandProcessingResult transferRequestWithId(@PathParam("id")
final Long id,
@QueryParam("command") @Parameter(description = "command") final
String commandParam,
- @Parameter(hidden = true) final String apiRequestBodyAsJson) {
+ @Parameter(hidden = true) ExternalAssetOwnerRequest assetOwnerReq)
{
platformUserRightsContext.isAuthenticated();
- return getResultByTransferId(id, commandParam);
+ final String serializedAssetRequest =
postApiJsonSerializerService.serialize(assetOwnerReq);
+ final CommandWrapper commandRequest =
COMMAND_HANDLER_REGISTRY.execute(StringUtils.toRootLowerCase(commandParam), id,
+ serializedAssetRequest, new
UnrecognizedQueryParamException("command", commandParam));
+ return
this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
}
@POST
@@ -127,12 +149,15 @@ public class ExternalAssetOwnersApiResource {
@ApiResponses({
@ApiResponse(responseCode = "200", description = "OK", content =
@Content(schema = @Schema(implementation =
ExternalAssetOwnersApiResourceSwagger.PostInitiateTransferResponse.class))),
@ApiResponse(responseCode = "403", description = "Transfer cannot
be initiated") })
- public String transferRequestWithId(@PathParam("externalId") final String
externalId,
+ public CommandProcessingResult
transferRequestWithId(@PathParam("externalId") final String externalId,
@QueryParam("command") @Parameter(description = "command") final
String commandParam,
- @Parameter(hidden = true) final String apiRequestBodyAsJson) {
+ @Parameter(hidden = true) ExternalAssetOwnerRequest assetOwnerReq)
{
platformUserRightsContext.isAuthenticated();
- Long id =
externalAssetOwnersReadService.retrieveLastTransferIdByExternalId(new
ExternalId(externalId));
- return getResultByTransferId(id, commandParam);
+ final Long id =
externalAssetOwnersReadService.retrieveLastTransferIdByExternalId(new
ExternalId(externalId));
+ final String serializedAssetRequest =
postApiJsonSerializerService.serialize(assetOwnerReq);
+ final CommandWrapper commandRequest =
COMMAND_HANDLER_REGISTRY.execute(StringUtils.toRootLowerCase(commandParam), id,
+ serializedAssetRequest, new
UnrecognizedQueryParamException("command", commandParam));
+ return
this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
}
@GET
@@ -145,10 +170,9 @@ public class ExternalAssetOwnersApiResource {
@QueryParam("loanId") @Parameter(description = "loanId") final
Long loanId,
@QueryParam("loanExternalId") @Parameter(description =
"loanExternalId") final String loanExternalId,
@QueryParam("offset") @Parameter(description = "offset") final
Integer offset,
- @QueryParam("limit") @Parameter(description = "limit") final
Integer limit, @Context final UriInfo uriInfo) {
+ @QueryParam("limit") @Parameter(description = "limit") final
Integer limit) {
platformUserRightsContext.isAuthenticated();
return externalAssetOwnersReadService.retrieveTransferData(loanId,
loanExternalId, transferExternalId, offset, limit);
-
}
@GET
@@ -159,11 +183,9 @@ public class ExternalAssetOwnersApiResource {
public ExternalTransferData getActiveTransfer(
@QueryParam("transferExternalId") @Parameter(description =
"transferExternalId") final String transferExternalId,
@QueryParam("loanId") @Parameter(description = "loanId") final
Long loanId,
- @QueryParam("loanExternalId") @Parameter(description =
"loanExternalId") final String loanExternalId,
- @Context final UriInfo uriInfo) {
+ @QueryParam("loanExternalId") @Parameter(description =
"loanExternalId") final String loanExternalId) {
platformUserRightsContext.isAuthenticated();
return
externalAssetOwnersReadService.retrieveActiveTransferData(loanId,
loanExternalId, transferExternalId);
-
}
@GET
@@ -174,10 +196,9 @@ public class ExternalAssetOwnersApiResource {
public ExternalOwnerTransferJournalEntryData getJournalEntriesOfTransfer(
@PathParam("transferId") @Parameter(description = "transferId")
final Long transferId,
@QueryParam("offset") @Parameter(description = "offset") final
Integer offset,
- @QueryParam("limit") @Parameter(description = "limit") final
Integer limit, @Context final UriInfo uriInfo) {
+ @QueryParam("limit") @Parameter(description = "limit") final
Integer limit) {
platformUserRightsContext.isAuthenticated();
return
externalAssetOwnersReadService.retrieveJournalEntriesOfTransfer(transferId,
offset, limit);
-
}
@GET
@@ -188,10 +209,9 @@ public class ExternalAssetOwnersApiResource {
public ExternalOwnerJournalEntryData getJournalEntriesOfOwner(
@PathParam("ownerExternalId") @Parameter(description =
"ownerExternalId") final String ownerExternalId,
@QueryParam("offset") @Parameter(description = "offset") final
Integer offset,
- @QueryParam("limit") @Parameter(description = "limit") final
Integer limit, @Context final UriInfo uriInfo) {
+ @QueryParam("limit") @Parameter(description = "limit") final
Integer limit) {
platformUserRightsContext.isAuthenticated();
return
externalAssetOwnersReadService.retrieveJournalEntriesOfOwner(ownerExternalId,
offset, limit);
-
}
@POST
@@ -202,37 +222,5 @@ public class ExternalAssetOwnersApiResource {
public Page<ExternalTransferData> searchInvestorData(@Parameter
PagedRequest<ExternalAssetOwnerSearchRequest> request) {
platformUserRightsContext.isAuthenticated();
return delegate.searchInvestorData(request);
-
- }
-
- private String getResultByTransferId(Long id, String command) {
- final CommandWrapperBuilder builder = new CommandWrapperBuilder();
- CommandWrapper commandRequest;
- if (CommandParameterUtil.is(command, "cancel")) {
- commandRequest =
builder.cancelTransactionByIdToExternalAssetOwner(id).build();
- } else {
- throw new UnrecognizedQueryParamException("command", command);
- }
- CommandProcessingResult result =
this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
- return postApiJsonSerializerService.serialize(result);
- }
-
- private String getResult(Long loanId, String apiRequestBodyAsJson, String
commandParam) {
- final CommandWrapperBuilder builder = new
CommandWrapperBuilder().withJson(apiRequestBodyAsJson);
- CommandWrapper commandRequest = null;
- if (CommandParameterUtil.is(commandParam, "intermediarySale")) {
- commandRequest =
builder.intermediarySaleLoanToExternalAssetOwner(loanId).build();
- } else if (CommandParameterUtil.is(commandParam, "sale")) {
- commandRequest =
builder.saleLoanToExternalAssetOwner(loanId).build();
- } else if (CommandParameterUtil.is(commandParam, "buyback")) {
- commandRequest =
builder.buybackLoanToExternalAssetOwner(loanId).build();
- }
-
- if (commandRequest == null) {
- throw new UnrecognizedQueryParamException("command", commandParam);
- }
- CommandProcessingResult result =
this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
-
- return postApiJsonSerializerService.serialize(result);
}
}
diff --git
a/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResourceSwagger.java
b/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResourceSwagger.java
index 787769f4e5..92e0b9a091 100644
---
a/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResourceSwagger.java
+++
b/fineract-investor/src/main/java/org/apache/fineract/investor/api/ExternalAssetOwnersApiResourceSwagger.java
@@ -20,103 +20,12 @@ package org.apache.fineract.investor.api;
import io.swagger.v3.oas.annotations.media.Schema;
import java.time.LocalDate;
-import java.util.Set;
-import org.apache.fineract.investor.data.ExternalTransferStatus;
@SuppressWarnings({ "MemberName" })
final class ExternalAssetOwnersApiResourceSwagger {
private ExternalAssetOwnersApiResourceSwagger() {}
- static final class GetExternalTransferPageItems {
-
- private GetExternalTransferPageItems() {}
-
- static final class GetExternalTransferOwner {
-
- private GetExternalTransferOwner() {}
-
- @Schema(example = "e1156fbe-38bb-42f8-b491-fca02075f40e")
- public String externalId;
- }
-
- static final class GetExternalTransferLoan {
-
- private GetExternalTransferLoan() {}
-
- @Schema(example = "1")
- public Long loanId;
-
- @Schema(example = "e1156fbe-38bb-42f8-b491-fca02075f40e")
- public String externalId;
- }
-
- @Schema(example = "1")
- public Long transferId;
-
- public GetExternalTransferOwner owner;
-
- public GetExternalTransferLoan loan;
-
- @Schema(example = "e1156fbe-38bb-42f8-b491-fca02075f40e")
- public String transferExternalId;
-
- @Schema(example = "e1156fbe-38bb-42f8-b491-fca02075f40e")
- public String transferExternalGroupId;
-
- @Schema(example = "1")
- public String purchasePriceRatio;
-
- @Schema(example = "[2023, 5, 23]")
- public LocalDate settlementDate;
-
- @Schema(example = "PENDING")
- public ExternalTransferStatus status;
-
- @Schema(example = "[2023, 5, 1]")
- public LocalDate effectiveFrom;
-
- @Schema(example = "[2023, 5, 23]")
- public LocalDate effectiveTo;
- }
-
- @Schema(description = "ExternalTransferResponse")
- public static final class GetExternalTransferResponse {
-
- private GetExternalTransferResponse() {}
-
- @Schema(example = "20")
- public Integer totalFilteredRecords;
- public Set<GetExternalTransferPageItems> pageItems;
- }
-
- @Schema(description = "PostInitiateTransferRequest")
- public static final class PostInitiateTransferRequest {
-
- private PostInitiateTransferRequest() {}
-
- @Schema(example = "2023-5-23")
- public String settlementDate;
-
- @Schema(example = "1234567890987654321abc")
- public String ownerExternalId;
-
- @Schema(example = "36efeb06-d835-48a1-99eb-09bd1d348c1e")
- public String transferExternalId;
-
- @Schema(example = "e1156fbe-38bb-42f8-b491-fca02075f40e")
- public String transferExternalGroupId;
-
- @Schema(example = "1.2345678")
- public String purchasePriceRatio;
-
- @Schema(example = "yyyy-MM-dd")
- public String dateFormat;
-
- @Schema(example = "en")
- public String locale;
- }
-
@Schema(description = "PostInitiateTransferResponse")
public static final class PostInitiateTransferResponse {
diff --git
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
b/fineract-investor/src/main/java/org/apache/fineract/investor/data/request/ExternalAssetOwnerRequest.java
similarity index 59%
copy from
fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
copy to
fineract-investor/src/main/java/org/apache/fineract/investor/data/request/ExternalAssetOwnerRequest.java
index 69da158c9a..7fda8deabf 100644
---
a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/CommandParameterUtil.java
+++
b/fineract-investor/src/main/java/org/apache/fineract/investor/data/request/ExternalAssetOwnerRequest.java
@@ -16,16 +16,25 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.fineract.infrastructure.core.service;
+package org.apache.fineract.investor.data.request;
-import org.apache.commons.lang3.StringUtils;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.NoArgsConstructor;
-public final class CommandParameterUtil {
+@Data
+@NoArgsConstructor
+public class ExternalAssetOwnerRequest implements Serializable {
- private CommandParameterUtil() {}
-
- public static boolean is(final String commandParam, final String
commandValue) {
- return StringUtils.isNotBlank(commandParam) &&
commandParam.trim().equalsIgnoreCase(commandValue);
- }
+ @Serial
+ private static final long serialVersionUID = 1L;
+ private String settlementDate;
+ private String ownerExternalId;
+ private String transferExternalId;
+ private String transferExternalGroupId;
+ private String purchasePriceRatio;
+ private String dateFormat;
+ private String locale;
}
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ExternalAssetOwnerHelper.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ExternalAssetOwnerHelper.java
index 5ae2f072d7..96edda0fa7 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ExternalAssetOwnerHelper.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/common/ExternalAssetOwnerHelper.java
@@ -25,6 +25,7 @@ import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import org.apache.fineract.accounting.common.AccountingConstants;
+import org.apache.fineract.client.models.ExternalAssetOwnerRequest;
import org.apache.fineract.client.models.ExternalAssetOwnerSearchRequest;
import org.apache.fineract.client.models.ExternalOwnerJournalEntryData;
import org.apache.fineract.client.models.ExternalOwnerTransferJournalEntryData;
@@ -33,7 +34,6 @@ import
org.apache.fineract.client.models.GetFinancialActivityAccountsResponse;
import org.apache.fineract.client.models.PageExternalTransferData;
import
org.apache.fineract.client.models.PagedRequestExternalAssetOwnerSearchRequest;
import org.apache.fineract.client.models.PostFinancialActivityAccountsRequest;
-import org.apache.fineract.client.models.PostInitiateTransferRequest;
import org.apache.fineract.client.models.PostInitiateTransferResponse;
import org.apache.fineract.client.util.CallFailedRuntimeException;
import org.apache.fineract.client.util.Calls;
@@ -44,7 +44,7 @@ public class ExternalAssetOwnerHelper {
public ExternalAssetOwnerHelper() {}
- public PostInitiateTransferResponse initiateTransferByLoanId(Long loanId,
String command, PostInitiateTransferRequest request) {
+ public PostInitiateTransferResponse initiateTransferByLoanId(Long loanId,
String command, ExternalAssetOwnerRequest request) {
return
Calls.ok(FineractClientHelper.getFineractClient().externalAssetOwners.transferRequestWithLoanId(loanId,
request, command));
}
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferCancelTest.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferCancelTest.java
index 16eb0ccf68..3bfddb93c3 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferCancelTest.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferCancelTest.java
@@ -45,12 +45,12 @@ import java.util.Optional;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.accounting.common.AccountingConstants;
+import org.apache.fineract.client.models.ExternalAssetOwnerRequest;
import org.apache.fineract.client.models.ExternalOwnerTransferJournalEntryData;
import org.apache.fineract.client.models.ExternalTransferData;
import org.apache.fineract.client.models.GetFinancialActivityAccountsResponse;
import org.apache.fineract.client.models.PageExternalTransferData;
import org.apache.fineract.client.models.PostFinancialActivityAccountsRequest;
-import org.apache.fineract.client.models.PostInitiateTransferRequest;
import org.apache.fineract.client.models.PostInitiateTransferResponse;
import org.apache.fineract.client.models.PutGlobalConfigurationsRequest;
import
org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationConstants;
@@ -248,7 +248,7 @@ public class ExternalAssetOwnerTransferCancelTest extends
BaseLoanIntegrationTes
private PostInitiateTransferResponse createSaleTransfer(Integer loanID,
String settlementDate, String transferExternalId,
String ownerExternalId, String purchasePriceRatio) {
PostInitiateTransferResponse saleResponse =
EXTERNAL_ASSET_OWNER_HELPER.initiateTransferByLoanId(loanID.longValue(), "sale",
- new
PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
+ new
ExternalAssetOwnerRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
.transferExternalId(transferExternalId).ownerExternalId(ownerExternalId).purchasePriceRatio(purchasePriceRatio));
assertEquals(transferExternalId, saleResponse.getResourceExternalId());
return saleResponse;
@@ -257,7 +257,7 @@ public class ExternalAssetOwnerTransferCancelTest extends
BaseLoanIntegrationTes
private PostInitiateTransferResponse createBuybackTransfer(Integer loanID,
String settlementDate) {
String transferExternalId = UUID.randomUUID().toString();
PostInitiateTransferResponse saleResponse =
EXTERNAL_ASSET_OWNER_HELPER.initiateTransferByLoanId(loanID.longValue(),
"buyback",
- new
PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
+ new
ExternalAssetOwnerRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
.transferExternalId(transferExternalId));
assertEquals(transferExternalId, saleResponse.getResourceExternalId());
return saleResponse;
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferTest.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferTest.java
index bdacddfdc6..b89e4db5e6 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferTest.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerTransferTest.java
@@ -42,11 +42,11 @@ import java.util.Optional;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.fineract.client.models.ExternalAssetOwnerRequest;
import org.apache.fineract.client.models.ExternalOwnerJournalEntryData;
import org.apache.fineract.client.models.ExternalOwnerTransferJournalEntryData;
import org.apache.fineract.client.models.ExternalTransferData;
import org.apache.fineract.client.models.PageExternalTransferData;
-import org.apache.fineract.client.models.PostInitiateTransferRequest;
import org.apache.fineract.client.models.PostInitiateTransferResponse;
import org.apache.fineract.client.models.PutGlobalConfigurationsRequest;
import
org.apache.fineract.infrastructure.configuration.api.GlobalConfigurationConstants;
@@ -131,7 +131,7 @@ public class ExternalAssetOwnerTransferTest extends
BaseLoanIntegrationTest {
protected PostInitiateTransferResponse createSaleTransfer(Integer loanID,
String settlementDate, String transferExternalId,
String transferExternalGroupId, String ownerExternalId, String
purchasePriceRatio) {
PostInitiateTransferResponse saleResponse =
EXTERNAL_ASSET_OWNER_HELPER.initiateTransferByLoanId(loanID.longValue(), "sale",
- new
PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
+ new
ExternalAssetOwnerRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
.transferExternalId(transferExternalId).transferExternalGroupId(transferExternalGroupId)
.ownerExternalId(ownerExternalId).purchasePriceRatio(purchasePriceRatio));
assertEquals(transferExternalId, saleResponse.getResourceExternalId());
@@ -145,7 +145,7 @@ public class ExternalAssetOwnerTransferTest extends
BaseLoanIntegrationTest {
protected PostInitiateTransferResponse createBuybackTransfer(Integer
loanID, String settlementDate, String transferExternalId) {
PostInitiateTransferResponse saleResponse =
EXTERNAL_ASSET_OWNER_HELPER.initiateTransferByLoanId(loanID.longValue(),
"buyback",
- new
PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
+ new
ExternalAssetOwnerRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
.transferExternalId(transferExternalId));
assertEquals(transferExternalId, saleResponse.getResourceExternalId());
return saleResponse;
diff --git
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java
index f1e5a2c1c6..c733d696e9 100644
---
a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java
+++
b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/InitiateExternalAssetOwnerTransferTest.java
@@ -55,13 +55,13 @@ import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.accounting.common.AccountingConstants;
import org.apache.fineract.accounting.journalentry.domain.JournalEntryType;
+import org.apache.fineract.client.models.ExternalAssetOwnerRequest;
import org.apache.fineract.client.models.ExternalOwnerJournalEntryData;
import org.apache.fineract.client.models.ExternalOwnerTransferJournalEntryData;
import org.apache.fineract.client.models.ExternalTransferData;
import org.apache.fineract.client.models.GetFinancialActivityAccountsResponse;
import org.apache.fineract.client.models.PageExternalTransferData;
import org.apache.fineract.client.models.PostFinancialActivityAccountsRequest;
-import org.apache.fineract.client.models.PostInitiateTransferRequest;
import org.apache.fineract.client.models.PostInitiateTransferResponse;
import org.apache.fineract.client.models.PostLoansLoanIdTransactionsRequest;
import org.apache.fineract.client.models.PutGlobalConfigurationsRequest;
@@ -1193,7 +1193,7 @@ public class InitiateExternalAssetOwnerTransferTest
extends BaseLoanIntegrationT
private PostInitiateTransferResponse createSaleTransfer(Integer loanID,
String settlementDate, String transferExternalId,
String transferExternalGroupId, String ownerExternalId, String
purchasePriceRatio) {
PostInitiateTransferResponse saleResponse =
EXTERNAL_ASSET_OWNER_HELPER.initiateTransferByLoanId(loanID.longValue(), "sale",
- new
PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
+ new
ExternalAssetOwnerRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
.transferExternalId(transferExternalId).transferExternalGroupId(transferExternalGroupId)
.ownerExternalId(ownerExternalId).purchasePriceRatio(purchasePriceRatio));
assertEquals(transferExternalId, saleResponse.getResourceExternalId());
@@ -1207,7 +1207,7 @@ public class InitiateExternalAssetOwnerTransferTest
extends BaseLoanIntegrationT
private PostInitiateTransferResponse createBuybackTransfer(Integer loanID,
String settlementDate, String transferExternalId) {
PostInitiateTransferResponse saleResponse =
EXTERNAL_ASSET_OWNER_HELPER.initiateTransferByLoanId(loanID.longValue(),
"buyback",
- new
PostInitiateTransferRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
+ new
ExternalAssetOwnerRequest().settlementDate(settlementDate).dateFormat("yyyy-MM-dd").locale("en")
.transferExternalId(transferExternalId));
assertEquals(transferExternalId, saleResponse.getResourceExternalId());
return saleResponse;