feat: 添加内容排序功能,优化内容列表查询和加载状态处理

This commit is contained in:
2026-01-06 15:28:12 +08:00
parent 31d6192816
commit 1723802722
4 changed files with 122 additions and 11 deletions

View File

@@ -2,6 +2,7 @@ package v1
import (
"quyun/v2/app/http/v1/dto"
"quyun/v2/app/requests"
"quyun/v2/app/services"
"quyun/v2/database/models"
@@ -75,7 +76,7 @@ func (c *Creator) ListContents(
ctx fiber.Ctx,
user *models.User,
filter *dto.CreatorContentListFilter,
) ([]dto.CreatorContentItem, error) {
) (*requests.Pager, error) {
return services.Creator.ListContents(ctx, user.ID, filter)
}

View File

@@ -93,8 +93,9 @@ type CreatorContentListFilter struct {
Status *string `query:"status"`
Visibility *string `query:"visibility"`
Genre *string `query:"genre"`
Key *string `query:"key"`
Keyword *string `query:"keyword"`
Key *string `query:"key"`
Keyword *string `query:"keyword"`
Sort *string `query:"sort"`
}
type CreatorOrderListFilter struct {

View File

@@ -8,6 +8,7 @@ import (
"quyun/v2/app/errorx"
creator_dto "quyun/v2/app/http/v1/dto"
"quyun/v2/app/requests"
"quyun/v2/database/fields"
"quyun/v2/database/models"
"quyun/v2/pkg/consts"
@@ -109,7 +110,7 @@ func (s *creator) ListContents(
ctx context.Context,
userID int64,
filter *creator_dto.CreatorContentListFilter,
) ([]creator_dto.CreatorContentItem, error) {
) (*requests.Pager, error) {
tid, err := s.getTenantID(ctx, userID)
if err != nil {
return nil, err
@@ -143,8 +144,32 @@ func (s *creator) ListContents(
q = q.Where(tbl.Title.Like("%" + *filter.Keyword + "%"))
}
// Pagination
filter.Pagination.Format()
total, err := q.Count()
if err != nil {
return nil, errorx.ErrDatabaseError.WithCause(err)
}
var list []*models.Content
err = q.Order(tbl.ID.Desc()).
// Sorting
sort := "latest"
if filter.Sort != nil && *filter.Sort != "" {
sort = *filter.Sort
}
switch sort {
case "oldest":
q = q.Order(tbl.ID.Asc())
case "views":
q = q.Order(tbl.Views.Desc())
case "likes":
q = q.Order(tbl.Likes.Desc())
default:
q = q.Order(tbl.ID.Desc())
}
err = q.Offset(int(filter.Pagination.Offset())).Limit(int(filter.Pagination.Limit)).
UnderlyingDB().
Preload("ContentAssets").
Preload("ContentAssets.Asset").
@@ -220,9 +245,13 @@ func (s *creator) ListContents(
IsPurchased: false,
})
}
return data, nil
}
return &requests.Pager{
Pagination: filter.Pagination,
Total: total,
Items: data,
}, nil
}
func (s *creator) CreateContent(ctx context.Context, userID int64, form *creator_dto.ContentCreateForm) error {
tid, err := s.getTenantID(ctx, userID)
if err != nil {