DifyApiConfig.java 3.0 KB
// ai/entity/DifyApiConfig.java
package com.aigeo.ai.entity;
import org.hibernate.annotations.JdbcTypeCode;
import java.sql.Types;
import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.Builder;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import com.aigeo.common.enums.AiProvider;
import java.time.LocalDateTime;
import java.util.Date;


/**
 * DifyApiConfig类是一个实体类,用于映射数据库中的ai_dify_api_configs表。
 * 该类存储了Dify API的配置信息,包括提供商、API密钥、模型参数等。
 * 
 * @author AIGEO Team
 * @since 1.0.0
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "ai_dify_api_configs")
public class DifyApiConfig {
    /**
     * 主键ID,采用自增策略
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    /**
     * 公司ID,用于区分不同公司的配置
     */
    @Column(name = "company_id")
    private Integer companyId;

    /**
     * AI服务提供商,使用枚举类型存储
     */
    @Enumerated(EnumType.STRING)
    private AiProvider provider;

    /**
     * 配置名称,不能为空
     */
    @NotBlank(message = "配置名称不能为空")
    @Column(nullable = false)
    private String name;

    /**
     * API的基础URL
     */
    @Column(name = "base_url")
    private String baseUrl;

    /**
     * API密钥,用于身份验证
     */
    @Column(name = "api_key")
    private String apiKey;

    /**
     * 模型名称,指定使用的具体模型
     */
    @Column(name = "model_name")
    private String modelName;

    /**
     * 温度参数,控制输出的随机性
     */
    private Double temperature;

    /**
     * Top P参数,控制词汇采样的概率范围
     */
    @Column(name = "top_p")
    private Double topP;

    /**
     * 最大令牌数,限制生成内容的长度
     */
    @Column(name = "max_tokens")
    private Integer maxTokens;

    /**
     * 请求头信息,以JSON格式存储
     */
    @Column(name = "request_headers")
    private String requestHeaders;

    /**
     * 是否激活该配置
     */
    @Column(name = "is_active")
    private Boolean isActive;

    /**
     * 创建时间,使用时间戳类型
     */
    @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 (isActive == null) {
            isActive = true;
        }
    }

    /**
     * 更新时间设置,实体更新时自动设置
     */
    @PreUpdate
    protected void onUpdate() {
        updatedAt = LocalDateTime.now();
    }
}