mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #14344 from swordqiu/hotfix/qj-set-pagination-order
fix: allow set pagination order
This commit is contained in:
@@ -41,6 +41,7 @@ type BaseEventListOptions struct {
|
||||
OwnerDomainIds []string `help:"filter by owner domain ids"`
|
||||
|
||||
PagingMarker string `help:"marker for pagination"`
|
||||
PagingOrder string `help:"pagination order" choices:"DESC|ASC"`
|
||||
|
||||
Filter []string `help:"Filters"`
|
||||
}
|
||||
@@ -121,6 +122,9 @@ func DoEventList(man modulebase.ResourceManager, s *mcclient.ClientSession, args
|
||||
if len(args.PagingMarker) > 0 {
|
||||
params.Add(jsonutils.NewString(args.PagingMarker), "paging_marker")
|
||||
}
|
||||
if len(args.PagingOrder) > 0 {
|
||||
params.Add(jsonutils.NewString(args.PagingOrder), "paging_order")
|
||||
}
|
||||
if len(args.Filter) > 0 {
|
||||
params.Add(jsonutils.NewStringArray(args.Filter), "filter")
|
||||
}
|
||||
|
||||
@@ -519,6 +519,8 @@ func ListItems(manager IModelManager, ctx context.Context, userCred mcclient.Tok
|
||||
limit, _ := query.Int("limit")
|
||||
offset, _ := query.Int("offset")
|
||||
pagingMarker, _ := query.GetString("paging_marker")
|
||||
pagingOrderStr, _ := query.GetString("paging_order")
|
||||
pagingOrder := sqlchemy.QueryOrderType(strings.ToUpper(pagingOrderStr))
|
||||
|
||||
var (
|
||||
q *sqlchemy.SQuery
|
||||
@@ -559,6 +561,9 @@ func ListItems(manager IModelManager, ctx context.Context, userCred mcclient.Tok
|
||||
if limit <= 0 {
|
||||
limit = int64(pagingConf.DefaultLimit)
|
||||
}
|
||||
if pagingOrder != sqlchemy.SQL_ORDER_ASC && pagingOrder != sqlchemy.SQL_ORDER_DESC {
|
||||
pagingOrder = pagingConf.Order
|
||||
}
|
||||
}
|
||||
|
||||
splitable := manager.GetSplitTable()
|
||||
@@ -584,7 +589,7 @@ func ListItems(manager IModelManager, ctx context.Context, userCred mcclient.Tok
|
||||
markers := decodePagingMarker(pagingMarker)
|
||||
for markerIdx, marker := range markers {
|
||||
if markerIdx < len(pagingConf.MarkerFields) {
|
||||
if pagingConf.Order == sqlchemy.SQL_ORDER_ASC {
|
||||
if pagingOrder == sqlchemy.SQL_ORDER_ASC {
|
||||
subq = subq.GE(pagingConf.MarkerFields[markerIdx], marker)
|
||||
} else {
|
||||
subq = subq.LE(pagingConf.MarkerFields[markerIdx], marker)
|
||||
@@ -593,7 +598,7 @@ func ListItems(manager IModelManager, ctx context.Context, userCred mcclient.Tok
|
||||
}
|
||||
}
|
||||
for _, f := range pagingConf.MarkerFields {
|
||||
if pagingConf.Order == sqlchemy.SQL_ORDER_ASC {
|
||||
if pagingOrder == sqlchemy.SQL_ORDER_ASC {
|
||||
subq = subq.Asc(f)
|
||||
} else {
|
||||
subq = subq.Desc(f)
|
||||
@@ -653,7 +658,7 @@ func ListItems(manager IModelManager, ctx context.Context, userCred mcclient.Tok
|
||||
// orders defined in pagingConf should have the highest priority
|
||||
if pagingConf != nil {
|
||||
for _, f := range pagingConf.MarkerFields {
|
||||
if pagingConf.Order == sqlchemy.SQL_ORDER_ASC {
|
||||
if pagingOrder == sqlchemy.SQL_ORDER_ASC {
|
||||
q = q.Asc(f)
|
||||
} else {
|
||||
q = q.Desc(f)
|
||||
@@ -729,7 +734,7 @@ func ListItems(manager IModelManager, ctx context.Context, userCred mcclient.Tok
|
||||
markers := decodePagingMarker(pagingMarker)
|
||||
for markerIdx, marker := range markers {
|
||||
if markerIdx < len(pagingConf.MarkerFields) {
|
||||
if pagingConf.Order == sqlchemy.SQL_ORDER_ASC {
|
||||
if pagingOrder == sqlchemy.SQL_ORDER_ASC {
|
||||
q = q.GE(pagingConf.MarkerFields[markerIdx], marker)
|
||||
} else {
|
||||
q = q.LE(pagingConf.MarkerFields[markerIdx], marker)
|
||||
@@ -754,7 +759,7 @@ func ListItems(manager IModelManager, ctx context.Context, userCred mcclient.Tok
|
||||
Data: retList, Limit: int(limit),
|
||||
NextMarker: nextMarker,
|
||||
MarkerField: strings.Join(pagingConf.MarkerFields, ","),
|
||||
MarkerOrder: string(pagingConf.Order),
|
||||
MarkerOrder: string(pagingOrder),
|
||||
}
|
||||
return &retResult, nil
|
||||
}
|
||||
|
||||
@@ -247,6 +247,7 @@ type BaseListOptions struct {
|
||||
IsManaged *bool `help:"List objects managed by external providers" token:"managed" json:"is_managed"`
|
||||
|
||||
PagingMarker string `help:"Marker for pagination" json:"paging_marker"`
|
||||
PagingOrder string `help:"paging order" choices:"DESC|ASC"`
|
||||
|
||||
OrderByTag string `help:"Order results by tag values, composed by a tag key and order, e.g user:部门:ASC"`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user