package com.superbiz.agent.domain.entity; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import com.superbiz.agent.domain.enums.FaultCategory; import java.time.LocalDateTime; /** * API 文档元数据实体 * 对应表: api_document */ @Entity @Table(name = "api_document", indexes = { @Index(name = "idx_doc_id", columnList = "doc_id"), @Index(name = "idx_fault_source", columnList = "fault_source"), @Index(name = "idx_status", columnList = "status"), @Index(name = "idx_created_at", columnList = "created_at") }, uniqueConstraints = { @UniqueConstraint(name = "uk_file_hash", columnNames = "file_hash") }) @Data @Builder @NoArgsConstructor @AllArgsConstructor public class ApiDocument { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "doc_id", unique = true, nullable = false, length = 64) private String docId; // 文档分类 @Enumerated(EnumType.STRING) @Column(name = "fault_category", length = 32, columnDefinition = "VARCHAR(32)") private FaultCategory faultCategory = FaultCategory.GENERAL; @Column(name = "fault_source", length = 128) private String faultSource; @Column(name = "api_name", length = 128) private String apiName; @Column(name = "version", length = 32) private String version = "v1.0"; // 文件信息 @Column(name = "file_name", nullable = false, length = 256) private String fileName; @Column(name = "file_path", length = 512) private String filePath; @Column(name = "file_hash", length = 64) private String fileHash; @Column(name = "file_size") private Long fileSize; // 索引状态 @Column(name = "status", length = 16) private String status = "PENDING"; @Column(name = "chunk_count") private Integer chunkCount = 0; @Column(name = "error_message", columnDefinition = "TEXT") private String errorMessage; // Frontmatter 元数据 @Column(name = "metadata", columnDefinition = "TEXT") private String metadata; // 时间字段 @Column(name = "indexed_at") private LocalDateTime indexedAt; @Column(name = "created_at", nullable = false, updatable = false) private LocalDateTime createdAt; @Column(name = "updated_at") private LocalDateTime updatedAt; @PrePersist protected void onCreate() { createdAt = LocalDateTime.now(); updatedAt = LocalDateTime.now(); } @PreUpdate protected void onUpdate() { updatedAt = LocalDateTime.now(); } }