package com.example.system.model;

import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

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

/**
 * 报名实体类，对应数据库中的registration_table表。
 */
@Data // Lombok注解，自动生成getter、setter、toString、equals、hashCode方法。
@Entity // JPA注解，标记这是一个JPA实体。
@Table(name = "registration_table") // JPA注解，指定实体对应的数据库表名。
public class RegistrationTable {
    @Id // JPA注解，指示这个字段是表的主键。
    @GeneratedValue(strategy = GenerationType.IDENTITY) // JPA注解，主键的生成策略为数据库自增。
    private Long registrationId; // 报名ID，对应数据库中的registration_id字段。

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

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

    @JoinColumn(name = "team_leader_id") // JPA注解，指定用于关联的外键列。
    private Integer teamLeaderId; // 团队领导者实体，对应数据库中的team_leader_id外键。
    private String teamLeaderName;

    @Column(nullable = false) // JPA注解，配置列的详细信息，如非空约束。
    private String competitionType; // 竞赛类型，对应数据库中的competition_type字段。

    private String awardLevel; // 获奖等级，对应数据库中的award_level字段。

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

    @Column(nullable = false) // JPA注解，配置列的详细信息，如非空约束。
    private String registrationStatus; // 报名状态，对应数据库中的registration_status字段。

    private String certificatePath; // 证书路径，对应数据库中的certificate_path字段。

    private String additionalInfo; // 额外信息，对应数据库中的additional_info字段。
}
