package cd.casic.ci.process.process.dataObject.volumnInfo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.ibatis.type.JdbcType;

import java.time.LocalDateTime;
import java.util.List;

@Data
@TableName(value = "vul_info",autoResultMap = true)
public class VulInfo {
    /**
     * 主键ID，自动生成
     */
    @TableId(type =  IdType.ASSIGN_ID)
    private Long id;

    /**
     * 创建时间，自动生成
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 修改时间，自动生成，修改时间就是审核时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime modifyTime;

    /**
     * 漏洞状态，枚举，未审核、审核中，审核完
     */
    private String verifyStatus;

    /**
     * 内部漏洞id，不需要输入，根据类型+日期随机生成
     */
    private String vulId;

    /**
     * 是否开源，选项框，对勾，源码时候才会有这个概念
     */
    private Boolean isOpenSource;

    /**
     * 中文标题
     */
    private String vulTitle;

    /**
     * 中文描述
     */
    private String vulDescription;

    /**
     * 危险等级,高中低三种
     */
    private Integer severity;

    /**
     * 中文修复方案
     */
    private String solution;

    /**
     * 暂时修复的缓解措施
     */
    private String relieve;

    /**
     * 目标的名称
     */
    private String targetName;

    /**
     * 漏洞类型
     */
    @TableField(typeHandler = JacksonTypeHandler.class,jdbcType = JdbcType.VARCHAR)
    private List<String> cwes;

    /**
     * 利用级别，可利用和不可利用，默认不要利用
     */
    private Boolean level;

    /**
     * 发现的漏洞目标类型，源码，二进制，固件三种
     */
    private String targetType;

    /**
     * 目标的链接，来自于人机协同系统，就是一个下载地址的url
     */
    private String targetUrl;

    /**
     * 受影响的目标，用户自己输入
     */
    private String affectProjectId;

    /**
     * 类型是源码的情况才有这个概念，安全分支列表
     */
    private String unaffectedVersions;

    /**
     * 受影响产品名
     */
    private String affectProductName;
    /**
     *  城市
     * */
    private String city;
    /**
     *  关联的流水线执行记录id
     * */
    private String instanceId;
    /**
     *  流水线节点id
     * */
    private String taskId;
    /**
     *  节点类型
     * */
    private String taskType;

    private String localAflCrashesId;
}
