From 07667257d5b0d823ba37f2c7e47f9f646e27de54 Mon Sep 17 00:00:00 2001 From: Steven Date: Wed, 31 Jul 2024 23:34:00 +0800 Subject: [PATCH] feat: support order by time asc --- server/router/api/v1/memo_service.go | 8 ++++++++ store/db/mysql/memo.go | 14 +++++++++----- store/db/postgres/memo.go | 14 +++++++++----- store/db/sqlite/memo.go | 14 +++++++++----- store/memo.go | 2 ++ 5 files changed, 37 insertions(+), 15 deletions(-) diff --git a/server/router/api/v1/memo_service.go b/server/router/api/v1/memo_service.go index 2a638447..d51eabe3 100644 --- a/server/router/api/v1/memo_service.go +++ b/server/router/api/v1/memo_service.go @@ -891,6 +891,9 @@ func (s *APIV1Service) buildMemoFindWithFilter(ctx context.Context, find *store. if filter.OrderByPinned { find.OrderByPinned = filter.OrderByPinned } + if filter.OrderByTimeAsc { + find.OrderByTimeAsc = filter.OrderByTimeAsc + } if filter.DisplayTimeAfter != nil { workspaceMemoRelatedSetting, err := s.Store.GetWorkspaceMemoRelatedSetting(ctx) if err != nil { @@ -995,6 +998,7 @@ var MemoFilterCELAttributes = []cel.EnvOption{ cel.Variable("visibilities", cel.ListType(cel.StringType)), cel.Variable("tag_search", cel.ListType(cel.StringType)), cel.Variable("order_by_pinned", cel.BoolType), + cel.Variable("order_by_time_asc", cel.BoolType), cel.Variable("display_time_before", cel.IntType), cel.Variable("display_time_after", cel.IntType), cel.Variable("creator", cel.StringType), @@ -1014,6 +1018,7 @@ type MemoFilter struct { Visibilities []store.Visibility TagSearch []string OrderByPinned bool + OrderByTimeAsc bool DisplayTimeBefore *int64 DisplayTimeAfter *int64 Creator *string @@ -1074,6 +1079,9 @@ func findMemoField(callExpr *expr.Expr_Call, filter *MemoFilter) { } else if idExpr.Name == "order_by_pinned" { value := callExpr.Args[1].GetConstExpr().GetBoolValue() filter.OrderByPinned = value + } else if idExpr.Name == "order_by_time_asc" { + value := callExpr.Args[1].GetConstExpr().GetBoolValue() + filter.OrderByTimeAsc = value } else if idExpr.Name == "display_time_before" { displayTimeBefore := callExpr.Args[1].GetConstExpr().GetInt64Value() filter.DisplayTimeBefore = &displayTimeBefore diff --git a/store/db/mysql/memo.go b/store/db/mysql/memo.go index e45f551c..112aeb7d 100644 --- a/store/db/mysql/memo.go +++ b/store/db/mysql/memo.go @@ -116,12 +116,16 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if find.OrderByPinned { orders = append(orders, "`pinned` DESC") } - if find.OrderByUpdatedTs { - orders = append(orders, "`updated_ts` DESC") - } else { - orders = append(orders, "`created_ts` DESC") + order := "DESC" + if find.OrderByTimeAsc { + order = "ASC" } - orders = append(orders, "`id` DESC") + if find.OrderByUpdatedTs { + orders = append(orders, "`updated_ts` "+order) + } else { + orders = append(orders, "`created_ts` "+order) + } + orders = append(orders, "`id` "+order) if find.Random { orders = append(orders, "RAND()") } diff --git a/store/db/postgres/memo.go b/store/db/postgres/memo.go index 49e9e621..57cbd61c 100644 --- a/store/db/postgres/memo.go +++ b/store/db/postgres/memo.go @@ -107,12 +107,16 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if find.OrderByPinned { orders = append(orders, "pinned DESC") } - if find.OrderByUpdatedTs { - orders = append(orders, "updated_ts DESC") - } else { - orders = append(orders, "created_ts DESC") + order := "DESC" + if find.OrderByTimeAsc { + order = "ASC" } - orders = append(orders, "id DESC") + if find.OrderByUpdatedTs { + orders = append(orders, "updated_ts "+order) + } else { + orders = append(orders, "created_ts "+order) + } + orders = append(orders, "id "+order) if find.Random { orders = append(orders, "RAND()") } diff --git a/store/db/sqlite/memo.go b/store/db/sqlite/memo.go index 6f6bd713..6ebd856b 100644 --- a/store/db/sqlite/memo.go +++ b/store/db/sqlite/memo.go @@ -108,12 +108,16 @@ func (d *DB) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store.Memo if find.OrderByPinned { orderBy = append(orderBy, "`pinned` DESC") } - if find.OrderByUpdatedTs { - orderBy = append(orderBy, "`updated_ts` DESC") - } else { - orderBy = append(orderBy, "`created_ts` DESC") + order := "DESC" + if find.OrderByTimeAsc { + order = "ASC" } - orderBy = append(orderBy, "`id` DESC") + if find.OrderByUpdatedTs { + orderBy = append(orderBy, "`updated_ts` "+order) + } else { + orderBy = append(orderBy, "`created_ts` "+order) + } + orderBy = append(orderBy, "`id` "+order) if find.Random { orderBy = []string{"RANDOM()"} } diff --git a/store/memo.go b/store/memo.go index d4aa6d62..ce95412d 100644 --- a/store/memo.go +++ b/store/memo.go @@ -80,6 +80,8 @@ type FindMemo struct { Offset *int OrderByUpdatedTs bool OrderByPinned bool + + OrderByTimeAsc bool } type FindMemoPayload struct {