package handler import ( "exam_registration/internal/model" "exam_registration/internal/service" "exam_registration/pkg/response" "github.com/gin-gonic/gin" "strconv" ) type ScoreHandler struct { scoreService *service.ScoreService } func NewScoreHandler() *ScoreHandler { return &ScoreHandler{ scoreService: &service.ScoreService{}, } } // CreateScore 录入成绩 func (h *ScoreHandler) CreateScore(c *gin.Context) { var score model.ExamScore if err := c.ShouldBindJSON(&score); err != nil { response.Error(c, response.BAD_REQUEST, "参数错误") return } if err := h.scoreService.CreateScore(&score); err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, score) } // BatchCreateScores 批量录入成绩 func (h *ScoreHandler) BatchCreateScores(c *gin.Context) { var scores []model.ExamScore if err := c.ShouldBindJSON(&scores); err != nil { response.Error(c, response.BAD_REQUEST, "参数错误") return } if err := h.scoreService.BatchCreateScores(scores); err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // GetScoreByUserAndExam 查询个人成绩 func (h *ScoreHandler) GetScoreByUserAndExam(c *gin.Context) { userID, _ := c.Get("user_id") examID, _ := strconv.ParseUint(c.Param("exam_id"), 10, 64) score, err := h.scoreService.GetScoreByUserAndExam(userID.(uint64), examID) if err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, score) } // GetScoreList 获取成绩列表(管理员) func (h *ScoreHandler) GetScoreList(c *gin.Context) { examIDStr := c.Query("exam_id") page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10")) var examID int if examIDStr != "" { examID, _ = strconv.Atoi(examIDStr) } scores, total, err := h.scoreService.GetScoreList(examID, page, pageSize) if err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, gin.H{ "list": scores, "total": total, "page": page, "pageSize": pageSize, }) } // PublishScore 发布成绩 func (h *ScoreHandler) PublishScore(c *gin.Context) { id, _ := strconv.ParseUint(c.Param("id"), 10, 64) if err := h.scoreService.PublishScore(id); err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // DeleteScore 删除成绩 func (h *ScoreHandler) DeleteScore(c *gin.Context) { id, _ := strconv.ParseUint(c.Param("id"), 10, 64) if err := h.scoreService.DeleteScore(id); err != nil { response.Error(c, response.ERROR, err.Error()) return } response.Success(c, nil) }