From 90d17ed4b1ea32f52b4af7c8b398f5d58a6397a2 Mon Sep 17 00:00:00 2001 From: Victor_Jay Date: Sat, 30 May 2026 20:33:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=A1=E7=90=86=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=BE=85=E5=AE=A1=E7=A8=BF=E4=BB=B6=E7=BD=AE=E9=A1=B6=E4=BC=98?= =?UTF-8?q?=E5=85=88=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FindAdminPageable 新增 pageResultsAdmin,使用 CASE WHEN 排序 - pending 和有 PendingBody 的 approved 帖子排在最前 - 其余帖子按创建时间倒序排在后面 --- internal/repository/post_repo.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/internal/repository/post_repo.go b/internal/repository/post_repo.go index d25203d..fece9d9 100644 --- a/internal/repository/post_repo.go +++ b/internal/repository/post_repo.go @@ -68,10 +68,10 @@ func (r *PostRepo) FindPageable(keyword string, offset, limit int) ([]model.Post return r.pageResults(query, offset, limit) } -// FindAdminPageable 管理后台分页查询(全状态筛选) +// FindAdminPageable 管理后台分页查询(全状态筛选,待审置顶) func (r *PostRepo) FindAdminPageable(keyword, status string, offset, limit int) ([]model.Post, int64, error) { query := r.buildQuery(keyword, status) - return r.pageResults(query, offset, limit) + return r.pageResultsAdmin(query, offset, limit) } // FindByUserID 分页查询某用户发布的帖子(仅 approved,含作者用户名) @@ -111,6 +111,22 @@ func (r *PostRepo) pageResults(query *gorm.DB, offset, limit int) ([]model.Post, return posts, total, nil } +// pageResultsAdmin 管理后台分页:待审稿件(pending 或 修订待审)置顶优先 +func (r *PostRepo) pageResultsAdmin(query *gorm.DB, offset, limit int) ([]model.Post, int64, error) { + var total int64 + if err := query.Count(&total).Error; err != nil { + return nil, 0, err + } + + var posts []model.Post + err := query.Order(`CASE WHEN posts.status = 'pending' OR (posts.status = 'approved' AND posts.pending_body != '') THEN 0 ELSE 1 END ASC, posts.created_at DESC`). + Offset(offset).Limit(limit).Find(&posts).Error + if err != nil { + return nil, 0, err + } + return posts, total, nil +} + // Update 更新帖子 func (r *PostRepo) Update(post *model.Post) error { return r.db.Save(post).Error