refactor and docs
This commit is contained in:
parent
ff8dd10f52
commit
84083be396
7 changed files with 99 additions and 23 deletions
|
|
@ -3,26 +3,18 @@ package ru.spcex.clearing.scheduler.config.validation;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import ru.clearing.classes.statics.data.company.Company;
|
import ru.clearing.classes.statics.data.company.Company;
|
||||||
import ru.clearing.classes.statics.data.scheduler.ClearingCalendar;
|
|
||||||
import ru.clearing.classes.statics.data.security.Security;
|
import ru.clearing.classes.statics.data.security.Security;
|
||||||
import ru.clearing.platform.dictionary.DayStatusDictionary;
|
import ru.clearing.platform.dictionary.DayStatusDictionary;
|
||||||
import ru.clearing.platform.dictionary.TaskDictionary;
|
import ru.clearing.platform.dictionary.TaskDictionary;
|
||||||
import ru.clearing.platform.dictionary.TaskStatusDictionary;
|
import ru.clearing.platform.dictionary.TaskStatusDictionary;
|
||||||
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
import ru.spcex.clearing.imdg.IMDGDistributedNames;
|
||||||
import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest;
|
|
||||||
import ru.spcex.clearing.scheduler.error.ValidationError;
|
|
||||||
import ru.spcex.clearing.scheduler.validation.rules.common.IdPresentRule;
|
|
||||||
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
import ru.spcex.platform.classes.base.SpcexObjectBase;
|
||||||
import ru.spcex.platform.imdg.api.Imdg;
|
import ru.spcex.platform.imdg.api.Imdg;
|
||||||
import ru.spcex.platform.imdg.api.ImdgProvider;
|
import ru.spcex.platform.imdg.api.ImdgProvider;
|
||||||
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
|
||||||
import ru.spcex.platform.utils.validation.IValidator;
|
|
||||||
import ru.spcex.platform.utils.validation.ValidatorImpl;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class ValidationConfig {
|
public class ValidationConfig {
|
||||||
|
|
@ -39,19 +31,4 @@ public class ValidationConfig {
|
||||||
return imdg;
|
return imdg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean("commonDeleteRequestValidator")
|
|
||||||
public Function<CommonDeleteRequest, IValidator> commonDeleteRequestValidator() {
|
|
||||||
return commonDeleteRequest -> {
|
|
||||||
ImdgValidationContext<CommonDeleteRequest> context = new ImdgValidationContext<>();
|
|
||||||
context.setValidatedObject(commonDeleteRequest);
|
|
||||||
return new ValidatorImpl<>(context,
|
|
||||||
IdPresentRule.instance("id",
|
|
||||||
CommonDeleteRequest::getId,
|
|
||||||
IMDGDistributedNames.Map_ClearingCalendar,
|
|
||||||
ClearingCalendar.class,
|
|
||||||
ValidationError.RecordNotFound)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,27 @@ import java.time.LocalDate;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка поля с LocalDate. Условие проверки: поверяемая дата >= текущая дата
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
public record DateNotBeforeRule<R>(String fieldName, Function<R, LocalDate> getter, boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
public record DateNotBeforeRule<R>(String fieldName, Function<R, LocalDate> getter, boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||||
|
* @param getter Метод получения проверяемой даты
|
||||||
|
* @param required Флаг обязательности поля
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
public static <R> DateNotBeforeRule<R> instance(String fieldName, Function<R, LocalDate> getter, boolean required) {
|
public static <R> DateNotBeforeRule<R> instance(String fieldName, Function<R, LocalDate> getter, boolean required) {
|
||||||
return new DateNotBeforeRule<>(fieldName, getter, required);
|
return new DateNotBeforeRule<>(fieldName, getter, required);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||||
|
* @param getter Метод получения проверяемой даты
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
public static <R> DateNotBeforeRule<R> instance(String fieldName, Function<R, LocalDate> getter) {
|
public static <R> DateNotBeforeRule<R> instance(String fieldName, Function<R, LocalDate> getter) {
|
||||||
return new DateNotBeforeRule<>(fieldName, getter, true);
|
return new DateNotBeforeRule<>(fieldName, getter, true);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,12 +11,26 @@ import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка поля с кодом из словаря (таблицы *_dictionary)
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <D> Класс словаря
|
||||||
|
*/
|
||||||
public record DictionaryPresentRule<R, D extends AbstractDictionary>(String fieldName,
|
public record DictionaryPresentRule<R, D extends AbstractDictionary>(String fieldName,
|
||||||
Function<R, String> getter,
|
Function<R, String> getter,
|
||||||
String dictionaryName,
|
String dictionaryName,
|
||||||
Class<D> dictionaryClass,
|
Class<D> dictionaryClass,
|
||||||
boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля
|
||||||
|
* @param getter Метод получения проверяемого значения
|
||||||
|
* @param dictionaryName Название словаря (см. IMDGDistributedNames)
|
||||||
|
* @param dictionaryClass Класс словаря (классы *Dictionary.class)
|
||||||
|
* @param required Флаг обязательности
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <D> Класс словаря
|
||||||
|
*/
|
||||||
public static <R, D extends AbstractDictionary> DictionaryPresentRule<R, D> instance(String fieldName,
|
public static <R, D extends AbstractDictionary> DictionaryPresentRule<R, D> instance(String fieldName,
|
||||||
Function<R, String> getter,
|
Function<R, String> getter,
|
||||||
String dictionaryName,
|
String dictionaryName,
|
||||||
|
|
@ -25,6 +39,14 @@ public record DictionaryPresentRule<R, D extends AbstractDictionary>(String fiel
|
||||||
return new DictionaryPresentRule<>(fieldName, getter, dictionaryName, dictionaryClass, required);
|
return new DictionaryPresentRule<>(fieldName, getter, dictionaryName, dictionaryClass, required);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля
|
||||||
|
* @param getter Метод получения проверяемого значения
|
||||||
|
* @param dictionaryName Название словаря (см. IMDGDistributedNames)
|
||||||
|
* @param dictionaryClass Класс словаря (классы *Dictionary.class)
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <D> Класс словаря
|
||||||
|
*/
|
||||||
public static <R, D extends AbstractDictionary> DictionaryPresentRule<R, D> instance(String fieldName,
|
public static <R, D extends AbstractDictionary> DictionaryPresentRule<R, D> instance(String fieldName,
|
||||||
Function<R, String> getter,
|
Function<R, String> getter,
|
||||||
String dictionaryName,
|
String dictionaryName,
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,24 @@ import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка поля со значением из множества (enum)
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <E> Enum
|
||||||
|
*/
|
||||||
public record EnumPresentRule<R, E extends IEnumKey>(String fieldName,
|
public record EnumPresentRule<R, E extends IEnumKey>(String fieldName,
|
||||||
Function<R, String> getter,
|
Function<R, String> getter,
|
||||||
E[] enumValues,
|
E[] enumValues,
|
||||||
boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля
|
||||||
|
* @param getter Метод получения проверяемого значения
|
||||||
|
* @param enumValues Значения из проверяемого множества (Enum.values())
|
||||||
|
* @param required Флаг обязательности
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <E> Enum
|
||||||
|
*/
|
||||||
public static <R, E extends IEnumKey> EnumPresentRule<R, E> instance(String fieldName,
|
public static <R, E extends IEnumKey> EnumPresentRule<R, E> instance(String fieldName,
|
||||||
Function<R, String> getter,
|
Function<R, String> getter,
|
||||||
E[] enumValues,
|
E[] enumValues,
|
||||||
|
|
@ -21,6 +34,13 @@ public record EnumPresentRule<R, E extends IEnumKey>(String fieldName,
|
||||||
return new EnumPresentRule<>(fieldName, getter, enumValues, required);
|
return new EnumPresentRule<>(fieldName, getter, enumValues, required);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля
|
||||||
|
* @param getter Метод получения проверяемого значения
|
||||||
|
* @param enumValues Значения из проверяемого множества (Enum.values())
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <E> Enum
|
||||||
|
*/
|
||||||
public static <R, E extends IEnumKey> EnumPresentRule<R, E> instance(String fieldName,
|
public static <R, E extends IEnumKey> EnumPresentRule<R, E> instance(String fieldName,
|
||||||
Function<R, String> getter,
|
Function<R, String> getter,
|
||||||
E[] enumValues) {
|
E[] enumValues) {
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,19 @@ import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка обязательности поля (not null)
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <V> Класс проверяемого значения
|
||||||
|
*/
|
||||||
public record FieldRequiredRule<R, V>(String fieldName, Function<R, V> getter) implements IValidationRule<ImdgValidationContext<R>> {
|
public record FieldRequiredRule<R, V>(String fieldName, Function<R, V> getter) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля
|
||||||
|
* @param getter Метод получения значения
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <V> Класс проверяемого значения
|
||||||
|
*/
|
||||||
public static <R, V> FieldRequiredRule<R, V> instance(String fieldName, Function<R, V> getter) {
|
public static <R, V> FieldRequiredRule<R, V> instance(String fieldName, Function<R, V> getter) {
|
||||||
return new FieldRequiredRule<>(fieldName, getter);
|
return new FieldRequiredRule<>(fieldName, getter);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,11 @@ import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка наличия связанного по Id объекта в базе
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <V> Класс связанного объекта
|
||||||
|
*/
|
||||||
public record IdPresentRule<R, V extends SpcexObjectBase>(
|
public record IdPresentRule<R, V extends SpcexObjectBase>(
|
||||||
String fieldName,
|
String fieldName,
|
||||||
Function<R, Long> idGetter,
|
Function<R, Long> idGetter,
|
||||||
|
|
@ -21,6 +26,17 @@ public record IdPresentRule<R, V extends SpcexObjectBase>(
|
||||||
boolean required
|
boolean required
|
||||||
) implements IValidationRule<ImdgValidationContext<R>> {
|
) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля, содержащего Id
|
||||||
|
* @param idGetter Метод получения Id
|
||||||
|
* @param mapName Название мапы связанного объекта (см. IMDGDistributedNames)
|
||||||
|
* @param mapClass Класс связанного объекта
|
||||||
|
* @param idNotPresentError Ошибка, которая будет возвращена, если Id не найден
|
||||||
|
* @param required Флаг обязательности
|
||||||
|
* @param additionalChecks Дополнительные проверки, которые можно провести со связанным объектом
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
* @param <V> Класс связанного объекта
|
||||||
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public static <R, V extends SpcexObjectBase> IdPresentRule<R, V> instance(String fieldName,
|
public static <R, V extends SpcexObjectBase> IdPresentRule<R, V> instance(String fieldName,
|
||||||
Function<R, Long> idGetter,
|
Function<R, Long> idGetter,
|
||||||
|
|
|
||||||
|
|
@ -9,12 +9,27 @@ import java.time.LocalTime;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка поля с LocalTime. Условие проверки: проверяемое время >= текущее время
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
public record TimeNotBeforeRule<R>(String fieldName, Function<R, LocalTime> getter, boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
public record TimeNotBeforeRule<R>(String fieldName, Function<R, LocalTime> getter, boolean required) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||||
|
* @param getter Метод получения проверяемого времени
|
||||||
|
* @param required Флаг обязательности поля
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter, boolean required) {
|
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter, boolean required) {
|
||||||
return new TimeNotBeforeRule<>(fieldName, getter, required);
|
return new TimeNotBeforeRule<>(fieldName, getter, required);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fieldName Название поля класса, используется для передачи ошибки
|
||||||
|
* @param getter Метод получения проверяемого времени
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter) {
|
public static <R> TimeNotBeforeRule<R> instance(String fieldName, Function<R, LocalTime> getter) {
|
||||||
return new TimeNotBeforeRule<>(fieldName, getter, true);
|
return new TimeNotBeforeRule<>(fieldName, getter, true);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue