package service import ( "exam_registration/internal/dao" "exam_registration/internal/model" "errors" "fmt" "time" ) type ExamService struct{} func (s *ExamService) CreateExam(exam *model.Exam) error { // 验证时间逻辑 if exam.StartTime.Before(time.Now()) { return errors.New("考试开始时间不能早于当前时间") } if exam.EndTime.Before(exam.StartTime) { return errors.New("考试结束时间不能早于开始时间") } if exam.RegistrationEnd.Before(exam.RegistrationStart) { return errors.New("报名截止时间不能早于开始时间") } return dao.DB.Create(exam).Error } func (s *ExamService) GetExamByID(id uint64) (*model.Exam, error) { var exam model.Exam if err := dao.DB.First(&exam, id).Error; err != nil { return nil, errors.New("考试不存在") } return &exam, nil } func (s *ExamService) GetExamList(page, pageSize int) ([]model.Exam, int64, error) { var exams []model.Exam var total int64 offset := (page - 1) * pageSize if err := dao.DB.Model(&model.Exam{}).Count(&total).Error; err != nil { return nil, 0, err } err := dao.DB.Offset(offset).Limit(pageSize).Order("id DESC").Find(&exams).Error return exams, total, err } func (s *ExamService) UpdateExam(id uint64, updates map[string]interface{}) error { return dao.DB.Model(&model.Exam{}).Where("id = ?", id).Updates(updates).Error } func (s *ExamService) DeleteExam(id uint64) error { return dao.DB.Delete(&model.Exam{}, id).Error } func (s *ExamService) UpdateExamStatus(id uint64, status int) error { // 更新考试状态并同步更新相关报名记录的状态 return dao.DB.Transaction(func(tx *dao.DB) error { if err := tx.Model(&model.Exam{}).Where("id = ?", id).Update("status", status).Error; err != nil { return err } return nil }) }