package incheon.com.config.annotation;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotSqlReservedValidator.class)
public @interface NotSqlReserved {
    String message() default "예약어는 사용할 수 없습니다.";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * 예약어 목록 파일
     */
    String wordsResource() default "classpath:/incheon/validator/postgres-reserved.txt";

    /**
     * 대소문자 무시 여부
     */
    boolean caseInsensitive() default true;

    /**
     * 시스템 컬럼 차단 여부
     */
    boolean blockSystemColumns() default true;

    /**
     * 프로젝트 특화 추가 블록 단어
     */
    String[] extra() default {};
}
