/***********************************************************
 * @Description : 考试表，要有题目、总分数、时间限制、有效日期、创建者等字段
 * @author      : 梁山广(Laing Shan Guang)
 * @date        : 2019/5/14 07:42
 * @email       : liangshanguang2@gmail.com
 ***********************************************************/
// 定义包名，用于组织类文件，避免命名冲突
package lsgwr.exam.entity;

// 导入Jackson库的JsonFormat注解，用于JSON序列化时自定义日期格式
import com.fasterxml.jackson.annotation.JsonFormat;
// 导入Lombok库的Data注解，用于自动生成getter、setter、equals、hashCode和toString方法
import lombok.Data;
// 导入Hibernate的DynamicUpdate注解，用于在实体更新时只更新发生变化的字段
import org.hibernate.annotations.DynamicUpdate;
// 导入JPA的Entity注解，用于声明该类是一个JPA实体类
import javax.persistence.Entity;
// 导入JPA的Id注解，用于声明该类中的某个字段作为主键
import javax.persistence.Id;
// 导入Java的Date类，用于表示日期和时间
import java.util.Date;

@Entity
@Data
@DynamicUpdate
public class Exam {
    // 使用JPA的@Id注解声明该字段为主键
    @Id
    private String examId;// 考试ID，唯一标识一场考试
    private String examName;// 考试名称
    private String examAvatar; // 考试头像或图标
    private String examDescription;// 考试描述或简介
    private String examQuestionIds;// 存储所有问题ID的字符串，可能是逗号分隔的ID列表
    private String examQuestionIdsRadio;// 存储所有单选题ID的字符串
    private String examQuestionIdsCheck;// 存储所有多选题ID的字符串
    private String examQuestionIdsJudge;// 存储所有判断题ID的字符串
    private Integer examScore;// 考试总分
    private Integer examScoreRadio;// 单选题总分
    private Integer examScoreCheck;// 多选题总分
    private Integer examScoreJudge;// 判断题总分
    private String examCreatorId;// 创建者ID，标识谁创建了这场考试
    private Integer examTimeLimit;// 考试时间限制，单位可能是分钟
    // 考试开始时间，使用Jackson的@JsonFormat注解自定义日期格式
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date examStartDate;
    // 考试结束时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date examEndDate;
    /**
     * 创建时间，设计数据库表时设置了自动插入当前时间，因此在Java代码中无需手动设置。
     * 使用Jackson的@JsonFormat注解自定义日期格式以便于前端展示。
     */

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /**
     * 更新时间，设计数据库表时也设置了自动插入当前时间（或更新为当前时间），在Java代码中无需手动维护。
     * 同时，由于使用了Hibernate的@DynamicUpdate注解，当数据库中的实体数据发生变化时，该字段会自动更新为当前时间。
     * 使用Jackson的@JsonFormat注解自定义日期格式以便于前端展示。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date updateTime;
}
