From 1569aa7da3d69eca31783adb0ada457e3642c670 Mon Sep 17 00:00:00 2001 From: Dragomir Todorov Date: Wed, 9 Jan 2019 16:42:30 +0200 Subject: [PATCH] NY-6550, NY-6560: Added validation, fixed small bug --- .../account/grid/ag/AdminServiceImpl.java | 58 +++++++++++++++---- .../nynja/account/grid/ag/AgGridService.java | 2 +- 2 files changed, 48 insertions(+), 12 deletions(-) diff --git a/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java b/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java index 1c9272e..87fb0fa 100644 --- a/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java +++ b/src/main/java/biz/nynja/account/grid/ag/AdminServiceImpl.java @@ -3,6 +3,7 @@ */ package biz.nynja.account.grid.ag; +import org.apache.commons.lang3.StringUtils; import org.lognet.springboot.grpc.GRpcService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,6 +14,8 @@ import biz.nynja.account.admin.grpc.AccountsCount; import biz.nynja.account.admin.grpc.AdminAccountServiceGrpc; import biz.nynja.account.admin.grpc.CreateAccountRequest; import biz.nynja.account.admin.grpc.EmptyRequest; +import biz.nynja.account.admin.grpc.FilterModel; +import biz.nynja.account.admin.grpc.FilterModel.FilterType; import biz.nynja.account.admin.grpc.GetAllAccountsRequest; import biz.nynja.account.grpc.AccountResponse; import biz.nynja.account.grpc.CompletePendingAccountCreationRequest; @@ -52,10 +55,11 @@ public class AdminServiceImpl extends AdminAccountServiceGrpc.AdminAccountServic logger.info("Getting accounts ..."); logger.debug("Getting accounts: {} ...", request); - Validation validation = validateRowInput(request.getStartRow(), request.getEndRow()); + Validation validation = validateInput(request); if (validation.hasErrors()) { responseObserver.onNext(AccountsAdminResponse.newBuilder().setError(ErrorResponse.newBuilder() - .setCause(validation.getCause().get()).setMessage(validation.getErrorMessage())).build()); + .setCause(validation.getCause().get()).setMessage(validation.getErrors().get(0).getMessage())) + .build()); responseObserver.onCompleted(); return; } @@ -67,18 +71,50 @@ public class AdminServiceImpl extends AdminAccountServiceGrpc.AdminAccountServic responseObserver.onCompleted(); } - private Validation validateRowInput(int startRow, int endRow) { + private Validation validateInput(GetAllAccountsRequest request) { Validation validation = new Validation(); - if (startRow < 1) { - validation.addError(new ValidationError( - "startRow parameter (" + startRow - + ") should be more than 1 and less or equal to endRow parameter (" + endRow + ").", + if (request.getStartRow() < 1) { + validation.addError(new ValidationError("startRow parameter (" + request.getStartRow() + + ") should be more than 1 and less or equal to endRow parameter (" + request.getStartRow() + ").", Cause.ADMIN_INVALID_START_ROW)); - } else if (endRow < startRow || (endRow > accountRepository.count() + 100)) { - validation.addError(new ValidationError("endRow parameter (" + endRow + ") should be more than start row (" - + startRow + ") and less than all users plus maximum pagination of 100." - + (accountRepository.count() + 100), Cause.ADMIN_INVALID_END_ROW)); } + if (request.getEndRow() < request.getStartRow() || (request.getEndRow() > accountRepository.count() + 100)) { + validation.addError( + new ValidationError("endRow parameter (" + request.getEndRow() + ") should be more than start row (" + + request.getStartRow() + ") and less than all users plus maximum pagination of 100." + + (accountRepository.count() + 100), Cause.ADMIN_INVALID_END_ROW)); + } + + for (FilterModel model : request.getFilterModelList()) { + if ("creationTimestamp".equals(model.getColId()) || "lastUpdateTimestamp".equals(model.getColId())) { + try { + Long.valueOf(model.getFilterValue()); + if (!StringUtils.isEmpty(model.getAdditionalFilterValue())) { + Long.valueOf(model.getAdditionalFilterValue()); + + if (Long.valueOf(model.getFilterValue()) > Long.valueOf(model.getAdditionalFilterValue())) { + validation.addError(new ValidationError( + "When filtering by creationTimestamp and lastUpdateTimestamp filter value should be lower than additional filter value.", + Cause.ADMIN_INVALID_FILTER_CRITERIA)); + } + } + } catch (NumberFormatException e) { + validation.addError(new ValidationError( + "When filtering by creationTimestamp and lastUpdateTimestamp filter values should be valid long numbers.", + Cause.ADMIN_INVALID_FILTER_CRITERIA)); + } + + if ((FilterType.EQUALS.equals(model.getFilterType()) + || FilterType.NOTEQUAL.equals(model.getFilterType())) + && (StringUtils.isEmpty(model.getFilterValue()) + || StringUtils.isEmpty(model.getAdditionalFilterValue()))) { + validation.addError(new ValidationError( + "When filtering by creationTimestamp and lastUpdateTimestamp with type of equals or nonequal both values should be present.", + Cause.ADMIN_INVALID_FILTER_CRITERIA)); + } + } + } + return validation; } diff --git a/src/main/java/biz/nynja/account/grid/ag/AgGridService.java b/src/main/java/biz/nynja/account/grid/ag/AgGridService.java index 4d70652..88f2419 100644 --- a/src/main/java/biz/nynja/account/grid/ag/AgGridService.java +++ b/src/main/java/biz/nynja/account/grid/ag/AgGridService.java @@ -167,7 +167,7 @@ public class AgGridService { } else { helper = getFilteredResults(pageable, filterModel); accounts.retainAll(helper.getAccounts().getContent()); - if (count < helper.getCount()) { + if (helper.getCount() < count) { count = helper.getCount(); } } -- GitLab