From 4ce59a3090fa1282e6d5903312f9e08ae4f5e6c4 Mon Sep 17 00:00:00 2001 From: Echo <1711788888@qq.com> Date: Thu, 31 Jul 2025 02:40:13 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=96=B0=E5=A2=9E=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E6=96=87=E7=AB=A0=E6=8E=A5=E5=8F=A3&=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E9=83=A8=E5=88=86=E6=97=A7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/v1/article/article.go | 44 +++++++++++++++++++++++++++++++- model/article/article.go | 1 + model/article/request/article.go | 1 + router/article/article.go | 8 +++++- service/article/article.go | 42 ++++++++++++++++++++++++++++-- 5 files changed, 92 insertions(+), 4 deletions(-) diff --git a/api/v1/article/article.go b/api/v1/article/article.go index a1623bf..c724594 100644 --- a/api/v1/article/article.go +++ b/api/v1/article/article.go @@ -115,7 +115,7 @@ func (ArticleApi) AppById(ctx *gin.Context) { } userId := user_jwt.GetUserID(ctx) - article, err := articleService.APPGetArticle(id, userId) + article, err := articleService.APPGetArticle(id, int(userId)) if err != nil { global.GVA_LOG.Error("查询失败!", zap.Error(err)) r.FailWithMessage("查询失败:"+err.Error(), ctx) @@ -123,3 +123,45 @@ func (ArticleApi) AppById(ctx *gin.Context) { } r.OkWithData(article, ctx) } + +// AppPush app端推送文章 +func (ArticleApi) AppPush(ctx *gin.Context) { + var p article.Article + if err := ctx.ShouldBind(&p); err != nil { + r.FailWithMessage(err.Error(), ctx) + global.GVA_LOG.Error("参数有误!", zap.Error(err)) + return + } + + err := articleService.AppPush(p) + if err != nil { + global.GVA_LOG.Error("推送失败!", zap.Error(err)) + r.FailWithMessage("推送失败:"+err.Error(), ctx) + return + } + r.OkWithMessage("推送成功", ctx) +} + +// GetMyArticleList 获取我的文章列表 +func (ArticleApi) GetMyArticleList(ctx *gin.Context) { + var p request.GetList + if err := ctx.ShouldBind(&p); err != nil { + r.FailWithMessage(err.Error(), ctx) + global.GVA_LOG.Error("参数有误!", zap.Error(err)) + return + } + userId := user_jwt.GetUserID(ctx) + if userId == 0 { + r.FailWithMessage("用户未登录", ctx) + return + } + p.TeacherId = int(userId) // 设置当前用户ID为教师ID + + list, total, err := articleService.GetMyArticleList(p) + if err != nil { + global.GVA_LOG.Error("查询失败!", zap.Error(err)) + r.FailWithMessage("查询失败:"+err.Error(), ctx) + return + } + r.OkWithDetailed(gin.H{"list": list, "total": total}, "查询成功", ctx) +} diff --git a/model/article/article.go b/model/article/article.go index c11a16f..f75448a 100644 --- a/model/article/article.go +++ b/model/article/article.go @@ -16,6 +16,7 @@ type Article struct { IsFree int `json:"isFree" gorm:"comment:是否免费;default:0"` // 是否免费 0-否 1-是 // 分类ID CategoryId int `json:"categoryId" gorm:"comment:分类ID"` + Status int `json:"status" gorm:"comment:状态;default:1"` // 状态 0-草稿 1-已发布 2-待审核 3-审核不通过 } // TableName 文章表 diff --git a/model/article/request/article.go b/model/article/request/article.go index fb3a6c4..ca391ec 100644 --- a/model/article/request/article.go +++ b/model/article/request/article.go @@ -8,6 +8,7 @@ type GetList struct { // 分类ID CategoryId int `json:"categoryId" form:"categoryId"` // 分类ID TeacherId int `json:"teacherId" form:"teacherId"` // 讲师ID + Status int `json:"status" form:"status"` // 状态 0-草稿 1-已发布 2-待审核 3-审核不通过 } type DeleteIds struct { diff --git a/router/article/article.go b/router/article/article.go index d370fd3..021c7e0 100644 --- a/router/article/article.go +++ b/router/article/article.go @@ -8,10 +8,11 @@ import ( type ArticleRouter struct{} // InitBotRouter 初始化 文章 路由信息 -func (s *ArticleRouter) InitBotRouter(Router *gin.RouterGroup, PublicRouter *gin.RouterGroup) { +func (s *ArticleRouter) InitBotRouter(Router *gin.RouterGroup, PublicRouter *gin.RouterGroup, AppRouter *gin.RouterGroup) { articleRouter := Router.Group("article").Use(middleware.OperationRecord()) articleRouterWithoutRecord := Router.Group("article") articleRouterWithoutAuth := PublicRouter.Group("article") + appRouter := AppRouter.Group("article") { articleRouter.POST("", artApi.Create) // 新建文章 articleRouter.DELETE("", artApi.Delete) // 批量删除文章 @@ -27,4 +28,9 @@ func (s *ArticleRouter) InitBotRouter(Router *gin.RouterGroup, PublicRouter *gin articleRouterWithoutAuth.GET("app/list", artApi.APPGetList) // 文章公开接口 articleRouterWithoutAuth.GET("app/:id", artApi.AppById) // 文章开放接口 } + { + // App端文章相关接口 + appRouter.POST("publish", artApi.AppPush) // 获取文章列表 + appRouter.GET("my", artApi.GetMyArticleList) // 获取我的文章列表 + } } diff --git a/service/article/article.go b/service/article/article.go index 23cbc00..e29dc94 100644 --- a/service/article/article.go +++ b/service/article/article.go @@ -75,7 +75,7 @@ func (s ArticleService) APPGetArticleList(pageInfo request.GetList) (list []vo.A return } -func (s ArticleService) APPGetArticle(id string, userId uint) (article *vo.ArticleVo, err error) { +func (s ArticleService) APPGetArticle(id string, userId int) (article *vo.ArticleVo, err error) { err = global.GVA_DB.Table("article").Where("id = ?", id).First(&article).Error if err != nil { global.GVA_LOG.Error("获取文章失败", zap.Error(err)) @@ -94,7 +94,9 @@ func (s ArticleService) APPGetArticle(id string, userId uint) (article *vo.Artic global.GVA_LOG.Error("查询用户购买记录失败", zap.Error(err)) return nil, err } - if count == 0 { + + // 如果count = 0 或者 TeacherId 不等于 userId,表示用户没有购买过该文章 + if count == 0 && article.TeacherId != userId { // 用户没有购买过,隐藏Content article.Content = "" article.IsBuy = 0 // 设置为未购买 @@ -103,3 +105,39 @@ func (s ArticleService) APPGetArticle(id string, userId uint) (article *vo.Artic return } + +// AppPush app端推送文章 +func (s ArticleService) AppPush(req article.Article) (err error) { + err = global.GVA_DB.Create(&req).Error + if err != nil { + global.GVA_LOG.Error("推送文章失败", zap.Error(err)) + return err + } + return nil +} + +func (s ArticleService) GetMyArticleList(req request.GetList) (list []article.Article, total int64, err error) { + + limit := req.PageSize + offset := req.PageSize * (req.Page - 1) + + db := global.GVA_DB.Model(&article.Article{}).Where("teacher_id = ?", req.TeacherId) + if req.Title != "" { + db = db.Where("title LIKE ?", "%"+req.Title+"%") + } + + if req.CategoryId != 0 { + db = db.Where("category_id = ?", req.CategoryId) + } + + if req.Status != 0 { + db = db.Where("status = ?", req.Status) + } + + err = db.Count(&total).Error + if err != nil { + return nil, 0, err + } + err = db.Limit(limit).Offset(offset).Find(&list).Error + return list, total, err +}