TopicStatus.java 2.2 KB
package com.aigeo.common.enums;

import lombok.Getter;

/**
 * 话题状态枚举
 * 对应数据库字段:ai_topics.status
 * 
 * 话题在内容管理流程中的状态:
 * - RAW: 原始状态,刚抓取的话题数据
 * - CURATED: 已策展,经过人工筛选和编辑
 * - REJECTED: 已拒绝,不适合用于内容生成
 *
 * @author AIGEO Team
 * @since 1.0.0
 */
@Getter
public enum TopicStatus {
    
    /**
     * 原始状态 - 刚抓取或导入的话题
     */
    RAW("raw", "原始"),
    
    /**
     * 已策展 - 经过筛选和编辑的高质量话题
     */
    CURATED("curated", "已策展"),
    
    /**
     * 已拒绝 - 不适合或质量不佳的话题
     */
    REJECTED("rejected", "已拒绝");

    /**
     * 数据库存储值
     */
    private final String code;
    
    /**
     * 显示名称
     */
    private final String displayName;

    TopicStatus(String code, String displayName) {
        this.code = code;
        this.displayName = displayName;
    }
    
    /**
     * 根据代码获取枚举
     */
    public static TopicStatus fromCode(String code) {
        for (TopicStatus status : values()) {
            if (status.code.equals(code)) {
                return status;
            }
        }
        throw new IllegalArgumentException("未知的话题状态代码: " + code);
    }
    
    /**
     * 检查是否为可用状态
     */
    public boolean isUsable() {
        return this == CURATED;
    }
    
    /**
     * 检查是否可以编辑
     */
    public boolean isEditable() {
        return this == RAW || this == CURATED;
    }
    
    /**
     * 检查是否需要审核
     */
    public boolean needsReview() {
        return this == RAW;
    }
    
    /**
     * 获取下一个可能的状态
     */
    public TopicStatus[] getNextPossibleStatuses() {
        switch (this) {
            case RAW:
                return new TopicStatus[]{CURATED, REJECTED};
            case CURATED:
                return new TopicStatus[]{RAW, REJECTED};
            case REJECTED:
                return new TopicStatus[]{RAW, CURATED};
            default:
                return new TopicStatus[]{};
        }
    }
}