package controller import ( "github.com/gin-gonic/gin" "knowledge/api/dao" "knowledge/api/dto" "knowledge/api/requests" "knowledge/api/responses" "knowledge/api/service" "knowledge/global" "knowledge/utils" "strconv" ) type Question struct{} // GetQuestionPage 获取题目列表-分页 func (r *Question) GetQuestionPage(c *gin.Context) { questionRequest := requests.QuestionRequest{} req := questionRequest.GetQuestionPage if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } if req.Page == 0 { req.Page = 1 } if req.PageSize == 0 { req.PageSize = 20 } questionDao := dao.QuestionDao{} question, total, err := questionDao.GetQuestionPageSearch(req, req.Page, req.PageSize) if err != nil { responses.FailWithMessage(err.Error(), c) return } // 处理返回值 GetQuestionPageResponses := dto.GetQuestionListDto(question) if err != nil { responses.FailWithMessage(err.Error(), c) return } result := make(map[string]interface{}) result["page"] = req.Page result["page_size"] = req.PageSize result["total"] = total result["data"] = GetQuestionPageResponses responses.OkWithData(result, c) } // GetQuestion 获取题目详情 func (r *Question) GetQuestion(c *gin.Context) { id := c.Param("question_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 questionId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 业务处理 questionService := service.QuestionService{} getQuestionResponses, err := questionService.GetQuestion(questionId) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.OkWithData(getQuestionResponses, c) } // AddQuestion 新增题目 func (r *Question) AddQuestion(c *gin.Context) { questionRequest := requests.QuestionRequest{} req := questionRequest.AddQuestion if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 业务处理 questionService := service.QuestionService{} _, err := questionService.AddQuestion(req) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.Ok(c) } // AddQuestionTest 新增题目 func (r *Question) AddQuestionTest(c *gin.Context) { questionRequest := requests.QuestionRequest{} req := questionRequest.AddQuestionTest if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 业务处理 questionService := service.QuestionService{} _, err := questionService.AddQuestionTest(req) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.Ok(c) } // PutQuestion 修改题目 func (r *Question) PutQuestion(c *gin.Context) { couponRequest := requests.QuestionRequest{} req := couponRequest.PutQuestion if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } id := c.Param("question_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 questionId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 业务处理 questionService := service.QuestionService{} _, err = questionService.PutQuestion(questionId, req) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.Ok(c) } // PutQuestionTest 修改题目 func (r *Question) PutQuestionTest(c *gin.Context) { couponRequest := requests.QuestionRequest{} req := couponRequest.PutQuestionTest if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } id := c.Param("question_id") if id == "" { responses.FailWithMessage("缺少参数", c) return } // 将 id 转换为 int64 类型 questionId, err := strconv.ParseInt(id, 10, 64) if err != nil { responses.Fail(c) return } // 业务处理 questionService := service.QuestionService{} _, err = questionService.PutQuestionTest(questionId, req) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.Ok(c) } // DeleteQuestion 删除题目 func (r *Question) DeleteQuestion(c *gin.Context) { questionRequest := requests.QuestionRequest{} req := questionRequest.DeleteQuestion if err := c.ShouldBindJSON(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } // 业务处理 questionService := service.QuestionService{} _, err := questionService.DeleteQuestion(req) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.Ok(c) } // GetQuestionCount 获取题目数量 func (r *Question) GetQuestionCount(c *gin.Context) { questionRequest := requests.QuestionRequest{} req := questionRequest.GetQuestionCount if err := c.ShouldBind(&req); err != nil { responses.FailWithMessage(err.Error(), c) return } // 参数验证 if err := global.Validate.Struct(req); err != nil { responses.FailWithMessage(utils.Translate(err), c) return } questionDao := dao.QuestionDao{} total, err := questionDao.GetQuestionCountSearch(req) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.OkWithData(total, c) }