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;


Reply via email to