package api import ( "strconv" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" "github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/model" "github.com/flipped-aurora/gin-vue-admin/server/plugin/wechat-integration/model/request" 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 MpNewsApi struct{} var mpNewsService = service.ServiceGroupApp.MpNewsService // GetNewsList 获取图文发表记录列表 // @Tags MpNews // @Summary 获取图文发表记录列表 // @Description 获取公众号图文发表记录列表 // @Accept json // @Produce json // @Param page query int false "页码" // @Param pageSize query int false "每页数量" // @Param status query string false "发布状态" // @Success 200 {object} response.Response{data=response.PageResult} "获取成功" // @Router /wechat/mp/news [get] func (m *MpNewsApi) GetNewsList(c *gin.Context) { page, _ := strconv.Atoi(c.DefaultQuery("page", "1")) pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10")) status := c.Query("status") if page <= 0 { page = 1 } if pageSize <= 0 || pageSize > 100 { pageSize = 10 } newsList, total, err := mpNewsService.GetNewsList(page, pageSize, status) if err != nil { global.GVA_LOG.Error("获取图文发表记录列表失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } response.OkWithDetailed(wechatResponse.PageResult{ List: newsList, Total: total, Page: page, PageSize: pageSize, }, "获取成功", c) } // GetNewsInfo 获取图文详情 // @Tags MpNews // @Summary 获取图文详情 // @Description 获取公众号图文详情 // @Accept json // @Produce json // @Param id path int true "图文ID" // @Success 200 {object} response.Response{data=model.MpNews} "获取成功" // @Router /wechat/mp/news/{id} [get] func (m *MpNewsApi) GetNewsInfo(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.FailWithMessage("无效的图文ID", c) return } news, err := mpNewsService.GetNewsInfo(uint(id)) if err != nil { global.GVA_LOG.Error("获取图文详情失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } response.OkWithData(news, c) } // CreateNews 创建图文记录 // @Tags MpNews // @Summary 创建图文记录 // @Description 创建公众号图文记录 // @Accept json // @Produce json // @Param data body request.CreateMpNewsRequest true "图文信息" // @Success 200 {object} response.Response "创建成功" // @Router /wechat/mp/news [post] func (m *MpNewsApi) CreateNews(c *gin.Context) { var req request.CreateMpNewsRequest err := c.ShouldBindJSON(&req) if err != nil { response.FailWithMessage(err.Error(), c) return } // 将DTO转换为数据库实体 news := &model.MpNews{ MediaID: req.MediaID, Title: req.Title, Author: req.Author, Digest: req.Digest, Content: req.Content, ContentURL: req.ContentURL, SourceURL: req.SourceURL, ThumbMediaID: req.ThumbMediaID, ThumbURL: req.ThumbURL, ShowCover: req.ShowCover, NeedOpenComment: req.NeedOpenComment, OnlyFansCanComment: req.OnlyFansCanComment, PublishStatus: req.PublishStatus, WechatURL: req.WechatURL, WechatMsgID: req.WechatMsgID, } err = mpNewsService.CreateNews(news) if err != nil { global.GVA_LOG.Error("创建图文记录失败!", zap.Error(err)) response.FailWithMessage("创建失败: "+err.Error(), c) return } response.OkWithData(news, c) } // UpdateNews 更新图文记录 // @Tags MpNews // @Summary 更新图文记录 // @Description 更新公众号图文记录 // @Accept json // @Produce json // @Param data body request.UpdateMpNewsRequest true "图文信息" // @Success 200 {object} response.Response "更新成功" // @Router /wechat/mp/news [put] func (m *MpNewsApi) UpdateNews(c *gin.Context) { var req request.UpdateMpNewsRequest err := c.ShouldBindJSON(&req) if err != nil { response.FailWithMessage(err.Error(), c) return } if req.ID == 0 { response.FailWithMessage("ID不能为空", c) return } // 获取现有记录以保留时间字段 existingNews, err := mpNewsService.GetNewsInfo(req.ID) if err != nil { global.GVA_LOG.Error("获取图文记录失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } // 更新字段,保留原有的时间字段 existingNews.MediaID = req.MediaID existingNews.Title = req.Title existingNews.Author = req.Author existingNews.Digest = req.Digest existingNews.Content = req.Content existingNews.ContentURL = req.ContentURL existingNews.SourceURL = req.SourceURL existingNews.ThumbMediaID = req.ThumbMediaID existingNews.ThumbURL = req.ThumbURL existingNews.ShowCover = req.ShowCover existingNews.NeedOpenComment = req.NeedOpenComment existingNews.OnlyFansCanComment = req.OnlyFansCanComment existingNews.PublishStatus = req.PublishStatus existingNews.WechatURL = req.WechatURL existingNews.WechatMsgID = req.WechatMsgID err = mpNewsService.UpdateNews(existingNews) if err != nil { global.GVA_LOG.Error("更新图文记录失败!", zap.Error(err)) response.FailWithMessage("更新失败: "+err.Error(), c) return } response.OkWithMessage("更新成功", c) } // DeleteNews 删除图文记录 // @Tags MpNews // @Summary 删除图文记录 // @Description 删除公众号图文记录 // @Accept json // @Produce json // @Param id path int true "图文ID" // @Success 200 {object} response.Response "删除成功" // @Router /wechat/mp/news/{id} [delete] func (m *MpNewsApi) DeleteNews(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.FailWithMessage("无效的图文ID", c) return } err = mpNewsService.DeleteNews(uint(id)) if err != nil { global.GVA_LOG.Error("删除图文记录失败!", zap.Error(err)) response.FailWithMessage("删除失败: "+err.Error(), c) return } response.OkWithMessage("删除成功", c) } // GetNewsStatistics 获取图文数据统计 // @Tags MpNews // @Summary 获取图文数据统计 // @Description 获取公众号图文数据统计 // @Accept json // @Produce json // @Param id path int true "图文ID" // @Success 200 {object} response.Response{data=map[string]interface{}} "获取成功" // @Router /wechat/mp/news/{id}/statistics [get] func (m *MpNewsApi) GetNewsStatistics(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.FailWithMessage("无效的图文ID", c) return } statistics, err := mpNewsService.GetNewsStatistics(uint(id)) if err != nil { global.GVA_LOG.Error("获取图文数据统计失败!", zap.Error(err)) response.FailWithMessage("获取失败: "+err.Error(), c) return } response.OkWithData(statistics, c) } // SyncNews 同步图文发表记录 // @Tags MpNews // @Summary 同步图文发表记录 // @Description 同步公众号图文发表记录 // @Accept json // @Produce json // @Success 200 {object} response.Response "同步成功" // @Router /wechat/mp/news/sync [post] func (m *MpNewsApi) SyncNews(c *gin.Context) { err := mpNewsService.SyncNews() if err != nil { global.GVA_LOG.Error("同步图文发表记录失败!", zap.Error(err)) response.FailWithMessage("同步失败: "+err.Error(), c) return } response.OkWithMessage("同步成功", c) }