FINERACT-1926: Fineract Asset Externalization - GET Pagination
- [x] Added Pagination to response - [x] Added limit and offset to the request
This commit is contained in:
+6
-10
@@ -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) {
|
||||
|
||||
+5
-4
@@ -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);
|
||||
|
||||
+3
-3
@@ -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);
|
||||
}
|
||||
|
||||
+24
-11
@@ -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<>();
|
||||
if (loanId != null) {
|
||||
result.addAll(externalAssetOwnerTransferRepository.findAllByLoanId(loanId));
|
||||
} else if (externalLoanId != null) {
|
||||
result.addAll(externalAssetOwnerTransferRepository.findAllByExternalLoanId(ExternalIdFactory.produce(externalLoanId)));
|
||||
} else if (transferExternalId != null) {
|
||||
result.addAll(externalAssetOwnerTransferRepository.findAllByExternalId(ExternalIdFactory.produce(transferExternalId)));
|
||||
public Page<ExternalTransferData> retrieveTransferData(Long loanId, String externalLoanId, String transferExternalId, Integer offset,
|
||||
Integer limit) {
|
||||
Page<ExternalAssetOwnerTransfer> result;
|
||||
if (offset == null) {
|
||||
offset = 0;
|
||||
}
|
||||
return result.stream().map(mapper::mapTransfer).toList();
|
||||
if (limit == null) {
|
||||
limit = 100;
|
||||
}
|
||||
PageRequest pageRequest = PageRequest.of(offset, limit, Sort.by("id"));
|
||||
if (loanId != null) {
|
||||
result = externalAssetOwnerTransferRepository.findAllByLoanId(loanId, pageRequest);
|
||||
} else if (externalLoanId != null) {
|
||||
result = externalAssetOwnerTransferRepository.findAllByExternalLoanId(ExternalIdFactory.produce(externalLoanId), pageRequest);
|
||||
} else if (transferExternalId != null) {
|
||||
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.map(mapper::mapTransfer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user