package model import ( "gorm.io/gorm" "time" ) // User 用户表 type User struct { ID uint64 `gorm:"primarykey" json:"id"` Username string `gorm:"type:varchar(50);uniqueIndex;not null" json:"username"` Password string `gorm:"type:varchar(100);not null" json:"-"` Email string `gorm:"type:varchar(100);index" json:"email"` Phone string `gorm:"type:varchar(20);index" json:"phone"` RealName string `gorm:"type:varchar(50)" json:"real_name"` IDCard string `gorm:"type:varchar(20)" json:"id_card"` Role string `gorm:"type:varchar(20);default:'user'" json:"role"` // admin, user Status int `gorm:"type:tinyint;default:1;index" json:"status"` // 1:正常,0:禁用 CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } // Exam 考试表 type Exam struct { ID uint64 `gorm:"primarykey" json:"id"` Title string `gorm:"type:varchar(200);not null" json:"title"` Code string `gorm:"type:varchar(50);uniqueIndex;not null" json:"code"` Description string `gorm:"type:text" json:"description"` StartTime time.Time `json:"start_time"` EndTime time.Time `json:"end_time"` RegistrationStart time.Time `json:"registration_start"` RegistrationEnd time.Time `json:"registration_end"` MaxCandidates int `gorm:"default:0" json:"max_candidates"` // 0 表示不限制 ExamFee float64 `gorm:"type:decimal(10,2);default:0" json:"exam_fee"` ExamLocation string `gorm:"type:varchar(200)" json:"exam_location"` Subject string `gorm:"type:varchar(100)" json:"subject"` Status int `gorm:"type:tinyint;default:1;index" json:"status"` // 1:未开始,2:进行中,3:已结束 CreatorID uint64 `gorm:"index" json:"creator_id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` } // ExamRegistration 报名表 type ExamRegistration struct { ID uint64 `gorm:"primarykey" json:"id"` UserID uint64 `gorm:"index;not null" json:"user_id"` ExamID uint64 `gorm:"index;not null" json:"exam_id"` Status int `gorm:"type:tinyint;default:0;index" json:"status"` // 0:待审核,1:已通过,2:已拒绝,3:已取消 PaymentStatus int `gorm:"type:tinyint;default:0;index" json:"payment_status"` // 0:未支付,1:已支付 PaymentTime *time.Time `json:"payment_time"` AuditTime *time.Time `json:"audit_time"` AuditComment string `gorm:"type:varchar(500)" json:"audit_comment"` TicketNumber string `gorm:"type:varchar(50);uniqueIndex" json:"ticket_number"` // 准考证号 ExamSeat string `gorm:"type:varchar(20)" json:"exam_seat"` // 考场座位 Remark string `gorm:"type:varchar(500)" json:"remark"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` User User `gorm:"foreignKey:UserID;constraint:OnDelete:CASCADE" json:"user,omitempty"` Exam Exam `gorm:"foreignKey:ExamID;constraint:OnDelete:CASCADE" json:"exam,omitempty"` } // ExamNotice 考试通知 type ExamNotice struct { ID uint64 `gorm:"primarykey" json:"id"` ExamID uint64 `gorm:"index;not null" json:"exam_id"` Title string `gorm:"type:varchar(200);not null" json:"title"` Content string `gorm:"type:text;not null" json:"content"` Type int `gorm:"type:tinyint;default:1" json:"type"` // 1:普通通知,2:重要通知,3:紧急通知 PublishTime time.Time `json:"publish_time"` PublisherID uint64 `gorm:"index" json:"publisher_id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` Exam Exam `gorm:"foreignKey:ExamID;constraint:OnDelete:CASCADE" json:"exam,omitempty"` } // ExamScore 考试成绩 type ExamScore struct { ID uint64 `gorm:"primarykey" json:"id"` UserID uint64 `gorm:"index;not null" json:"user_id"` ExamID uint64 `gorm:"index;not null" json:"exam_id"` Score float64 `gorm:"type:decimal(5,2)" json:"score"` TotalScore float64 `gorm:"type:decimal(5,2)" json:"total_score"` Pass bool `gorm:"default:false" json:"pass"` Rank int `gorm:"default:0" json:"rank"` Remark string `gorm:"type:varchar(500)" json:"remark"` Published bool `gorm:"default:false;index" json:"published"` // 是否已发布 CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` User User `gorm:"foreignKey:UserID;constraint:OnDelete:CASCADE" json:"user,omitempty"` Exam Exam `gorm:"foreignKey:ExamID;constraint:OnDelete:CASCADE" json:"exam,omitempty"` } func (User) TableName() string { return "user" } func (Exam) TableName() string { return "exam" } func (ExamRegistration) TableName() string { return "exam_registration" } func (ExamNotice) TableName() string { return "exam_notice" } func (ExamScore) TableName() string { return "exam_score" }