validate from dictionaries

This commit is contained in:
akulikov 2023-01-13 15:13:23 +03:00
parent 5b82cf4d22
commit f91e15f2a4
2 changed files with 93 additions and 21 deletions

View file

@ -28,6 +28,10 @@
<groupId>ru.spcex.platform</groupId>
<artifactId>platform-imdg-api-hazelcast-impl</artifactId>
</dependency>
<dependency>
<groupId>ru.spcex.clearing</groupId>
<artifactId>dictionary</artifactId>
</dependency>
<dependency>
<groupId>ru.spcex.clearing</groupId>
<artifactId>classes</artifactId>

View file

@ -1,27 +1,32 @@
package ru.spcex.clearing.scheduler;
import org.slf4j.Logger;
import ru.clearing.platform.dictionary.AbstractDictionary;
import ru.clearing.platform.dictionary.DayStatusDictionary;
import ru.clearing.platform.dictionary.TaskDictionary;
import ru.clearing.platform.dictionary.TaskStatusDictionary;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.*;
import ru.spcex.platform.enumeration.DayStatus;
import ru.spcex.platform.enumeration.Market;
import ru.spcex.platform.enumeration.Status;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.api.ImdgProvider;
import ru.spcex.platform.utils.enumeration.IEnumKey;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
public interface IRequestValidator<T> {
List<ValidationError> validate(T req);
List<ValidationError> validate(T req, ImdgProvider imdgProvider);
/**
* Общий запрос на удаление
*/
IRequestValidator<CommonDeleteRequest> COMMON_DELETE_REQUEST = req -> {
IRequestValidator<CommonDeleteRequest> COMMON_DELETE_REQUEST = (req, imdgProvider) -> {
var errors = new LinkedList<ValidationError>();
validateLong(req.id, "id", true, errors);
return errors;
@ -30,36 +35,56 @@ public interface IRequestValidator<T> {
/**
* Запрос на добавление ClearingCalendar
*/
IRequestValidator<ClearingCalendarNewRequest> CLEARING_CALENDAR_NEW_REQUEST = req -> {
IRequestValidator<ClearingCalendarNewRequest> CLEARING_CALENDAR_NEW_REQUEST = (req, imdgProvider) -> {
var errors = new LinkedList<ValidationError>();
validateDate(req.clearingDate, "clearingDate", true, true, errors);
validateLong(req.companyId, "companyId", false, errors);
validateEnum(req.dayStatus, "dayStatus", true, errors, DayStatus.values());
// validateEnum(req.dayStatus, "dayStatus", true, errors, DayStatus.values());
validateDictionary(req.dayStatus,
"dayStatus",
true,
imdgProvider.getImdg(IMDGDistributedNames.Map_DayStatusDictionary, DayStatusDictionary.class),
errors);
return errors;
};
/**
* Запрос на обновление ClearingCalendar
*/
IRequestValidator<ClearingCalendarUpdateRequest> CLEARING_CALENDAR_UPDATE_REQUEST = req -> {
IRequestValidator<ClearingCalendarUpdateRequest> CLEARING_CALENDAR_UPDATE_REQUEST = (req, imdgProvider) -> {
var errors = new LinkedList<ValidationError>();
validateLong(req.id, "id", true, errors);
validateLong(req.companyId, "companyId", false, errors);
validateDate(req.clearingDate, "clearingDate", false, true, errors);
validateEnum(req.dayStatus, "dayStatus", false, errors, DayStatus.values());
// validateEnum(req.dayStatus, "dayStatus", false, errors, DayStatus.values());
validateDictionary(req.dayStatus,
"dayStatus",
false,
imdgProvider.getImdg(IMDGDistributedNames.Map_DayStatusDictionary, DayStatusDictionary.class),
errors);
return errors;
};
/**
* Запрос на добавление Planner
*/
IRequestValidator<PlannerNewRequest> PLANNER_NEW_REQUEST = req -> {
IRequestValidator<PlannerNewRequest> PLANNER_NEW_REQUEST = (req, imdgProvider) -> {
var errors = new LinkedList<ValidationError>();
validateEnum(req.task, "task", true, errors, Task.values());
// validateEnum(req.task, "task", true, errors, Task.values());
validateDictionary(req.task,
"task",
true,
imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class),
errors);
validateDate(req.clearingDate, "clearingDate", true, true, errors);
validateTime(req.taskTime, "taskTime", true, true, errors);
validateEnum(req.market, "market", false, errors, Market.values());
validateEnum(req.taskStatus, "taskStatus", true, errors, Status.values());
// validateEnum(req.taskStatus, "taskStatus", true, errors, Status.values());
validateDictionary(req.taskStatus,
"taskStatus",
true,
imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class),
errors);
validateLong(req.companyId, "companyId", false, errors);
validateLong(req.securityId, "securityId", false, errors);
return errors;
@ -68,14 +93,24 @@ public interface IRequestValidator<T> {
/**
* Запрос на обновление Planner
*/
IRequestValidator<PlannerUpdateRequest> PLANNER_UPDATE_REQUEST = req -> {
IRequestValidator<PlannerUpdateRequest> PLANNER_UPDATE_REQUEST = (req, imdgProvider) -> {
var errors = new LinkedList<ValidationError>();
validateLong(req.id, "id", true, errors);
validateEnum(req.task, "task", false, errors, Task.values());
// validateEnum(req.task, "task", false, errors, Task.values());
validateDictionary(req.task,
"task",
false,
imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class),
errors);
validateDate(req.clearingDate, "clearingDate", false, true, errors);
validateTime(req.taskTime, "taskTime", false, true, errors);
validateEnum(req.market, "market", false, errors, Market.values());
validateEnum(req.taskStatus, "taskStatus", false, errors, Status.values());
// validateEnum(req.taskStatus, "taskStatus", false, errors, Status.values());
validateDictionary(req.taskStatus,
"taskStatus",
false,
imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class),
errors);
validateLong(req.companyId, "companyId", false, errors);
validateLong(req.securityId, "securityId", false, errors);
return errors;
@ -84,11 +119,21 @@ public interface IRequestValidator<T> {
/**
* Запрос на добавление PlannerTemplate
*/
IRequestValidator<PlannerTemplateNewRequest> PLANNER_TEMPLATE_NEW_REQUEST = req -> {
IRequestValidator<PlannerTemplateNewRequest> PLANNER_TEMPLATE_NEW_REQUEST = (req, imdgProvider) -> {
var errors = new LinkedList<ValidationError>();
validateEnum(req.task, "task", true, errors, Task.values());
// validateEnum(req.task, "task", true, errors, Task.values());
validateDictionary(req.task,
"task",
true,
imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class),
errors);
validateTime(req.taskTime, "taskTime", true, true, errors);
validateEnum(req.taskStatus, "taskStatus", true, errors, Status.values());
// validateEnum(req.taskStatus, "taskStatus", true, errors, Status.values());
validateDictionary(req.taskStatus,
"taskStatus",
true,
imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class),
errors);
validateLong(req.companyId, "companyId", false, errors);
validateLong(req.securityId, "securityId", false, errors);
return errors;
@ -97,12 +142,22 @@ public interface IRequestValidator<T> {
/**
* Запрос на обновление PlannerTemplate
*/
IRequestValidator<PlannerTemplateUpdateRequest> PLANNER_TEMPLATE_UPDATE_REQUEST = req -> {
IRequestValidator<PlannerTemplateUpdateRequest> PLANNER_TEMPLATE_UPDATE_REQUEST = (req, imdgProvider) -> {
var errors = new LinkedList<ValidationError>();
validateLong(req.id, "id", true, errors);
validateEnum(req.task, "task", false, errors, Task.values());
// validateEnum(req.task, "task", false, errors, Task.values());
validateDictionary(req.task,
"task",
false,
imdgProvider.getImdg(IMDGDistributedNames.Map_TaskDictionary, TaskDictionary.class),
errors);
validateTime(req.taskTime, "taskTime", false, true, errors);
validateEnum(req.taskStatus, "taskStatus", false, errors, Status.values());
// validateEnum(req.taskStatus, "taskStatus", false, errors, Status.values());
validateDictionary(req.taskStatus,
"taskStatus",
false,
imdgProvider.getImdg(IMDGDistributedNames.Map_TaskStatusDictionary, TaskStatusDictionary.class),
errors);
validateLong(req.companyId, "companyId", false, errors);
validateLong(req.securityId, "securityId", false, errors);
return errors;
@ -110,6 +165,19 @@ public interface IRequestValidator<T> {
static <T extends AbstractDictionary> void validateDictionary(String src,
String fieldName,
boolean required,
Imdg<T> dictionary,
List<ValidationError> errors) {
if (src != null) {
boolean correctTask = false;
Collection<T> values = dictionary.getAllValues();
for (T value : values) correctTask |= src.equalsIgnoreCase(value.getCode());
if (!correctTask)
errors.add(new ValidationError(fieldName, ErrorType.UNKNOWN_VALUE));
} else if (required) errors.add(new ValidationError(fieldName, ErrorType.MISSING_REQUIRED));
}
static <T extends Enum<T> & IEnumKey> void validateEnum(String enumStr,
String fieldName,