package api import ( "strconv" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" wechatResponse "github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/model/response" "github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/service" "github.com/gin-gonic/gin" "go.uber.org/zap" ) type MpDraftApi struct{} var mpDraftService = service.ServiceGroupApp.MpDraftService // GetDraftList 获取草稿列表 // @Tags MpDraft // @Summary 获取草稿列表 // @Description 获取公众号草稿列表 // @Accept json // @Produce json // @Param page query int false "页码" // @Param pageSize query int false "每页数量" // @Param title query string false "标题" // @Param author query string false "作者" // @Success 200 {object} response.Response{data=response.PageResult} "获取成功" // @Router /wechat/mp/draft [get] func (m *MpDraftApi) GetDraftList(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10")) title := c.Query("title") author := c.Query("author") if page <= 0 { page = 1 } if pageSize <= 0 || pageSize > 100 { pageSize = 10 } draftResponse, err := mpDraftService.GetDraftList(page, pageSize, title, author) if err != nil { global.GVA_LOG.Error("获取草稿列表失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } response.OkWithDetailed(wechatResponse.PageResult{ List: draftResponse.Items, Total: int64(draftResponse.TotalCount), Page: page, PageSize: pageSize, }, "获取成功", c) } // GetDraftInfo 获取草稿详情 // @Tags MpDraft // @Summary 获取草稿详情 // @Description 获取公众号草稿详情 // @Accept json // @Produce json // @Param id path string true "草稿MediaID" // @Success 200 {object} response.Response{data=service.DraftItem} "获取成功" // @Router /wechat/mp/draft/{id} [get] func (m *MpDraftApi) GetDraftInfo(c *gin.Context) { mediaID := c.Param("id") if mediaID == "" { response.FailWithMessage("草稿MediaID不能为空", c) return } draft, err := mpDraftService.GetDraftInfo(mediaID) if err != nil { global.GVA_LOG.Error("获取草稿详情失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } response.OkWithData(draft, c) } // CreateDraft 创建草稿 // @Tags MpDraft // @Summary 创建草稿 // @Description 创建公众号草稿 // @Accept json // @Produce json // @Param data body service.CreateDraftRequest true "草稿信息" // @Success 200 {object} response.Response "创建成功" // @Router /wechat/mp/draft [post] func (m *MpDraftApi) CreateDraft(c *gin.Context) { var req service.CreateDraftRequest err := c.ShouldBindJSON(&req) if err != nil { response.FailWithMessage(err.Error(), c) return } mediaID, err := mpDraftService.CreateDraft(&req) if err != nil { global.GVA_LOG.Error("创建草稿失败!", zap.Error(err)) response.FailWithMessage("创建失败: "+err.Error(), c) return } response.OkWithData(map[string]string{"mediaId": mediaID}, c) } // UpdateDraft 更新草稿 // @Tags MpDraft // @Summary 更新草稿 // @Description 更新公众号草稿 // @Accept json // @Produce json // @Param data body service.UpdateDraftRequest true "草稿信息" // @Success 200 {object} response.Response "更新成功" // @Router /wechat/mp/draft [put] func (m *MpDraftApi) UpdateDraft(c *gin.Context) { var req service.UpdateDraftRequest err := c.ShouldBindJSON(&req) if err != nil { response.FailWithMessage(err.Error(), c) return } err = mpDraftService.UpdateDraft(&req) if err != nil { global.GVA_LOG.Error("更新草稿失败!", zap.Error(err)) response.FailWithMessage("更新失败: "+err.Error(), c) return } response.OkWithMessage("更新成功", c) } // DeleteDraft 删除草稿 // @Tags MpDraft // @Summary 删除草稿 // @Description 删除公众号草稿 // @Accept json // @Produce json // @Param id path string true "草稿MediaID" // @Success 200 {object} response.Response "删除成功" // @Router /wechat/mp/draft/{id} [delete] func (m *MpDraftApi) DeleteDraft(c *gin.Context) { mediaID := c.Param("id") if mediaID == "" { response.FailWithMessage("草稿MediaID不能为空", c) return } err := mpDraftService.DeleteDraft(mediaID) if err != nil { global.GVA_LOG.Error("删除草稿失败!", zap.Error(err)) response.FailWithMessage("删除失败: "+err.Error(), c) return } response.OkWithMessage("删除成功", c) } // PublishDraft 发布草稿 // @Tags MpDraft // @Summary 发布草稿 // @Description 发布公众号草稿 // @Accept json // @Produce json // @Param id path string true "草稿MediaID" // @Success 200 {object} response.Response "发布成功" // @Router /wechat/mp/draft/{id}/publish [post] func (m *MpDraftApi) PublishDraft(c *gin.Context) { mediaID := c.Param("id") if mediaID == "" { response.FailWithMessage("草稿MediaID不能为空", c) return } err := mpDraftService.PublishDraft(mediaID) if err != nil { global.GVA_LOG.Error("发布草稿失败!", zap.Error(err)) response.FailWithMessage("发布失败: "+err.Error(), c) return } response.OkWithMessage("发布成功", c) } // SyncDrafts 同步草稿 // @Tags MpDraft // @Summary 同步草稿 // @Description 同步公众号草稿 // @Accept json // @Produce json // @Success 200 {object} response.Response "同步成功" // @Router /wechat/mp/draft/sync [post] func (m *MpDraftApi) SyncDrafts(c *gin.Context) { err := mpDraftService.SyncDrafts() if err != nil { global.GVA_LOG.Error("同步草稿失败!", zap.Error(err)) response.FailWithMessage("同步失败: "+err.Error(), c) return } response.OkWithMessage("同步成功", c) } // GetDraftCount 获取草稿数量统计 // @Tags MpDraft // @Summary 获取草稿数量统计 // @Description 获取草稿数量统计信息 // @Accept json // @Produce json // @Success 200 {object} response.Response{data=map[string]int64} "获取成功" // @Router /wechat/mp/draft/count [get] func (m *MpDraftApi) GetDraftCount(c *gin.Context) { count, err := mpDraftService.GetDraftCount() if err != nil { global.GVA_LOG.Error("获取草稿数量统计失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } response.OkWithData(count, c) }