260 lines
7.6 KiB
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)
|
|
}
|