pet-ai/server/plugin/wechat-integration/api/mp_news_api.go

260 lines
7.6 KiB
Go

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)
}