feat: 添加内容排序功能,优化内容列表查询和加载状态处理
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user