EndDtAfterStartDtRule
This commit is contained in:
parent
536df6a156
commit
f334a31b10
1 changed files with 86 additions and 0 deletions
|
|
@ -0,0 +1,86 @@
|
||||||
|
package ru.spcex.clearing.validation.common.rules;
|
||||||
|
|
||||||
|
import ru.spcex.platform.imdg.validation.ImdgValidationContext;
|
||||||
|
import ru.spcex.platform.utils.enumeration.EnumMessage;
|
||||||
|
import ru.spcex.platform.utils.enumeration.IEnumId;
|
||||||
|
import ru.spcex.platform.utils.validation.IValidationRule;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка EndDt < StartDt
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
|
public record EndDtAfterStartDtRule<R>(
|
||||||
|
String endDtFieldName,
|
||||||
|
String startDtFieldName,
|
||||||
|
Function<R, LocalDate> getterEndDt,
|
||||||
|
Function<R, LocalDate> getterStartDt,
|
||||||
|
IEnumId errorEmptyRequiredValue,
|
||||||
|
IEnumId errorEndDtAfterStartDt,
|
||||||
|
boolean required
|
||||||
|
) implements IValidationRule<ImdgValidationContext<R>> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param endDtFieldName Название поля класса, содержащий EndDt
|
||||||
|
* @param startDtFieldName Название поля класса, содержащий StartDt
|
||||||
|
* @param getterEndDt Метод получения проверяемой EndDt
|
||||||
|
* @param getterStartDt Метод получения проверяемой StartDt
|
||||||
|
* @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если одна из дат пустая
|
||||||
|
* @param errorEndDtAfterStartDt Ошибка, которая будет возвращена, если EndDt > StartDt
|
||||||
|
* @param required Флаг обязательности поля
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
|
public static <R> EndDtAfterStartDtRule<R> instance(String endDtFieldName,
|
||||||
|
String startDtFieldName,
|
||||||
|
Function<R, LocalDate> getterEndDt,
|
||||||
|
Function<R, LocalDate> getterStartDt,
|
||||||
|
IEnumId errorEmptyRequiredValue,
|
||||||
|
IEnumId errorEndDtAfterStartDt,
|
||||||
|
boolean required) {
|
||||||
|
return new EndDtAfterStartDtRule<>(endDtFieldName,
|
||||||
|
startDtFieldName,
|
||||||
|
getterEndDt,
|
||||||
|
getterStartDt,
|
||||||
|
errorEmptyRequiredValue,
|
||||||
|
errorEndDtAfterStartDt,
|
||||||
|
required);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param endDtFieldName Название поля класса, содержащий EndDt
|
||||||
|
* @param startDtFieldName Название поля класса, содержащий StartDt
|
||||||
|
* @param getterEndDt Метод получения проверяемой EndDt
|
||||||
|
* @param getterStartDt Метод получения проверяемой StartDt
|
||||||
|
* @param errorEmptyRequiredValue Ошибка, которая будет возвращена, если одна из дат пустая
|
||||||
|
* @param errorEndDtAfterStartDt Ошибка, которая будет возвращена, если EndDt > StartDt
|
||||||
|
* @param <R> Класс проверяемого объекта
|
||||||
|
*/
|
||||||
|
public static <R> EndDtAfterStartDtRule<R> instance(String endDtFieldName,
|
||||||
|
String startDtFieldName,
|
||||||
|
Function<R, LocalDate> getterEndDt,
|
||||||
|
Function<R, LocalDate> getterStartDt,
|
||||||
|
IEnumId errorEmptyRequiredValue,
|
||||||
|
IEnumId errorEndDtAfterStartDt) {
|
||||||
|
return new EndDtAfterStartDtRule<>(endDtFieldName,
|
||||||
|
startDtFieldName,
|
||||||
|
getterEndDt,
|
||||||
|
getterStartDt,
|
||||||
|
errorEmptyRequiredValue,
|
||||||
|
errorEndDtAfterStartDt,
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<EnumMessage> validate(ImdgValidationContext<R> context) {
|
||||||
|
R validatedObject = context.getValidatedObject();
|
||||||
|
LocalDate endDt = getterEndDt.apply(validatedObject);
|
||||||
|
LocalDate startDt = getterStartDt.apply(validatedObject);
|
||||||
|
if (endDt == null) return required ? of(errorEmptyRequiredValue, endDtFieldName) : Optional.empty();
|
||||||
|
if (startDt == null) return required ? of(errorEmptyRequiredValue, startDtFieldName) : Optional.empty();
|
||||||
|
if (endDt.isAfter(startDt)) return of(errorEndDtAfterStartDt);
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue