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