diff --git a/backend/app/http/v1/creator.go b/backend/app/http/v1/creator.go index 84e80d4..268fe38 100644 --- a/backend/app/http/v1/creator.go +++ b/backend/app/http/v1/creator.go @@ -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) } diff --git a/backend/app/http/v1/dto/creator.go b/backend/app/http/v1/dto/creator.go index d53b9c1..c64c837 100644 --- a/backend/app/http/v1/dto/creator.go +++ b/backend/app/http/v1/dto/creator.go @@ -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 { diff --git a/backend/app/services/creator.go b/backend/app/services/creator.go index 7cd1719..87c4b31 100644 --- a/backend/app/services/creator.go +++ b/backend/app/services/creator.go @@ -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 { diff --git a/frontend/portal/src/views/creator/ContentsView.vue b/frontend/portal/src/views/creator/ContentsView.vue index e2e1318..e309818 100644 --- a/frontend/portal/src/views/creator/ContentsView.vue +++ b/frontend/portal/src/views/creator/ContentsView.vue @@ -10,6 +10,7 @@
您还没有发布任何内容,快去创作吧!
+