validate from dictionaries
This commit is contained in:
parent
5b82cf4d22
commit
f91e15f2a4
2 changed files with 93 additions and 21 deletions
|
|
@ -28,6 +28,10 @@
|
||||||
<groupId>ru.spcex.platform</groupId>
|
<groupId>ru.spcex.platform</groupId>
|
||||||
<artifactId>platform-imdg-api-hazelcast-impl</artifactId>
|
<artifactId>platform-imdg-api-hazelcast-impl</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
|
<artifactId>dictionary</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ru.spcex.clearing</groupId>
|
<groupId>ru.spcex.clearing</groupId>
|
||||||
<artifactId>classes</artifactId>
|
<artifactId>classes</artifactId>
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,32 @@
|
||||||
package ru.spcex.clearing.scheduler;
|
package ru.spcex.clearing.scheduler;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
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.common.CommonDeleteRequest;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.*;
|
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.Market;
|
||||||
import ru.spcex.platform.enumeration.Status;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.enumeration.Task;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
import ru.spcex.platform.utils.enumeration.IEnumKey;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public interface IRequestValidator<T> {
|
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>();
|
var errors = new LinkedList<ValidationError>();
|
||||||
validateLong(req.id, "id", true, errors);
|
validateLong(req.id, "id", true, errors);
|
||||||
return errors;
|
return errors;
|
||||||
|
|
@ -30,36 +35,56 @@ public interface IRequestValidator<T> {
|
||||||
/**
|
/**
|
||||||
* Запрос на добавление ClearingCalendar
|
* Запрос на добавление ClearingCalendar
|
||||||
*/
|
*/
|
||||||
IRequestValidator<ClearingCalendarNewRequest> CLEARING_CALENDAR_NEW_REQUEST = req -> {
|
IRequestValidator<ClearingCalendarNewRequest> CLEARING_CALENDAR_NEW_REQUEST = (req, imdgProvider) -> {
|
||||||
var errors = new LinkedList<ValidationError>();
|
var errors = new LinkedList<ValidationError>();
|
||||||
validateDate(req.clearingDate, "clearingDate", true, true, errors);
|
validateDate(req.clearingDate, "clearingDate", true, true, errors);
|
||||||
validateLong(req.companyId, "companyId", false, 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;
|
return errors;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запрос на обновление ClearingCalendar
|
* Запрос на обновление ClearingCalendar
|
||||||
*/
|
*/
|
||||||
IRequestValidator<ClearingCalendarUpdateRequest> CLEARING_CALENDAR_UPDATE_REQUEST = req -> {
|
IRequestValidator<ClearingCalendarUpdateRequest> CLEARING_CALENDAR_UPDATE_REQUEST = (req, imdgProvider) -> {
|
||||||
var errors = new LinkedList<ValidationError>();
|
var errors = new LinkedList<ValidationError>();
|
||||||
validateLong(req.id, "id", true, errors);
|
validateLong(req.id, "id", true, errors);
|
||||||
validateLong(req.companyId, "companyId", false, errors);
|
validateLong(req.companyId, "companyId", false, errors);
|
||||||
validateDate(req.clearingDate, "clearingDate", false, true, 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;
|
return errors;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Запрос на добавление Planner
|
* Запрос на добавление Planner
|
||||||
*/
|
*/
|
||||||
IRequestValidator<PlannerNewRequest> PLANNER_NEW_REQUEST = req -> {
|
IRequestValidator<PlannerNewRequest> PLANNER_NEW_REQUEST = (req, imdgProvider) -> {
|
||||||
var errors = new LinkedList<ValidationError>();
|
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);
|
validateDate(req.clearingDate, "clearingDate", true, true, errors);
|
||||||
validateTime(req.taskTime, "taskTime", true, true, errors);
|
validateTime(req.taskTime, "taskTime", true, true, errors);
|
||||||
validateEnum(req.market, "market", false, errors, Market.values());
|
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.companyId, "companyId", false, errors);
|
||||||
validateLong(req.securityId, "securityId", false, errors);
|
validateLong(req.securityId, "securityId", false, errors);
|
||||||
return errors;
|
return errors;
|
||||||
|
|
@ -68,14 +93,24 @@ public interface IRequestValidator<T> {
|
||||||
/**
|
/**
|
||||||
* Запрос на обновление Planner
|
* Запрос на обновление Planner
|
||||||
*/
|
*/
|
||||||
IRequestValidator<PlannerUpdateRequest> PLANNER_UPDATE_REQUEST = req -> {
|
IRequestValidator<PlannerUpdateRequest> PLANNER_UPDATE_REQUEST = (req, imdgProvider) -> {
|
||||||
var errors = new LinkedList<ValidationError>();
|
var errors = new LinkedList<ValidationError>();
|
||||||
validateLong(req.id, "id", true, errors);
|
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);
|
validateDate(req.clearingDate, "clearingDate", false, true, errors);
|
||||||
validateTime(req.taskTime, "taskTime", false, true, errors);
|
validateTime(req.taskTime, "taskTime", false, true, errors);
|
||||||
validateEnum(req.market, "market", false, errors, Market.values());
|
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.companyId, "companyId", false, errors);
|
||||||
validateLong(req.securityId, "securityId", false, errors);
|
validateLong(req.securityId, "securityId", false, errors);
|
||||||
return errors;
|
return errors;
|
||||||
|
|
@ -84,11 +119,21 @@ public interface IRequestValidator<T> {
|
||||||
/**
|
/**
|
||||||
* Запрос на добавление PlannerTemplate
|
* Запрос на добавление PlannerTemplate
|
||||||
*/
|
*/
|
||||||
IRequestValidator<PlannerTemplateNewRequest> PLANNER_TEMPLATE_NEW_REQUEST = req -> {
|
IRequestValidator<PlannerTemplateNewRequest> PLANNER_TEMPLATE_NEW_REQUEST = (req, imdgProvider) -> {
|
||||||
var errors = new LinkedList<ValidationError>();
|
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);
|
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.companyId, "companyId", false, errors);
|
||||||
validateLong(req.securityId, "securityId", false, errors);
|
validateLong(req.securityId, "securityId", false, errors);
|
||||||
return errors;
|
return errors;
|
||||||
|
|
@ -97,12 +142,22 @@ public interface IRequestValidator<T> {
|
||||||
/**
|
/**
|
||||||
* Запрос на обновление PlannerTemplate
|
* Запрос на обновление PlannerTemplate
|
||||||
*/
|
*/
|
||||||
IRequestValidator<PlannerTemplateUpdateRequest> PLANNER_TEMPLATE_UPDATE_REQUEST = req -> {
|
IRequestValidator<PlannerTemplateUpdateRequest> PLANNER_TEMPLATE_UPDATE_REQUEST = (req, imdgProvider) -> {
|
||||||
var errors = new LinkedList<ValidationError>();
|
var errors = new LinkedList<ValidationError>();
|
||||||
validateLong(req.id, "id", true, errors);
|
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);
|
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.companyId, "companyId", false, errors);
|
||||||
validateLong(req.securityId, "securityId", false, errors);
|
validateLong(req.securityId, "securityId", false, errors);
|
||||||
return 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,
|
static <T extends Enum<T> & IEnumKey> void validateEnum(String enumStr,
|
||||||
String fieldName,
|
String fieldName,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue