package controller import ( "fmt" "github.com/gin-gonic/gin" "knowledge/api/dao" "knowledge/api/dto" "knowledge/api/requests" "knowledge/api/responses" "knowledge/api/service" "knowledge/consts" "knowledge/global" "knowledge/utils" "net/http" "time" ) type Share struct{} // GetBackgroundImage 获取背景图 func (r *Share) GetBackgroundImage(c *gin.Context) { shareRequest := requests.ShareRequest{} req := shareRequest.GetBackgroundImage 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 } questionQaDao := dao.QuestionQaDao{} // 获取题库数据 maps := make(map[string]interface{}) maps["qa_share_id"] = req.QaShareId questionQa, err := questionQaDao.GetQuestionQa(maps) if err != nil || questionQa == nil { responses.FailWithMessage("题库不存在", c) return } if questionQa.QaStatus == 2 { responses.FailWithMessage("题库已失效", c) return } // 检测过期时间 now := time.Now() qaExpireTime := time.Time(questionQa.QaExpireTime) if qaExpireTime.Before(now) { responses.FailWithMessage("题库已失效", c) return } image := utils.AddOssDomain(questionQa.Image) responses.OkWithData(image, c) } // ShareAuth 授权 func (r *Share) ShareAuth(c *gin.Context) { shareRequest := requests.ShareRequest{} req := shareRequest.ShareAuth 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 } questionQaDao := dao.QuestionQaDao{} // 获取题库数据 maps := make(map[string]interface{}) maps["qa_share_id"] = req.QaShareId questionQa, err := questionQaDao.GetQuestionQa(maps) if err != nil || questionQa == nil { responses.FailWithMessage("题库不存在", c) return } if questionQa.QaStatus == 2 { responses.FailWithMessage("题库已失效", c) return } if questionQa.QaPassword != req.QaPassword { responses.FailWithMessage("密码错误", c) return } // 检测过期时间 now := time.Now() qaExpireTime := time.Time(questionQa.QaExpireTime) if qaExpireTime.Before(now) { responses.FailWithMessage("题库已失效", c) return } token := &utils.Token{ Client: 1, QaId: fmt.Sprintf("%d", questionQa.QaId), } // 生成jwt ttl := 5 * time.Hour jwt, err := token.NewJWT(ttl) if err != nil { responses.FailWithMessage("题库错误", c) return } // 处理返回值 g := dto.ShareAuthDto{} g.Token = jwt responses.OkWithData(g, c) } // GetQuestionQa 获取知识问答数据 func (r *Share) GetQuestionQa(c *gin.Context) { // 获取知识问答id qaId := c.GetInt64("QaId") if qaId == 0 { c.JSON(http.StatusUnauthorized, gin.H{ "message": "请输入密码后查看", "code": consts.TokenError, "data": "", }) return } questionQaDao := dao.QuestionQaDao{} // 获取题库数据 questionQa, err := questionQaDao.GetQuestionQaById(qaId) if err != nil || questionQa == nil { responses.FailWithMessage("题库不存在", c) return } if questionQa.QaStatus == 2 { responses.FailWithMessage("题库已失效", c) return } // 检测过期时间 now := time.Now() qaExpireTime := time.Time(questionQa.QaExpireTime) if qaExpireTime.Before(now) { responses.FailWithMessage("题库已失效", c) return } g := dto.GetQuestionQaDto(questionQa) // 加载题目计时 questionQaTimerDao := dao.QuestionQaTimerDao{} questionQaTimers, err := questionQaTimerDao.GetQuestionQaTimerListByQaId(questionQa.QaId) g = g.LoadQuestionQaTimerDto(questionQaTimers) responses.OkWithData(g, c) } // GetQuestion 获取题目数据 func (r *Share) GetQuestion(c *gin.Context) { // 获取知识问答id qaId := c.GetInt64("QaId") if qaId == 0 { c.JSON(http.StatusUnauthorized, gin.H{ "message": "请输入密码后查看", "code": consts.TokenError, "data": "", }) c.Abort() return } questionQaDao := dao.QuestionQaDao{} // 获取题库数据 questionQa, err := questionQaDao.GetQuestionQaById(qaId) if err != nil || questionQa == nil { responses.FailWithMessage("题库不存在", c) return } if questionQa.QaStatus == 2 { responses.FailWithMessage("题库已失效", c) return } // 检测过期时间 now := time.Now() qaExpireTime := time.Time(questionQa.QaExpireTime) if qaExpireTime.Before(now) { responses.FailWithMessage("题库已失效", c) return } questionQaService := service.QuestionQaService{} // 题库类型1-常规模式 if questionQa.QaType == 1 { g, err := questionQaService.GetShareQuestionQaForTypeOne(questionQa) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.OkWithData(g, c) return } // 题库类型2-固定套题模式 if questionQa.QaType == 2 { g, err := questionQaService.GetShareQuestionQaForTypeTwo(questionQa) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.OkWithData(g, c) return } // 题库类型3-多轮固定题型模式 if questionQa.QaType == 3 { g, err := questionQaService.GetShareQuestionQaForTypeThree(questionQa) if err != nil { responses.FailWithMessage(err.Error(), c) return } responses.OkWithData(g, c) return } // 记录问答题库打开次数 _ = questionQaService.RecordQuestionQaOpenNum(global.Db, questionQa.QaId) // 返回 responses.FailWithMessage("题库错误", c) return }