FINERACT-2169: Refactor macker checkers api controller;
This commit is contained in:
committed by
Adam Saghy
parent
2d2cbb46b5
commit
20195464c9
+33
-70
@@ -20,12 +20,12 @@ package org.apache.fineract.commands.api;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.media.ArraySchema;
|
||||
import io.swagger.v3.oas.annotations.media.Content;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
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 jakarta.ws.rs.BeanParam;
|
||||
import jakarta.ws.rs.Consumes;
|
||||
import jakarta.ws.rs.DELETE;
|
||||
import jakarta.ws.rs.GET;
|
||||
@@ -37,21 +37,18 @@ 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.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.fineract.commands.data.AuditData;
|
||||
import org.apache.fineract.commands.data.AuditSearchData;
|
||||
import org.apache.fineract.commands.data.request.MakerCheckerRequest;
|
||||
import org.apache.fineract.commands.service.AuditReadPlatformService;
|
||||
import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformService;
|
||||
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.security.utils.SQLBuilder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@@ -61,13 +58,10 @@ import org.springframework.stereotype.Component;
|
||||
@RequiredArgsConstructor
|
||||
public class MakercheckersApiResource {
|
||||
|
||||
private static final Set<String> RESPONSE_DATA_PARAMETERS = new HashSet<>(Arrays.asList("id", "actionName", "entityName", "resourceId",
|
||||
"subresourceId", "maker", "madeOnDate", "checker", "checkedOnDate", "processingResult", "commandAsJson", "officeName",
|
||||
"groupLevelName", "groupName", "clientName", "loanAccountNo", "savingsAccountNo", "clientId", "loanId"));
|
||||
private static final String COMMAND_APPROVE = "approve";
|
||||
private static final String COMMAND_REJECT = "reject";
|
||||
|
||||
private final AuditReadPlatformService readPlatformService;
|
||||
private final DefaultToApiJsonSerializer<AuditData> toApiJsonSerializerAudit;
|
||||
private final DefaultToApiJsonSerializer<AuditSearchData> toApiJsonSerializerSearchTemplate;
|
||||
private final ApiRequestParameterHelper apiRequestParameterHelper;
|
||||
private final PortfolioCommandSourceWritePlatformService writePlatformService;
|
||||
|
||||
@@ -78,30 +72,12 @@ public class MakercheckersApiResource {
|
||||
+ "\n" + "Example Requests:\n" + "\n" + "makercheckers\n" + "\n" + "makercheckers?fields=madeOnDate,maker,processingResult\n"
|
||||
+ "\n" + "makercheckers?makerDateTimeFrom=2013-03-25 08:00:00&makerDateTimeTo=2013-04-04 18:00:00\n" + "\n"
|
||||
+ "makercheckers?officeId=1\n" + "\n" + "makercheckers?officeId=1&includeJson=true")
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = MakercheckersApiResourceSwagger.GetMakerCheckerResponse.class)))) })
|
||||
public String retrieveCommands(@Context final UriInfo uriInfo,
|
||||
@QueryParam("actionName") @Parameter(description = "actionName") final String actionName,
|
||||
@QueryParam("entityName") @Parameter(description = "entityName") final String entityName,
|
||||
@QueryParam("resourceId") @Parameter(description = "resourceId") final Long resourceId,
|
||||
@QueryParam("makerId") @Parameter(description = "makerId") final Long makerId,
|
||||
@QueryParam("makerDateTimeFrom") @Parameter(description = "makerDateTimeFrom") final String makerDateTimeFrom,
|
||||
@QueryParam("makerDateTimeTo") @Parameter(description = "makerDateTimeTo") final String makerDateTimeTo,
|
||||
@QueryParam("officeId") @Parameter(description = "officeId") final Integer officeId,
|
||||
@QueryParam("groupId") @Parameter(description = "groupId") final Integer groupId,
|
||||
@QueryParam("clientId") @Parameter(description = "clientId") final Integer clientId,
|
||||
@QueryParam("loanid") @Parameter(description = "loanid") final Integer loanId,
|
||||
@QueryParam("savingsAccountId") @Parameter(description = "savingsAccountId") final Integer savingsAccountId) {
|
||||
public List<AuditData> retrieveCommands(@Context final UriInfo uriInfo, @BeanParam MakerCheckerRequest makerCheckerRequest) {
|
||||
final SQLBuilder extraCriteria = getExtraCriteria(makerCheckerRequest);
|
||||
|
||||
final SQLBuilder extraCriteria = getExtraCriteria(actionName, entityName, resourceId, makerId, makerDateTimeFrom, makerDateTimeTo,
|
||||
officeId, groupId, clientId, loanId, savingsAccountId);
|
||||
final ApiRequestJsonSerializationSettings settings = apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||
return readPlatformService.retrieveAllEntriesToBeChecked(extraCriteria, settings.isIncludeJson());
|
||||
|
||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||
|
||||
final Collection<AuditData> entries = this.readPlatformService.retrieveAllEntriesToBeChecked(extraCriteria,
|
||||
settings.isIncludeJson());
|
||||
|
||||
return this.toApiJsonSerializerAudit.serialize(settings, entries, RESPONSE_DATA_PARAMETERS);
|
||||
}
|
||||
|
||||
@GET
|
||||
@@ -110,17 +86,8 @@ public class MakercheckersApiResource {
|
||||
@Produces({ MediaType.APPLICATION_JSON })
|
||||
@Operation(summary = "Maker Checker Search Template", description = "This is a convenience resource. It can be useful when building a Checker Inbox UI. \"appUsers\" are data scoped to the office/branch the requestor is associated with. \"actionNames\" and \"entityNames\" returned are those that the requestor has Checker approval permissions for.\n"
|
||||
+ "\n" + "Example Requests:\n" + "\n" + "makercheckers/searchtemplate\n" + "makercheckers/searchtemplate?fields=entityNames")
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = MakercheckersApiResourceSwagger.GetMakerCheckersSearchTemplateResponse.class))) })
|
||||
public String retrieveAuditSearchTemplate(@Context final UriInfo uriInfo) {
|
||||
|
||||
final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters());
|
||||
|
||||
final AuditSearchData auditSearchData = this.readPlatformService.retrieveSearchTemplate("makerchecker");
|
||||
|
||||
final Set<String> RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE = new HashSet<>(Arrays.asList("appUsers", "actionNames", "entityNames"));
|
||||
|
||||
return this.toApiJsonSerializerSearchTemplate.serialize(settings, auditSearchData, RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE);
|
||||
public AuditSearchData retrieveAuditSearchTemplate() {
|
||||
return readPlatformService.retrieveSearchTemplate("makerchecker");
|
||||
}
|
||||
|
||||
@POST
|
||||
@@ -130,19 +97,19 @@ public class MakercheckersApiResource {
|
||||
@Operation(summary = "Approve Maker Checker Entry | Reject Maker Checker Entry")
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = MakercheckersApiResourceSwagger.PostMakerCheckersResponse.class))) })
|
||||
public String approveMakerCheckerEntry(@PathParam("auditId") @Parameter(description = "auditId") final Long auditId,
|
||||
public CommandProcessingResult approveMakerCheckerEntry(@PathParam("auditId") @Parameter(description = "auditId") final Long auditId,
|
||||
@QueryParam("command") @Parameter(description = "command") final String commandParam) {
|
||||
|
||||
CommandProcessingResult result = null;
|
||||
if (is(commandParam, "approve")) {
|
||||
result = this.writePlatformService.approveEntry(auditId);
|
||||
} else if (is(commandParam, "reject")) {
|
||||
final Long id = this.writePlatformService.rejectEntry(auditId);
|
||||
if (is(commandParam, COMMAND_APPROVE)) {
|
||||
result = writePlatformService.approveEntry(auditId);
|
||||
} else if (is(commandParam, COMMAND_REJECT)) {
|
||||
final Long id = writePlatformService.rejectEntry(auditId);
|
||||
result = CommandProcessingResult.commandOnlyResult(id);
|
||||
} else {
|
||||
throw new UnrecognizedQueryParamException("command", commandParam);
|
||||
}
|
||||
return this.toApiJsonSerializerAudit.serialize(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private boolean is(final String commandParam, final String commandValue) {
|
||||
@@ -156,31 +123,27 @@ public class MakercheckersApiResource {
|
||||
@Operation(summary = "Delete Maker Checker Entry")
|
||||
@ApiResponses({
|
||||
@ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = MakercheckersApiResourceSwagger.PostMakerCheckersResponse.class))) })
|
||||
public String deleteMakerCheckerEntry(@PathParam("auditId") @Parameter(description = "auditId") final Long auditId) {
|
||||
|
||||
final Long id = this.writePlatformService.deleteEntry(auditId);
|
||||
|
||||
return this.toApiJsonSerializerAudit.serialize(CommandProcessingResult.commandOnlyResult(id));
|
||||
public CommandProcessingResult deleteMakerCheckerEntry(@PathParam("auditId") @Parameter(description = "auditId") final Long auditId) {
|
||||
final Long id = writePlatformService.deleteEntry(auditId);
|
||||
return CommandProcessingResult.commandOnlyResult(id);
|
||||
}
|
||||
|
||||
private SQLBuilder getExtraCriteria(final String actionName, final String entityName, final Long resourceId, final Long makerId,
|
||||
final String makerDateTimeFrom, final String makerDateTimeTo, final Integer officeId, final Integer groupId,
|
||||
final Integer clientId, final Integer loanId, final Integer savingsAccountId) {
|
||||
private SQLBuilder getExtraCriteria(MakerCheckerRequest makerCheckerRequest) {
|
||||
|
||||
SQLBuilder extraCriteria = new SQLBuilder();
|
||||
extraCriteria.addNonNullCriteria("aud.action_name = ", actionName);
|
||||
if (entityName != null) {
|
||||
extraCriteria.addCriteria("aud.entity_name like ", entityName + "%");
|
||||
extraCriteria.addNonNullCriteria("aud.action_name = ", makerCheckerRequest.getActionName());
|
||||
if (makerCheckerRequest.getEntityName() != null) {
|
||||
extraCriteria.addCriteria("aud.entity_name like ", makerCheckerRequest.getEntityName() + "%");
|
||||
}
|
||||
extraCriteria.addNonNullCriteria("aud.resource_id = ", resourceId);
|
||||
extraCriteria.addNonNullCriteria("aud.maker_id = ", makerId);
|
||||
extraCriteria.addNonNullCriteria("aud.made_on_date >= ", makerDateTimeFrom);
|
||||
extraCriteria.addNonNullCriteria("aud.made_on_date <= ", makerDateTimeTo);
|
||||
extraCriteria.addNonNullCriteria("aud.office_id = ", officeId);
|
||||
extraCriteria.addNonNullCriteria("aud.group_id = ", groupId);
|
||||
extraCriteria.addNonNullCriteria("aud.client_id = ", clientId);
|
||||
extraCriteria.addNonNullCriteria("aud.loan_id = ", loanId);
|
||||
extraCriteria.addNonNullCriteria("aud.savings_account_id = ", savingsAccountId);
|
||||
extraCriteria.addNonNullCriteria("aud.resource_id = ", makerCheckerRequest.getResourceId());
|
||||
extraCriteria.addNonNullCriteria("aud.maker_id = ", makerCheckerRequest.getMakerId());
|
||||
extraCriteria.addNonNullCriteria("aud.made_on_date >= ", makerCheckerRequest.getMakerDateTimeFrom());
|
||||
extraCriteria.addNonNullCriteria("aud.made_on_date <= ", makerCheckerRequest.getMakerDateTimeTo());
|
||||
extraCriteria.addNonNullCriteria("aud.office_id = ", makerCheckerRequest.getOfficeId());
|
||||
extraCriteria.addNonNullCriteria("aud.group_id = ", makerCheckerRequest.getGroupId());
|
||||
extraCriteria.addNonNullCriteria("aud.client_id = ", makerCheckerRequest.getClientId());
|
||||
extraCriteria.addNonNullCriteria("aud.loan_id = ", makerCheckerRequest.getLoanId());
|
||||
extraCriteria.addNonNullCriteria("aud.savings_account_id = ", makerCheckerRequest.getSavingsAccountId());
|
||||
|
||||
return extraCriteria;
|
||||
}
|
||||
|
||||
-48
@@ -19,11 +19,6 @@
|
||||
package org.apache.fineract.commands.api;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import java.time.ZonedDateTime;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import org.apache.fineract.commands.data.ProcessingResultLookup;
|
||||
import org.apache.fineract.useradministration.data.AppUserData;
|
||||
|
||||
/**
|
||||
* Created by sanyam on 27/7/17.
|
||||
@@ -34,49 +29,6 @@ final class MakercheckersApiResourceSwagger {
|
||||
// only to initialize swagger documentation
|
||||
}
|
||||
|
||||
@Schema(description = "GetMakerCheckerResponse")
|
||||
public static final class GetMakerCheckerResponse {
|
||||
|
||||
private GetMakerCheckerResponse() {
|
||||
|
||||
}
|
||||
|
||||
public Long id;
|
||||
public String actionName;
|
||||
public String entityName;
|
||||
public Long resourceId;
|
||||
public Long subresourceId;
|
||||
public String maker;
|
||||
public ZonedDateTime madeOnDate;
|
||||
public String checker;
|
||||
public ZonedDateTime checkedOnDate;
|
||||
public String processingResult;
|
||||
public String commandAsJson;
|
||||
public String officeName;
|
||||
public String groupLevelName;
|
||||
public String groupName;
|
||||
public String clientName;
|
||||
public String loanAccountNo;
|
||||
public String savingsAccountNo;
|
||||
public Long clientId;
|
||||
public Long loanId;
|
||||
public String url;
|
||||
|
||||
}
|
||||
|
||||
@Schema(description = "GetMakerCheckersSearchTemplateResponse")
|
||||
public static final class GetMakerCheckersSearchTemplateResponse {
|
||||
|
||||
private GetMakerCheckersSearchTemplateResponse() {
|
||||
|
||||
}
|
||||
|
||||
public Collection<AppUserData> appUsers;
|
||||
public List<String> actionNames;
|
||||
public List<String> entityNames;
|
||||
public Collection<ProcessingResultLookup> processingResults;
|
||||
}
|
||||
|
||||
@Schema(description = "PostMakerCheckersResponse")
|
||||
public static final class PostMakerCheckersResponse {
|
||||
|
||||
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.commands.data.request;
|
||||
|
||||
import jakarta.ws.rs.QueryParam;
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.ZonedDateTime;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
public class MakerCheckerRequest implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@QueryParam("actionName")
|
||||
private String actionName;
|
||||
@QueryParam("entityName")
|
||||
private String entityName;
|
||||
@QueryParam("resourceId")
|
||||
private Long resourceId;
|
||||
@QueryParam("makerId")
|
||||
private Long makerId;
|
||||
@QueryParam("makerDateTimeFrom")
|
||||
private ZonedDateTime makerDateTimeFrom;
|
||||
@QueryParam("makerDateTimeTo")
|
||||
private ZonedDateTime makerDateTimeTo;
|
||||
@QueryParam("clientId")
|
||||
private Long clientId;
|
||||
@QueryParam("loanid")
|
||||
private Long loanId;
|
||||
@QueryParam("officeId")
|
||||
private Long officeId;
|
||||
@QueryParam("groupId")
|
||||
private Long groupId;
|
||||
@QueryParam("savingsAccountId")
|
||||
private Long savingsAccountId;
|
||||
}
|
||||
Reference in New Issue
Block a user