package com.imprimelibros.erp.shared.validation; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.*; import jakarta.validation.Constraint; import jakarta.validation.Payload; @Documented @Target(TYPE) @Retention(RUNTIME) @Constraint(validatedBy = NoRangeOverlapValidator.class) public @interface NoRangeOverlap { // Campos obligatorios String min(); // nombre del campo min (Integer/Long/etc.) String max(); // nombre del campo max // Campos opcionales String id() default "id"; // nombre del campo ID (para excluir self en update) String[] partitionBy() default {}; // ej. {"tipoEncuadernacion","tipoCubierta"} // Soft delete opcional String deletedFlag() default ""; // ej. "deleted" (si vacío, no se aplica filtro) boolean deletedActiveValue() default false; // qué valor significa "activo" (normalmente false) // Mensajes String message() default "{validation.range.overlaps}"; String invalidRangeMessage() default "{validation.range.invalid}"; Class[] groups() default {}; Class[] payload() default {}; }