package handler import ( "exam_registration/internal/model" "exam_registration/internal/service" "exam_registration/pkg/response" "github.com/gin-gonic/gin" "strconv" ) type ExamHandler struct { examService *service.ExamService } func NewExamHandler() *ExamHandler { return &ExamHandler{ examService: &service.ExamService{}, } } // CreateExam 创建考试 func (h *ExamHandler) CreateExam(c *gin.Context) { var exam model.Exam if err := c.ShouldBindJSON(&exam); err != nil { response.Error(c, response.BAD_REQUEST, "参数错误") return } userID, _ := c.Get("user_id") exam.CreatorID = userID.(uint64) if err := h.examService.CreateExam(&exam); err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, exam) } // GetExamByID 获取考试详情 func (h *ExamHandler) GetExamByID(c *gin.Context) { id, _ := strconv.ParseUint(c.Param("id"), 10, 64) exam, err := h.examService.GetExamByID(id) if err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, exam) } // GetExamList 获取考试列表 func (h *ExamHandler) GetExamList(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10")) exams, total, err := h.examService.GetExamList(page, pageSize) if err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, gin.H{ "list": exams, "total": total, "page": page, "pageSize": pageSize, }) } // UpdateExam 更新考试 func (h *ExamHandler) UpdateExam(c *gin.Context) { id, _ := strconv.ParseUint(c.Param("id"), 10, 64) var updates map[string]interface{} if err := c.ShouldBindJSON(&updates); err != nil { response.Error(c, response.BAD_REQUEST, "参数错误") return } if err := h.examService.UpdateExam(id, updates); err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // DeleteExam 删除考试 func (h *ExamHandler) DeleteExam(c *gin.Context) { id, _ := strconv.ParseUint(c.Param("id"), 10, 64) if err := h.examService.DeleteExam(id); err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, nil) }