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