You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ad...@apache.org on 2023/05/31 15:16:06 UTC
[fineract] branch develop updated: FINERACT-1926: Fineract Asset Externalization - GET Pagination - [x] Added Pagination to response - [x] Added limit and offset to the request
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 f43e13a0e FINERACT-1926: Fineract Asset Externalization - GET Pagination - [x] Added Pagination to response - [x] Added limit and offset to the request
f43e13a0e is described below
commit f43e13a0eeeff6265b3e7f6bedcf6a28b616ae99
Author: Janos Haber <ja...@finesolution.hu>
AuthorDate: Fri May 26 09:20:08 2023 +0200
FINERACT-1926: Fineract Asset Externalization - GET Pagination
- [x] Added Pagination to response
- [x] Added limit and offset to the request
---
.../fineract/client/util/FineractClient.java | 4 +++
.../fineract/infrastructure/core/service/Page.java | 1 +
.../api/ExternalAssetOwnersApiResource.java | 16 ++++-----
.../ExternalAssetOwnerTransferRepository.java | 9 ++---
.../service/ExternalAssetOwnersReadService.java | 6 ++--
.../ExternalAssetOwnersReadServiceImpl.java | 29 ++++++++++++-----
.../ExternalAssetOwnerHelper.java | 11 ++++---
.../InitiateExternalAssetOwnerTransferTest.java | 38 +++++++++++++---------
8 files changed, 69 insertions(+), 45 deletions(-)
diff --git a/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java b/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java
index 51590b519..9a14a4343 100644
--- a/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java
+++ b/fineract-client/src/main/java/org/apache/fineract/client/util/FineractClient.java
@@ -64,6 +64,7 @@ import org.apache.fineract.client.services.DelinquencyRangeAndBucketsManagementA
import org.apache.fineract.client.services.DocumentsApiFixed;
import org.apache.fineract.client.services.EntityDataTableApi;
import org.apache.fineract.client.services.EntityFieldConfigurationApi;
+import org.apache.fineract.client.services.ExternalAssetOwnersApi;
import org.apache.fineract.client.services.ExternalEventConfigurationApi;
import org.apache.fineract.client.services.ExternalServicesApi;
import org.apache.fineract.client.services.FetchAuthenticatedUserDetailsApi;
@@ -287,10 +288,13 @@ public final class FineractClient {
public final UsersApi users;
public final WorkingDaysApi workingDays;
+ public final ExternalAssetOwnersApi externalAssetOwners;
+
private FineractClient(OkHttpClient okHttpClient, Retrofit retrofit) {
this.okHttpClient = okHttpClient;
this.retrofit = retrofit;
+ externalAssetOwners = retrofit.create(ExternalAssetOwnersApi.class);
glClosures = retrofit.create(AccountingClosureApi.class);
accountingRules = retrofit.create(AccountingRulesApi.class);
accountNumberFormats = retrofit.create(AccountNumberFormatApi.class);
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/Page.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/Page.java
index f6c2d7189..a7bf95d93 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/Page.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/service/Page.java
@@ -38,4 +38,5 @@ public class Page<E> implements Serializable {
public List<E> getPageItems() {
return this.pageItems;
}
+
}
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 c918e7dee..bc8d6f3cb 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
@@ -26,7 +26,6 @@ import io.swagger.v3.oas.annotations.parameters.RequestBody;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
-import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -44,7 +43,6 @@ import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformS
import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper;
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
import org.apache.fineract.infrastructure.core.exception.UnrecognizedQueryParamException;
-import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings;
import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
import org.apache.fineract.infrastructure.core.service.CommandParameterUtil;
import org.apache.fineract.infrastructure.security.service.PlatformUserRightsContext;
@@ -52,6 +50,7 @@ import org.apache.fineract.investor.data.ExternalTransferData;
import org.apache.fineract.investor.data.ExternalTransferResponseData;
import org.apache.fineract.investor.service.ExternalAssetOwnersReadService;
import org.apache.fineract.portfolio.loanaccount.service.LoanReadPlatformServiceCommon;
+import org.springframework.data.domain.Page;
import org.springframework.stereotype.Component;
@Path("/v1/external-asset-owners")
@@ -105,18 +104,15 @@ public class ExternalAssetOwnersApiResource {
@Produces({ MediaType.APPLICATION_JSON })
@Operation(tags = {
"External Asset Owners" }, summary = "Retrieve External Asset Owner Transfers", description = "Retrieve External Asset Owner Transfer items by transferExternalId, loanId or loanExternalId")
- @ApiResponses({
- @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ExternalAssetOwnersApiResourceSwagger.GetExternalTransferResponse.class))) })
- public String getTransfer(
+ public Page<ExternalTransferData> getTransfer(
@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("offset") @Parameter(description = "offset") final Integer offset,
+ @QueryParam("limit") @Parameter(description = "limit") final Integer limit, @Context final UriInfo uriInfo) {
platformUserRightsContext.isAuthenticated();
- List<ExternalTransferData> transferDataList = externalAssetOwnersReadService.retrieveTransferData(loanId, loanExternalId,
- transferExternalId);
- ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
- return apiJsonSerializerService.serialize(settings, transferDataList);
+ return externalAssetOwnersReadService.retrieveTransferData(loanId, loanExternalId, transferExternalId, offset, limit);
+
}
private String getResult(Long loanId, String apiRequestBodyAsJson, String commandParam) {
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferRepository.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferRepository.java
index d6fe00f09..270525ab9 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferRepository.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferRepository.java
@@ -18,9 +18,10 @@
*/
package org.apache.fineract.investor.domain;
-import java.util.List;
import java.util.Optional;
import org.apache.fineract.infrastructure.core.domain.ExternalId;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
@@ -29,11 +30,11 @@ import org.springframework.data.repository.query.Param;
public interface ExternalAssetOwnerTransferRepository
extends JpaRepository<ExternalAssetOwnerTransfer, Long>, JpaSpecificationExecutor<ExternalAssetOwnerTransfer> {
- List<ExternalAssetOwnerTransfer> findAllByLoanId(Long loanId);
+ Page<ExternalAssetOwnerTransfer> findAllByLoanId(Long loanId, PageRequest pageable);
- List<ExternalAssetOwnerTransfer> findAllByExternalLoanId(ExternalId externalLoanId);
+ Page<ExternalAssetOwnerTransfer> findAllByExternalLoanId(ExternalId externalLoanId, PageRequest pageable);
- List<ExternalAssetOwnerTransfer> findAllByExternalId(ExternalId externalId);
+ Page<ExternalAssetOwnerTransfer> findAllByExternalId(ExternalId externalId, PageRequest pageable);
@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);
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersReadService.java b/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersReadService.java
index bf011d6ca..6d98a6c11 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersReadService.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersReadService.java
@@ -18,11 +18,11 @@
*/
package org.apache.fineract.investor.service;
-import java.util.List;
import org.apache.fineract.investor.data.ExternalTransferData;
+import org.springframework.data.domain.Page;
public interface ExternalAssetOwnersReadService {
- List<ExternalTransferData> retrieveTransferData(Long loanId, String externalLoanId, String transferExternalId);
-
+ Page<ExternalTransferData> retrieveTransferData(Long loanId, String externalLoanId, String transferExternalId, Integer offset,
+ Integer limit);
}
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersReadServiceImpl.java b/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersReadServiceImpl.java
index 392fa9b24..257227987 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersReadServiceImpl.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/service/ExternalAssetOwnersReadServiceImpl.java
@@ -18,13 +18,14 @@
*/
package org.apache.fineract.investor.service;
-import java.util.ArrayList;
-import java.util.List;
import lombok.RequiredArgsConstructor;
import org.apache.fineract.infrastructure.core.service.ExternalIdFactory;
import org.apache.fineract.investor.data.ExternalTransferData;
import org.apache.fineract.investor.domain.ExternalAssetOwnerTransfer;
import org.apache.fineract.investor.domain.ExternalAssetOwnerTransferRepository;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -37,15 +38,27 @@ public class ExternalAssetOwnersReadServiceImpl implements ExternalAssetOwnersRe
private final ExternalAssetOwnersTransferMapper mapper;
@Override
- public List<ExternalTransferData> retrieveTransferData(Long loanId, String externalLoanId, String transferExternalId) {
- List<ExternalAssetOwnerTransfer> result = new ArrayList<>();
+ public Page<ExternalTransferData> retrieveTransferData(Long loanId, String externalLoanId, String transferExternalId, Integer offset,
+ Integer limit) {
+ Page<ExternalAssetOwnerTransfer> result;
+ if (offset == null) {
+ offset = 0;
+ }
+ if (limit == null) {
+ limit = 100;
+ }
+ PageRequest pageRequest = PageRequest.of(offset, limit, Sort.by("id"));
if (loanId != null) {
- result.addAll(externalAssetOwnerTransferRepository.findAllByLoanId(loanId));
+ result = externalAssetOwnerTransferRepository.findAllByLoanId(loanId, pageRequest);
} else if (externalLoanId != null) {
- result.addAll(externalAssetOwnerTransferRepository.findAllByExternalLoanId(ExternalIdFactory.produce(externalLoanId)));
+ result = externalAssetOwnerTransferRepository.findAllByExternalLoanId(ExternalIdFactory.produce(externalLoanId), pageRequest);
} else if (transferExternalId != null) {
- result.addAll(externalAssetOwnerTransferRepository.findAllByExternalId(ExternalIdFactory.produce(transferExternalId)));
+ result = externalAssetOwnerTransferRepository.findAllByExternalId(ExternalIdFactory.produce(transferExternalId), pageRequest);
+ } else {
+ throw new IllegalArgumentException(
+ "At least one of the following parameters must be provided: loanId, externalLoanId, transferExternalId");
}
- return result.stream().map(mapper::mapTransfer).toList();
+ return result.map(mapper::mapTransfer);
}
+
}
diff --git a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerHelper.java b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerHelper.java
index 26f9538af..9c5f51b6e 100644
--- a/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerHelper.java
+++ b/integration-tests/src/test/java/org/apache/fineract/integrationtests/investor/externalassetowner/ExternalAssetOwnerHelper.java
@@ -20,6 +20,7 @@ package org.apache.fineract.integrationtests.investor.externalassetowner;
import io.restassured.specification.RequestSpecification;
import io.restassured.specification.ResponseSpecification;
+import org.apache.fineract.client.models.PageExternalTransferData;
import org.apache.fineract.integrationtests.client.IntegrationTest;
import org.apache.fineract.integrationtests.common.Utils;
@@ -45,9 +46,11 @@ public class ExternalAssetOwnerHelper extends IntegrationTest {
return Utils.performServerGet(requestSpec, responseSpec, RETRIEVE_TRANSFER_URL);
}
- public String retrieveTransferByLoanId(Long loanId) {
- final String RETRIEVE_TRANSFER_URL = "/fineract-provider/api/v1/external-asset-owners/transfers?" + Utils.TENANT_IDENTIFIER
- + "&loanId=" + loanId;
- return Utils.performServerGet(requestSpec, responseSpec, RETRIEVE_TRANSFER_URL);
+ public PageExternalTransferData retrieveTransferByLoanId(Long loanId) {
+ return ok(fineract().externalAssetOwners.getTransfer1(null, loanId, null, 0, 100));
+ }
+
+ public PageExternalTransferData retrieveTransferByLoanId(Long loanId, int offset, int limit) {
+ return ok(fineract().externalAssetOwners.getTransfer1(null, loanId, null, offset, limit));
}
}
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 067384126..496715798 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
@@ -35,6 +35,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.fineract.client.models.ExternalTransferData;
+import org.apache.fineract.client.models.PageExternalTransferData;
import org.apache.fineract.infrastructure.businessdate.domain.BusinessDateType;
import org.apache.fineract.integrationtests.common.BusinessDateHelper;
import org.apache.fineract.integrationtests.common.ClientHelper;
@@ -113,18 +115,16 @@ public class InitiateExternalAssetOwnerTransferTest {
Map<String, Object> responseMap = new Gson().fromJson(saleResponse, type);
assertEquals(responseMap.get("resourceExternalId"), transferExternalId);
- String retrieveResponse = externalAssetOwnerHelper.retrieveTransferByLoanId(loanID.longValue());
- Type retrieveType = new TypeToken<List<Map<String, Object>>>() {}.getType();
- List<Map<String, Object>> retrieveResponseMap = new Gson().fromJson(retrieveResponse, retrieveType);
- assertEquals(1, retrieveResponseMap.size());
- assertEquals(retrieveResponseMap.get(0).get("transferExternalId"), transferExternalId);
- assertEquals(retrieveResponseMap.get(0).get("status"), "PENDING");
+ PageExternalTransferData retrieveResponse = externalAssetOwnerHelper.retrieveTransferByLoanId(loanID.longValue());
+ List<ExternalTransferData> retrieveResponseMap = retrieveResponse.getContent();
+ assertEquals(1, retrieveResponse.getTotalElements());
+ assertEquals(retrieveResponseMap.get(0).getTransferExternalId(), transferExternalId);
+ assertEquals(retrieveResponseMap.get(0).getStatus(), ExternalTransferData.StatusEnum.PENDING);
} finally {
requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
requestSpec.header("Fineract-Platform-TenantId", "default");
responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
- BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
}
}
@@ -288,20 +288,26 @@ public class InitiateExternalAssetOwnerTransferTest {
Map<String, Object> buybackResponseMap = new Gson().fromJson(buybackResponse, type);
assertEquals(buybackResponseMap.get("resourceExternalId"), buybackTransferExternalId);
- String retrieveResponse = externalAssetOwnerHelper.retrieveTransferByLoanId(loanID.longValue());
- Type retrieveType = new TypeToken<List<Map<String, Object>>>() {}.getType();
- List<Map<String, Object>> retrieveResponseMap = new Gson().fromJson(retrieveResponse, retrieveType);
- assertEquals(2, retrieveResponseMap.size());
- assertEquals(retrieveResponseMap.get(0).get("transferExternalId"), transferExternalId);
- assertEquals(retrieveResponseMap.get(0).get("status"), "PENDING");
- assertEquals(retrieveResponseMap.get(1).get("transferExternalId"), buybackTransferExternalId);
- assertEquals(retrieveResponseMap.get(1).get("status"), "BUYBACK");
+ PageExternalTransferData retrieveResponse = externalAssetOwnerHelper.retrieveTransferByLoanId(loanID.longValue(), 0, 1);
+ List<ExternalTransferData> retrieveResponseMap = retrieveResponse.getContent();
+
+ assertEquals(2, retrieveResponse.getTotalElements());
+ assertEquals(1, retrieveResponse.getNumberOfElements());
+ assertEquals(retrieveResponseMap.get(0).getTransferExternalId(), transferExternalId);
+ assertEquals(retrieveResponseMap.get(0).getStatus(), ExternalTransferData.StatusEnum.PENDING);
+
+ retrieveResponse = externalAssetOwnerHelper.retrieveTransferByLoanId(loanID.longValue(), 1, 1);
+ retrieveResponseMap = retrieveResponse.getContent();
+
+ assertEquals(2, retrieveResponse.getTotalElements());
+ assertEquals(1, retrieveResponse.getNumberOfElements());
+ assertEquals(retrieveResponseMap.get(0).getTransferExternalId(), buybackTransferExternalId);
+ assertEquals(retrieveResponseMap.get(0).getStatus(), ExternalTransferData.StatusEnum.BUYBACK);
} finally {
requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
requestSpec.header("Fineract-Platform-TenantId", "default");
responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
- BusinessDateHelper.updateBusinessDate(requestSpec, responseSpec, BusinessDateType.BUSINESS_DATE, todaysDate);
GlobalConfigurationHelper.updateIsBusinessDateEnabled(requestSpec, responseSpec, Boolean.FALSE);
}
}