package me.qwq.doghouse.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 清除缓存的 Tags。注解在 String field 上，自动扫描所有以该 key 为注解的 @Cacheable 注解。
 * 注解在方法上，更新时自动驱逐。目前支持的有 Post、Comment。
 * 该方法并不影响用原生的 @Caching、@CacheEvict 来驱逐缓存
 */
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CacheEvictTags {
    
    Tag[] value();
    
    public static enum Tag {
        /**
         * 更新 Post 时更新（指定 PostId）
         */
        PostId,
        /**
         * 更新 Post 时更新（指定 PostPageName）
         */
        PostName,
        
        Next,
        
        Prev,
        /**
         * 任意 Post 更新时都更新
         */
        Posts,
        /**
         * 任意 Comment 更新时都更新
         */
        Comments,
        /**
         * 任意 Meta 更新时都更新
         */
        Metas,
        /**
         * 每日更新
         */
        Daily;
    }

}
