package com.example.system.model;

import com.example.system.utils.DateUtil;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.util.Date;

/**
 * 竞赛实体类，对应数据库中的competition_table表。
 */
@Data // Lombok注解，为类的所有字段自动生成getter和setter方法，以及toString、equals、hashCode方法。
@Entity // JPA注解，标记该类为一个JPA实体。
@Table(name = "competition_table") // JPA注解，指定该实体对应的数据库表名。
public class CompetitionTable {
    @Id // JPA注解，指示该字段为表的主键。
    @GeneratedValue(strategy = GenerationType.IDENTITY) // JPA注解，主键的生成策略为数据库自增。
    private Long competitionId; // 竞赛ID，对应数据库中的competition_id字段。

    @Column(nullable = false, length = 50) // JPA注解，配置列的详细信息，如非空约束和长度限制。
    private String competitionName; // 竞赛名称，对应数据库中的competition_name字段。

    @JoinColumn(name = "user_id", nullable = false) // JPA注解，指定用于关联的外键列。
    private Integer userId; // 对应数据库中的user_id外键。


    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(nullable = false) // JPA注解，配置列的详细信息，如非空约束。
    private Date registrationStartTime; // 注册开始时间，对应数据库中的registration_start_time字段。

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Column(nullable = false) // JPA注解，配置列的详细信息，如非空约束。
    private Date registrationEndTime; // 注册结束时间，对应数据库中的registration_end_time字段。

    private String announcementLink; // 公告链接，对应数据库中的announcement_link字段。

    @Column(nullable = false) // JPA注解，配置列的详细信息，如非空约束和默认值。
    private Integer competitionStatus = 0; // 竞赛状态，对应数据库中的competition_status字段，默认为0。

}
