diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/api/AuditsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/commands/api/AuditsApiResource.java index 9a17404a2..2e615f042 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/api/AuditsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/api/AuditsApiResource.java @@ -20,12 +20,8 @@ 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.GET; import jakarta.ws.rs.Path; @@ -35,21 +31,16 @@ 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 lombok.RequiredArgsConstructor; import org.apache.fineract.commands.data.AuditData; import org.apache.fineract.commands.data.AuditSearchData; +import org.apache.fineract.commands.data.request.AuditRequest; import org.apache.fineract.commands.service.AuditReadPlatformService; import org.apache.fineract.infrastructure.core.api.ApiRequestParameterHelper; import org.apache.fineract.infrastructure.core.data.PaginationParameters; import org.apache.fineract.infrastructure.core.serialization.ApiRequestJsonSerializationSettings; -import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer; -import org.apache.fineract.infrastructure.core.service.Page; +import org.apache.fineract.infrastructure.core.serialization.ToApiJsonSerializer; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; -import org.apache.fineract.infrastructure.security.service.SqlValidator; import org.apache.fineract.infrastructure.security.utils.SQLBuilder; import org.springframework.stereotype.Component; @@ -63,18 +54,12 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class AuditsApiResource { - private static final Set 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", "url")); - private static final String RESOURCE_NAME_FOR_PERMISSIONS = "AUDIT"; private final PlatformSecurityContext context; private final AuditReadPlatformService auditReadPlatformService; private final ApiRequestParameterHelper apiRequestParameterHelper; - private final DefaultToApiJsonSerializer toApiJsonSerializer; - private final DefaultToApiJsonSerializer toApiJsonSerializerSearchTemplate; - private final SqlValidator sqlValidator; + private final ToApiJsonSerializer toApiJsonSerializer; @GET @Consumes({ MediaType.APPLICATION_JSON }) @@ -83,50 +68,22 @@ public class AuditsApiResource { + "\n" + "Example Requests:\n" + "\n" + "audits\n" + "\n" + "audits?fields=madeOnDate,maker,processingResult\n" + "\n" + "audits?makerDateTimeFrom=2013-03-25 08:00:00&makerDateTimeTo=2013-04-04 18:00:00\n" + "\n" + "audits?officeId=1\n" + "\n" + "audits?officeId=1&includeJson=true") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(array = @ArraySchema(schema = @Schema(implementation = MakercheckersApiResourceSwagger.GetMakerCheckerResponse.class)))) }) - public String retrieveAuditEntries(@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("checkerId") @Parameter(description = "checkerId") final Long checkerId, - @QueryParam("checkerDateTimeFrom") @Parameter(description = "checkerDateTimeFrom") final String checkerDateTimeFrom, - @QueryParam("checkerDateTimeTo") @Parameter(description = "checkerDateTimeTo") final String checkerDateTimeTo, - @QueryParam("processingResult") @Parameter(description = "processingResult") final Integer processingResult, - @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, - @QueryParam("paged") @Parameter(description = "paged") final Boolean paged, + public String retrieveAuditEntries(@Context final UriInfo uriInfo, @BeanParam AuditRequest auditRequest, @QueryParam("offset") @Parameter(description = "offset") final Integer offset, @QueryParam("limit") @Parameter(description = "limit") final Integer limit, @QueryParam("orderBy") @Parameter(description = "orderBy") final String orderBy, - @QueryParam("sortOrder") @Parameter(description = "sortOrder") final String sortOrder) { + @QueryParam("sortOrder") @Parameter(description = "sortOrder") final String sortOrder, + @QueryParam("paged") @Parameter(description = "paged") final Boolean paged) { - this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - sqlValidator.validate(orderBy); - sqlValidator.validate(sortOrder); + context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); final PaginationParameters parameters = PaginationParameters.builder().paged(Boolean.TRUE.equals(paged)).limit(limit).offset(offset) .orderBy(orderBy).sortOrder(sortOrder).build(); - final SQLBuilder extraCriteria = getExtraCriteria(actionName, entityName, resourceId, makerId, makerDateTimeFrom, makerDateTimeTo, - checkerId, checkerDateTimeFrom, checkerDateTimeTo, processingResult, officeId, groupId, clientId, loanId, savingsAccountId); - + final SQLBuilder extraCriteria = getExtraCriteria(auditRequest); final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - if (parameters.isPaged()) { - final Page auditEntries = this.auditReadPlatformService.retrievePaginatedAuditEntries(extraCriteria, - settings.isIncludeJson(), parameters); - return this.toApiJsonSerializer.serialize(settings, auditEntries, RESPONSE_DATA_PARAMETERS); - } - - final Collection auditEntries = this.auditReadPlatformService.retrieveAuditEntries(extraCriteria, - settings.isIncludeJson()); - - return this.toApiJsonSerializer.serialize(settings, auditEntries, RESPONSE_DATA_PARAMETERS); + return toApiJsonSerializer.serialize(parameters.isPaged() + ? auditReadPlatformService.retrievePaginatedAuditEntries(extraCriteria, settings.isIncludeJson(), parameters) + : auditReadPlatformService.retrieveAuditEntries(extraCriteria, settings.isIncludeJson())); } @GET @@ -135,17 +92,10 @@ public class AuditsApiResource { @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Retrieve an Audit Entry", description = "Example Requests:\n" + "\n" + "audits/20\n" + "audits/20?fields=madeOnDate,maker,processingResult") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = MakercheckersApiResourceSwagger.GetMakerCheckerResponse.class))) }) - public String retrieveAuditEntry(@PathParam("auditId") @Parameter(description = "auditId") final Long auditId, - @Context final UriInfo uriInfo) { + public AuditData retrieveAuditEntry(@PathParam("auditId") @Parameter final Long auditId) { + context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); + return auditReadPlatformService.retrieveAuditEntry(auditId); - this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - - final AuditData auditEntry = this.auditReadPlatformService.retrieveAuditEntry(auditId); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - return this.toApiJsonSerializer.serialize(settings, auditEntry, RESPONSE_DATA_PARAMETERS); } @GET @@ -154,45 +104,31 @@ public class AuditsApiResource { @Produces({ MediaType.APPLICATION_JSON }) @Operation(summary = "Audit Search Template", description = "This is a convenience resource. It can be useful when building an Audit Search UI. \"appUsers\" are data scoped to the office/branch the requestor is associated with.\n" + "\n" + "Example Requests:\n" + "\n" + "audits/searchtemplate\n" + "audits/searchtemplate?fields=actionNames") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = MakercheckersApiResourceSwagger.GetMakerCheckersSearchTemplateResponse.class))) }) - public String retrieveAuditSearchTemplate(@Context final UriInfo uriInfo) { - + public AuditSearchData retrieveAuditSearchTemplate() { this.context.authenticatedUser().validateHasReadPermission(RESOURCE_NAME_FOR_PERMISSIONS); - - final ApiRequestJsonSerializationSettings settings = this.apiRequestParameterHelper.process(uriInfo.getQueryParameters()); - - final AuditSearchData auditSearchData = this.auditReadPlatformService.retrieveSearchTemplate("audit"); - - final Set RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE = new HashSet<>( - Arrays.asList("appUsers", "actionNames", "entityNames", "status")); - - return this.toApiJsonSerializerSearchTemplate.serialize(settings, auditSearchData, RESPONSE_DATA_PARAMETERS_SEARCH_TEMPLATE); + return this.auditReadPlatformService.retrieveSearchTemplate("audit"); } - private SQLBuilder getExtraCriteria(final String actionName, final String entityName, final Long resourceId, final Long makerId, - final String makerDateTimeFrom, final String makerDateTimeTo, final Long checkerId, final String checkerDateTimeFrom, - final String checkerDateTimeTo, final Integer status, final Integer officeId, final Integer groupId, final Integer clientId, - final Integer loanId, final Integer savingsAccountId) { + private SQLBuilder getExtraCriteria(AuditRequest auditRequest) { 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 = ", auditRequest.getActionName()); + if (auditRequest.getEntityName() != null) { + extraCriteria.addCriteria("aud.entity_name like", auditRequest.getEntityName() + "%"); } - extraCriteria.addNonNullCriteria("aud.resource_id = ", resourceId); - extraCriteria.addNonNullCriteria("aud.maker_id = ", makerId); - extraCriteria.addNonNullCriteria("aud.checker_id = ", checkerId); - extraCriteria.addNonNullCriteria("aud.made_on_date >= ", makerDateTimeFrom); - extraCriteria.addNonNullCriteria("aud.made_on_date <= ", makerDateTimeTo); - extraCriteria.addNonNullCriteria("aud.checked_on_date >= ", checkerDateTimeFrom); - extraCriteria.addNonNullCriteria("aud.checked_on_date <= ", checkerDateTimeTo); - extraCriteria.addNonNullCriteria("aud.status = ", status); - 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 = ", auditRequest.getResourceId()); + extraCriteria.addNonNullCriteria("aud.maker_id = ", auditRequest.getMakerId()); + extraCriteria.addNonNullCriteria("aud.checker_id = ", auditRequest.getCheckerId()); + extraCriteria.addNonNullCriteria("aud.made_on_date >= ", auditRequest.getMakerDateTimeFrom()); + extraCriteria.addNonNullCriteria("aud.made_on_date <= ", auditRequest.getMakerDateTimeTo()); + extraCriteria.addNonNullCriteria("aud.checked_on_date >= ", auditRequest.getCheckerDateTimeFrom()); + extraCriteria.addNonNullCriteria("aud.checked_on_date <= ", auditRequest.getCheckerDateTimeTo()); + extraCriteria.addNonNullCriteria("aud.status = ", auditRequest.getStatus()); + extraCriteria.addNonNullCriteria("aud.office_id = ", auditRequest.getOfficeId()); + extraCriteria.addNonNullCriteria("aud.group_id = ", auditRequest.getGroupId()); + extraCriteria.addNonNullCriteria("aud.client_id = ", auditRequest.getClientId()); + extraCriteria.addNonNullCriteria("aud.loan_id = ", auditRequest.getLoanId()); + extraCriteria.addNonNullCriteria("aud.savings_account_id = ", auditRequest.getSavingsAccountId()); return extraCriteria; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditData.java b/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditData.java index 0f6b2dfb2..7cb158017 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditData.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.commands.data; +import java.io.Serial; +import java.io.Serializable; import java.time.ZonedDateTime; import lombok.AllArgsConstructor; import lombok.Getter; @@ -28,7 +30,10 @@ import lombok.Setter; */ @AllArgsConstructor @Getter -public final class AuditData { +public final class AuditData implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; private final Long id; private final String actionName; diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditSearchData.java b/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditSearchData.java index 047e80dee..373a27563 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditSearchData.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/data/AuditSearchData.java @@ -18,21 +18,20 @@ */ package org.apache.fineract.commands.data; +import java.io.Serial; +import java.io.Serializable; import java.util.Collection; import java.util.List; -import lombok.Getter; -import lombok.RequiredArgsConstructor; import org.apache.fineract.useradministration.data.AppUserData; /** * Immutable data object representing audit search results. */ -@RequiredArgsConstructor -@Getter -public final class AuditSearchData { - private final Collection appUsers; - private final List actionNames; - private final List entityNames; - private final Collection statuses; +public record AuditSearchData(Collection appUsers, List actionNames, List entityNames, + Collection statuses) implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + } diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/data/ProcessingResultLookup.java b/fineract-provider/src/main/java/org/apache/fineract/commands/data/ProcessingResultLookup.java index bca4ac5b1..55e3fe8c3 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/data/ProcessingResultLookup.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/data/ProcessingResultLookup.java @@ -18,17 +18,15 @@ */ package org.apache.fineract.commands.data; -import lombok.Getter; -import lombok.RequiredArgsConstructor; +import java.io.Serial; +import java.io.Serializable; /** * Immutable data object for application user data. */ -@RequiredArgsConstructor -@Getter -public class ProcessingResultLookup { +public record ProcessingResultLookup(Long id, String processingResult) implements Serializable { - private final Long id; - private final String processingResult; + @Serial + private static final long serialVersionUID = 1L; } diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/data/request/AuditRequest.java b/fineract-provider/src/main/java/org/apache/fineract/commands/data/request/AuditRequest.java new file mode 100644 index 000000000..cbc5994dd --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/data/request/AuditRequest.java @@ -0,0 +1,70 @@ +/** + * 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 AuditRequest 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("checkerId") + private Long checkerId; + @QueryParam("checkerDateTimeFrom") + private ZonedDateTime checkerDateTimeFrom; + @QueryParam("checkerDateTimeTo") + private ZonedDateTime checkerDateTimeTo; + @QueryParam("status") + private String status; + @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; + @QueryParam("processingResult") + private String processingResult; + +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformService.java b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformService.java index f7c90e4c4..059f40d24 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformService.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformService.java @@ -18,7 +18,7 @@ */ package org.apache.fineract.commands.service; -import java.util.Collection; +import java.util.List; import org.apache.fineract.commands.data.AuditData; import org.apache.fineract.commands.data.AuditSearchData; import org.apache.fineract.infrastructure.core.data.PaginationParameters; @@ -27,11 +27,11 @@ import org.apache.fineract.infrastructure.security.utils.SQLBuilder; public interface AuditReadPlatformService { - Collection retrieveAuditEntries(SQLBuilder extraCriteria, boolean includeJson); + List retrieveAuditEntries(SQLBuilder extraCriteria, boolean includeJson); Page retrievePaginatedAuditEntries(SQLBuilder extraCriteria, boolean includeJson, PaginationParameters parameters); - Collection retrieveAllEntriesToBeChecked(SQLBuilder extraCriteria, boolean includeJson); + List retrieveAllEntriesToBeChecked(SQLBuilder extraCriteria, boolean includeJson); AuditData retrieveAuditEntry(Long auditId); diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java index bf4113857..2d18544e1 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/service/AuditReadPlatformServiceImpl.java @@ -47,6 +47,7 @@ import org.apache.fineract.infrastructure.core.service.Page; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.database.DatabaseSpecificSQLGenerator; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.infrastructure.security.service.SqlValidator; import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.infrastructure.security.utils.SQLBuilder; import org.apache.fineract.organisation.office.data.OfficeData; @@ -92,6 +93,7 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { private final SavingsProductReadPlatformService savingsProductReadPlatformService; private final DepositProductReadPlatformService depositProductReadPlatformService; private final ColumnValidator columnValidator; + private final SqlValidator sqlValidator; private static final class AuditMapper implements RowMapper { @@ -167,7 +169,7 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { } @Override - public Collection retrieveAuditEntries(final SQLBuilder extraCriteria, final boolean includeJson) { + public List retrieveAuditEntries(final SQLBuilder extraCriteria, final boolean includeJson) { return retrieveEntries("audit", extraCriteria, " order by aud.id DESC limit " + PaginationParameters.DEFAULT_MAX_LIMIT, includeJson); } @@ -176,6 +178,8 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { public Page retrievePaginatedAuditEntries(final SQLBuilder extraCriteria, final boolean includeJson, final PaginationParameters parameters) { + sqlValidator.validate(parameters.getOrderBy()); + sqlValidator.validate(parameters.getSortOrder()); this.paginationParametersDataValidator.validateParameterValues(parameters, supportedOrderByValues, "audits"); final AppUser currentUser = this.context.authenticatedUser(); final String hierarchy = currentUser.getOffice().getHierarchy(); @@ -203,12 +207,12 @@ public class AuditReadPlatformServiceImpl implements AuditReadPlatformService { } @Override - public Collection retrieveAllEntriesToBeChecked(final SQLBuilder extraCriteria, final boolean includeJson) { + public List retrieveAllEntriesToBeChecked(final SQLBuilder extraCriteria, final boolean includeJson) { extraCriteria.addCriteria("aud.status = ", 2); return retrieveEntries("makerchecker", extraCriteria, " order by aud.id, mk.username", includeJson); } - private Collection retrieveEntries(final String useType, final SQLBuilder extraCriteria, final String groupAndOrderBySQL, + private List retrieveEntries(final String useType, final SQLBuilder extraCriteria, final String groupAndOrderBySQL, final boolean includeJson) { if ((!useType.equals("audit") && !useType.equals("makerchecker"))) { diff --git a/fineract-provider/src/main/java/org/apache/fineract/commands/starter/CommandsConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/commands/starter/CommandsConfiguration.java index 774d14833..3ed82971a 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/commands/starter/CommandsConfiguration.java +++ b/fineract-provider/src/main/java/org/apache/fineract/commands/starter/CommandsConfiguration.java @@ -25,6 +25,7 @@ import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper; import org.apache.fineract.infrastructure.core.service.PaginationHelper; import org.apache.fineract.infrastructure.core.service.database.DatabaseSpecificSQLGenerator; import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.infrastructure.security.service.SqlValidator; import org.apache.fineract.infrastructure.security.utils.ColumnValidator; import org.apache.fineract.organisation.office.service.OfficeReadPlatformService; import org.apache.fineract.organisation.staff.service.StaffReadPlatformService; @@ -50,11 +51,12 @@ public class CommandsConfiguration { PaginationHelper paginationHelper, DatabaseSpecificSQLGenerator sqlGenerator, PaginationParametersDataValidator paginationParametersDataValidator, SavingsProductReadPlatformService savingsProductReadPlatformService, - DepositProductReadPlatformService depositProductReadPlatformService, ColumnValidator columnValidator) { + DepositProductReadPlatformService depositProductReadPlatformService, ColumnValidator columnValidator, + SqlValidator sqlValidator) { return new AuditReadPlatformServiceImpl(jdbcTemplate, context, fromApiJsonHelper, appUserReadPlatformService, officeReadPlatformService, clientReadPlatformService, loanProductReadPlatformService, staffReadPlatformService, paginationHelper, sqlGenerator, paginationParametersDataValidator, savingsProductReadPlatformService, - depositProductReadPlatformService, columnValidator); + depositProductReadPlatformService, columnValidator, sqlValidator); } }