/**
 * @ProjectName: 智慧评标-主观分助手
 * @Package: com.zhpb.gdyd_zhpb_zgf.entity.mysql
 * @ClassName: ApiLog
 * @Description: API调用日志实体类，映射t_api_log表，记录所有API调用的详细信息
 * @Author: 张志锋
 * @Date: 2025-10-31
 * @Version: 1.0
 * @Copyright: © 2025 智慧评标-主观分助手
 */
package com.zhpb.gdyd_zhpb_zgf.entity.mysql;

import jakarta.persistence.*;
import lombok.Data;
import java.time.LocalDateTime;

/**
 * API调用日志实体类
 */
@Entity
@Table(name = "t_api_log")
@Data
public class ApiLog {

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

    /**
     * 调用的接口路径
     */
    @Column(name = "api_path", nullable = false, length = 512)
    private String apiPath;

    /**
     * 接口中文名称
     */
    @Column(name = "api_name", length = 128)
    private String apiName;

    /**
     * HTTP方法（GET, POST, PUT, DELETE等）
     */
    @Column(name = "http_method", length = 16)
    private String httpMethod;

    /**
     * 请求参数（JSON格式）
     */
    @Column(name = "request_params", columnDefinition = "TEXT")
    private String requestParams;

    /**
     * 请求体内容（JSON格式）
     */
    @Column(name = "request_body", columnDefinition = "TEXT")
    private String requestBody;

    /**
     * 返回参数（JSON格式）
     */
    @Column(name = "response_body", columnDefinition = "TEXT")
    private String responseBody;

    /**
     * 响应状态码（200, 404, 500等）
     */
    @Column(name = "status_code")
    private Integer statusCode;

    /**
     * 耗费时长（毫秒）
     */
    @Column(name = "duration")
    private Long duration;

    /**
     * 客户端IP地址
     */
    @Column(name = "client_ip", length = 64)
    private String clientIp;

    /**
     * 用户ID（如果有）
     */
    @Column(name = "user_id", length = 64)
    private String userId;

    /**
     * 用户名（如果有）
     */
    @Column(name = "user_name", length = 128)
    private String userName;

    /**
     * 错误信息（如果有）
     */
    @Column(name = "error_msg", columnDefinition = "TEXT")
    private String errorMsg;

    /**
     * 创建时间
     */
    @Column(name = "create_time", nullable = false)
    private LocalDateTime createTime;
}

