feat: support admin order query
Some checks failed
build quyun / Build (push) Failing after 1m26s

This commit is contained in:
2025-12-20 21:19:18 +08:00
parent 40df9604d8
commit 80b94739c0
5 changed files with 53 additions and 39 deletions

View File

@@ -4,7 +4,9 @@ import (
"context"
"time"
"quyun/v2/app/http/admin/dto"
"quyun/v2/app/requests"
"quyun/v2/database"
"quyun/v2/database/models"
"quyun/v2/pkg/fields"
@@ -25,19 +27,33 @@ type OrderListItem struct {
type orders struct{}
// List 订单列表(支持按订单号模糊查询、按用户过滤)。
func (m *orders) List(
ctx context.Context,
pagination *requests.Pagination,
conds ...gen.Condition,
) (*requests.Pager, error) {
pagination.Format()
func (m *orders) List(ctx context.Context, filter *dto.OrderListQuery) (*requests.Pager, error) {
filter.Pagination.Format()
tbl, query := models.OrderQuery.QueryContext(ctx)
orders, cnt, err := query.
Where(conds...).
Order(tbl.ID.Desc()).
FindByPage(int(pagination.Offset()), int(pagination.Limit))
query = query.Order(tbl.ID.Desc())
if filter.OrderNumber != nil && *filter.OrderNumber != "" {
query = query.Where(tbl.OrderNo.Eq(*filter.OrderNumber))
}
if filter.Keyword != nil && *filter.Keyword != "" {
query = query.Where(tbl.OrderNo.Like(database.WrapLike(*filter.Keyword)))
// query post ids
ids, _ := Posts.FilterIdsByKeyword(ctx, *filter.Keyword)
if len(ids) > 0 {
ids = lo.Uniq(ids)
query = query.Or(tbl.PostID.In(ids...))
}
}
if filter.UserID != nil && *filter.UserID > 0 {
query = query.Where(tbl.UserID.Eq(*filter.UserID))
}
orders, cnt, err := query.FindByPage(int(filter.Pagination.Offset()), int(filter.Pagination.Limit))
if err != nil {
return nil, errors.Wrap(err, "failed to list orders")
}
@@ -72,7 +88,7 @@ func (m *orders) List(
return &requests.Pager{
Items: items,
Total: cnt,
Pagination: *pagination,
Pagination: *filter.Pagination,
}, nil
}

View File

@@ -5,6 +5,7 @@ import (
"time"
"quyun/v2/app/requests"
"quyun/v2/database"
"quyun/v2/database/models"
"github.com/pkg/errors"
@@ -167,3 +168,9 @@ func (m *posts) Count(ctx context.Context, conds ...gen.Condition) (int64, error
}
return query.Count()
}
// FilterIdsByKeyword filter posts ids by title keywords
func (m *posts) FilterIdsByKeyword(ctx context.Context, keyword string) ([]int64, error) {
tbl, query := models.PostQuery.QueryContext(ctx)
return query.Select(tbl.ID).Where(tbl.Title.Like(database.WrapLike(keyword))).PluckIDs()
}