GeneratedArticle.java 2.6 KB
package com.aigeo.article.entity;

import jakarta.persistence.*;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 生成的文章实体类
 */
@Data
@Entity
@Table(name = "ai_generated_articles")
public class GeneratedArticle {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "task_id")
    private Integer taskId;

    @Column(name = "company_id")
    private Integer companyId;

    @Column(name = "version")
    private Integer version;

    @Column(name = "title")
    private String title;

    @Column(name = "content", columnDefinition = "TEXT")
    private String content;

    @Column(name = "html_content", columnDefinition = "TEXT")
    private String htmlContent;

    @Column(name = "faq_section", columnDefinition = "TEXT")
    private String faqSection;

    @Column(name = "structured_data", columnDefinition = "TEXT")
    private String structuredData;

    @Column(name = "word_count")
    private Integer wordCount;

    @Column(name = "keyword_density", columnDefinition = "TEXT")
    private String keywordDensity;

    @Column(name = "is_selected")
    private Boolean isSelected;

    @Enumerated(EnumType.STRING)
    @Column(name = "status")
    private ArticleStatus status;

    @Column(name = "created_at")
    private LocalDateTime createdAt;

    @Column(name = "updated_at")
    private LocalDateTime updatedAt;

    @PrePersist
    protected void onCreate() {
        createdAt = LocalDateTime.now();
        updatedAt = LocalDateTime.now();
        if (version == null) {
            version = 1;
        }
        if (isSelected == null) {
            isSelected = false;
        }
        if (status == null) {
            status = ArticleStatus.DRAFT;
        }
    }

    @PreUpdate
    protected void onUpdate() {
        updatedAt = LocalDateTime.now();
    }

    /**
     * 文章状态枚举
     */
    public enum ArticleStatus {
        DRAFT("draft"),          // 草稿
        REVIEW("review"),        // 审核中
        PUBLISHED("published"),   // 已发布
        ARCHIVED("archived");    // 已归档

        private final String code;

        ArticleStatus(String code) {
            this.code = code;
        }

        public String getCode() {
            return code;
        }

        public static ArticleStatus fromCode(String code) {
            for (ArticleStatus status : ArticleStatus.values()) {
                if (status.getCode().equals(code)) {
                    return status;
                }
            }
            throw new IllegalArgumentException("未知的文章状态: " + code);
        }
    }
}