package wechat import ( "fmt" "net/http" "mini-chat/internal/code" "mini-chat/internal/pkg/core" "mini-chat/internal/pkg/validation" "gorm.io/gorm" ) type templateRequest struct { AppID string `json:"app_id" binding:"required"` // 微信小程序 AppID } type templateResponse struct { Success bool `json:"success"` Message string `json:"message"` AppID string `json:"app_id"` // 小程序 AppID TemplateID string `json:"template_id"` // 模板 ID } // GetTemplate 获取微信小程序模板ID // @Summary 获取微信小程序模板ID // @Description 根据 AppID 获取微信小程序的模板ID // @Tags 微信 // @Accept json // @Produce json // @Param request body templateRequest true "请求参数" // @Success 200 {object} templateResponse // @Failure 400 {object} code.Failure // @Failure 404 {object} code.Failure // @Failure 500 {object} code.Failure // @Router /api/wechat/template [post] func (h *handler) GetTemplate() core.HandlerFunc { return func(ctx core.Context) { req := new(templateRequest) res := new(templateResponse) if err := ctx.ShouldBindJSON(req); err != nil { ctx.AbortWithError(core.Error( http.StatusBadRequest, code.ParamBindError, validation.Error(err), )) return } // 根据 AppID 查询小程序信息 miniProgram, err := h.readDB.MiniProgram.WithContext(ctx.RequestContext()). Where(h.readDB.MiniProgram.AppID.Eq(req.AppID)). First() if err != nil { if err == gorm.ErrRecordNotFound { ctx.AbortWithError(core.Error( http.StatusNotFound, code.ServerError, fmt.Sprintf("未找到 AppID 为 %s 的小程序", req.AppID), )) return } h.logger.Error(fmt.Sprintf("查询小程序信息失败: %s", err.Error())) ctx.AbortWithError(core.Error( http.StatusInternalServerError, code.ServerError, "查询小程序信息失败", )) return } // 检查是否有权限访问该小程序 if ctx.SessionUserInfo().IsSuper != 1 && miniProgram.AdminID != ctx.SessionUserInfo().Id { ctx.AbortWithError(core.Error( http.StatusForbidden, code.ServerError, "无权限访问该小程序", )) return } // 检查模板ID是否存在 if miniProgram.TemplateID == "" { ctx.AbortWithError(core.Error( http.StatusNotFound, code.ServerError, "该小程序未配置模板ID", )) return } res.Success = true res.Message = "获取模板ID成功" res.AppID = miniProgram.AppID res.TemplateID = miniProgram.TemplateID ctx.Payload(res) } }