KeywordStatus.java 2.5 KB
package com.aigeo.common.enums;

import lombok.Getter;

/**
 * 关键词状态枚举
 * 对应数据库字段:ai_keywords.status
 * 
 * 关键词在内容生成流程中的状态:
 * - PENDING: 待处理,新添加的关键词
 * - PLANNED: 已计划,已安排进入内容生成计划
 * - GENERATED: 已生成,基于该关键词生成了内容
 * - PUBLISHED: 已发布,内容已发布到目标平台
 *
 * @author AIGEO Team
 * @since 1.0.0
 */
@Getter
public enum KeywordStatus {
    
    /**
     * 待处理 - 关键词已添加,等待处理
     */
    PENDING("pending", "待处理"),
    
    /**
     * 已计划 - 关键词已安排进入生成计划
     */
    PLANNED("planned", "已计划"),
    
    /**
     * 已生成 - 基于该关键词生成了内容
     */
    GENERATED("generated", "已生成"),
    
    /**
     * 已发布 - 内容已发布到目标平台
     */
    PUBLISHED("published", "已发布");


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

    KeywordStatus(String code, String displayName) {
        this.code = code;
        this.displayName = displayName;
    }
    
    /**
     * 根据代码获取枚举
     */
    public static KeywordStatus fromCode(String code) {
        for (KeywordStatus status : values()) {
            if (status.code.equals(code)) {
                return status;
            }
        }
        throw new IllegalArgumentException("未知的关键词状态代码: " + code);
    }
    
    /**
     * 检查是否为最终状态
     */
    public boolean isFinalStatus() {
        return this == GENERATED || this == PUBLISHED;
    }
    
    /**
     * 检查是否可以编辑
     */
    public boolean isEditable() {
        return this == PENDING || this == PLANNED;
    }
    
    /**
     * 检查是否可以删除
     */
    public boolean isDeletable() {
        return this == PENDING;
    }
    
    /**
     * 检查是否可以生成内容
     */
    public boolean canGenerateContent() {
        return this == PLANNED || this == PENDING;
    }
    
    /**
     * 获取下一个状态
     */
    public KeywordStatus getNextStatus() {
        switch (this) {
            case PENDING:
                return PLANNED;
            case PLANNED:
                return GENERATED;
            case GENERATED:
                return PUBLISHED;
            default:
                return this;
        }
    }
}