SUPPORT-8974 send empty id list

This commit is contained in:
ivanov.denis 2025-03-06 12:03:02 +03:00
parent f78f3ea446
commit 87927541cc
5 changed files with 114 additions and 60 deletions

View file

@ -21,4 +21,5 @@ public class RequestValidationRules {
@XmlAttribute(name = "isIdsFormatted")
private Boolean isIdsFormatted = true;
}

View file

@ -24,7 +24,6 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Service
public class ValidationService {
@ -78,64 +77,74 @@ public class ValidationService {
public Map<String, Boolean> validateRequest(BaseRequest request, List<String> ids) throws ValidationException, SQLException, FileNotFoundException {
RequestValidationRules requestValidationRules = new RequestValidationRules();
Map<String, Boolean> validationResults = validateIds(request, ids, requestValidationRules);
if (isRequestValidatedByValidationConfig) validateByValidationConfig(ids, BaseRequest.class);
Map<String, Boolean> emptyIdsRules = getRulesForEmptyIds(request, ids, requestValidationRules);
return validationResults;
if (isRequestValidatedByValidationConfig) {
validateByValidationConfig(ids, BaseRequest.class);
}
return emptyIdsRules;
}
public Map<String, Boolean> validateMilitaryNoticeRequest(BaseRequest request, RequestParameters parameters) throws ValidationException, SQLException, FileNotFoundException {
RequestValidationRules requestValidationRules = new RequestValidationRules();
List<String> ids = parameters.getIds();
Map<String, Boolean> validateIds = validateIds(request, ids, requestValidationRules);
Map<String, Boolean> validateDates = validateDates(request, parameters);
Map<String, Boolean> emptyIdsRules = getRulesForEmptyIds(request, ids, requestValidationRules);
Map<String, Boolean> emptyDatesRules = getRulesForEmptyDates(request, parameters);
if (isMilitaryNoticeRequestValidatedByValidationConfig) validateByValidationConfig(ids, RequestParameters.class);
if (isMilitaryNoticeRequestValidatedByValidationConfig) {
validateByValidationConfig(ids, RequestParameters.class);
}
Map<String, Boolean> merged = new HashMap<>();
merged.putAll(validateIds);
merged.putAll(validateDates);
merged.putAll(emptyIdsRules);
merged.putAll(emptyDatesRules);
return merged;
}
public Map<String, Boolean> validateDownloadRequest(BaseDownloadRequest request, RequestParameters downloadRequest, List<String> ids) throws ValidationException {
RequestValidationRules requestValidationRules = new RequestValidationRules();
Map<String, Boolean> validateIds = validateIds(request, ids, requestValidationRules);
Map<String, Boolean> validateDates = validateDates(request, downloadRequest);
Map<String, Boolean> emptyIdsRules = getRulesForEmptyIds(request, ids, requestValidationRules);
Map<String, Boolean> emptyDatesRules = getRulesForEmptyDates(request, downloadRequest);
Map<String, Boolean> merged = new HashMap<>();
merged.putAll(validateIds);
merged.putAll(validateDates);
merged.putAll(emptyIdsRules);
merged.putAll(emptyDatesRules);
return merged;
}
private static Map<String, Boolean> validateIds(BaseRequest request, List<String> ids, RequestValidationRules requestValidationRules) {
private static Map<String, Boolean> getRulesForEmptyIds(BaseRequest request, List<String> ids, RequestValidationRules defaultRules) {
if (request.getRequestValidationRules() == null) {
return Map.of(ValidationService.IS_EMPTY_IDS_ALLOWED, requestValidationRules.getIsEmptyIdsAllowed());
if (request.getRequestValidationRules() == null && defaultRules.getIsEmptyIdsAllowed()) {
return Map.of(ValidationService.IS_EMPTY_IDS_ALLOWED, true);
}
Boolean emptyIdsAllowed = request.getRequestValidationRules().getIsEmptyIdsAllowed();
if (emptyIdsAllowed) {
return Map.of(ValidationService.IS_EMPTY_IDS_ALLOWED, emptyIdsAllowed);
if (request.getRequestValidationRules() != null && request.getRequestValidationRules().getIsEmptyIdsAllowed()) {
return Map.of(ValidationService.IS_EMPTY_IDS_ALLOWED, true);
}
if (ids == null || ids.isEmpty()) {
throw new IllegalRequestParametersException("eks.error.argument.missing");
}
Boolean isIdsFormatted = request.getRequestValidationRules().getIsIdsFormatted();
if (isIdsFormatted) {
String uuidRegex = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
boolean isIdsFormatted = (request.getRequestValidationRules() != null && request.getRequestValidationRules().getIsIdsFormatted())
|| (request.getRequestValidationRules() == null && defaultRules.getIsIdsFormatted());
boolean invalidIdFound = ids.stream().anyMatch(id -> !id.matches(uuidRegex));
if (invalidIdFound) {
throw new IllegalRequestParametersException("eks.error.argument.invalid");
}
if (!isIdsFormatted) {
return Map.of(ValidationService.IS_EMPTY_IDS_ALLOWED, false);
}
return Map.of(ValidationService.IS_EMPTY_IDS_ALLOWED, emptyIdsAllowed);
String uuidRegex = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
boolean invalidIdFound = ids.stream().anyMatch(id -> !id.matches(uuidRegex));
if (!invalidIdFound) {
return Map.of(ValidationService.IS_EMPTY_IDS_ALLOWED, false);
}
throw new IllegalRequestParametersException("eks.error.argument.invalid");
}
private static <T extends RequestParameters> Boolean validateEmptyDates(BaseRequest request, T parameters) {
@ -151,7 +160,7 @@ public class ValidationService {
return emptyDatesAllowed;
}
private <R extends BaseRequest, T extends RequestParameters> Map<String, Boolean> validateDates(R request, T parameters) {
private <R extends BaseRequest, T extends RequestParameters> Map<String, Boolean> getRulesForEmptyDates(R request, T parameters) {
Boolean emptyDatesAllowed = validateEmptyDates(request, parameters);
if (!emptyDatesAllowed && parameters.getStartDate() != null && parameters.getEndDate() != null) {
if (parameters.getStartDate().isAfter(parameters.getEndDate())) {