mirror of
https://github.com/usememos/memos.git
synced 2025-02-23 12:54:25 +08:00
chore: order by updated ts in memo store (#1761)
This commit is contained in:
parent
e0e59c5831
commit
beb4d8ccb9
2 changed files with 70 additions and 23 deletions
|
@ -299,6 +299,14 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
|
|||
findMemoMessage.Offset = &offset
|
||||
}
|
||||
|
||||
memoDisplayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to get memo display with updated ts setting value").SetInternal(err)
|
||||
}
|
||||
if memoDisplayWithUpdatedTs {
|
||||
findMemoMessage.OrderByUpdatedTs = true
|
||||
}
|
||||
|
||||
memoMessageList, err := s.Store.ListMemos(ctx, findMemoMessage)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch memo list").SetInternal(err)
|
||||
|
@ -411,16 +419,32 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
|
|||
}
|
||||
}
|
||||
|
||||
list, err := s.Store.ListMemos(ctx, findMemoMessage)
|
||||
memoDisplayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to get memo display with updated ts setting value").SetInternal(err)
|
||||
}
|
||||
if memoDisplayWithUpdatedTs {
|
||||
findMemoMessage.OrderByUpdatedTs = true
|
||||
}
|
||||
|
||||
memoMessageList, err := s.Store.ListMemos(ctx, findMemoMessage)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find memo list").SetInternal(err)
|
||||
}
|
||||
|
||||
createdTsList := []int64{}
|
||||
for _, memo := range list {
|
||||
createdTsList = append(createdTsList, memo.CreatedTs)
|
||||
memoResponseList := []*api.MemoResponse{}
|
||||
for _, memoMessage := range memoMessageList {
|
||||
memoResponse, err := s.composeMemoMessageToMemoResponse(ctx, memoMessage)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to compose memo response").SetInternal(err)
|
||||
}
|
||||
memoResponseList = append(memoResponseList, memoResponse)
|
||||
}
|
||||
return c.JSON(http.StatusOK, composeResponse(createdTsList))
|
||||
|
||||
displayTsList := []int64{}
|
||||
for _, memo := range memoResponseList {
|
||||
displayTsList = append(displayTsList, memo.DisplayTs)
|
||||
}
|
||||
return c.JSON(http.StatusOK, composeResponse(displayTsList))
|
||||
})
|
||||
|
||||
g.GET("/memo/all", func(c echo.Context) error {
|
||||
|
@ -469,6 +493,14 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
|
|||
normalStatus := store.Normal
|
||||
findMemoMessage.RowStatus = &normalStatus
|
||||
|
||||
memoDisplayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to get memo display with updated ts setting value").SetInternal(err)
|
||||
}
|
||||
if memoDisplayWithUpdatedTs {
|
||||
findMemoMessage.OrderByUpdatedTs = true
|
||||
}
|
||||
|
||||
memoMessageList, err := s.Store.ListMemos(ctx, findMemoMessage)
|
||||
if err != nil {
|
||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch all memo list").SetInternal(err)
|
||||
|
@ -625,21 +657,12 @@ func (s *Server) composeMemoMessageToMemoResponse(ctx context.Context, memoMessa
|
|||
// Compose display ts.
|
||||
memoResponse.DisplayTs = memoResponse.CreatedTs
|
||||
// Find memo display with updated ts setting.
|
||||
memoDisplayWithUpdatedTsSetting, err := s.Store.FindSystemSetting(ctx, &api.SystemSettingFind{
|
||||
Name: api.SystemSettingMemoDisplayWithUpdatedTsName,
|
||||
})
|
||||
if err != nil && common.ErrorCode(err) != common.NotFound {
|
||||
return nil, errors.Wrap(err, "failed to find system setting")
|
||||
memoDisplayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if memoDisplayWithUpdatedTsSetting != nil {
|
||||
memoDisplayWithUpdatedTs := false
|
||||
err = json.Unmarshal([]byte(memoDisplayWithUpdatedTsSetting.Value), &memoDisplayWithUpdatedTs)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to unmarshal system setting value")
|
||||
}
|
||||
if memoDisplayWithUpdatedTs {
|
||||
memoResponse.DisplayTs = memoResponse.UpdatedTs
|
||||
}
|
||||
if memoDisplayWithUpdatedTs {
|
||||
memoResponse.DisplayTs = memoResponse.UpdatedTs
|
||||
}
|
||||
|
||||
relationList := []*api.MemoRelation{}
|
||||
|
@ -662,3 +685,20 @@ func (s *Server) composeMemoMessageToMemoResponse(ctx context.Context, memoMessa
|
|||
|
||||
return memoResponse, nil
|
||||
}
|
||||
|
||||
func (s *Server) getMemoDisplayWithUpdatedTsSettingValue(ctx context.Context) (bool, error) {
|
||||
memoDisplayWithUpdatedTsSetting, err := s.Store.FindSystemSetting(ctx, &api.SystemSettingFind{
|
||||
Name: api.SystemSettingMemoDisplayWithUpdatedTsName,
|
||||
})
|
||||
if err != nil && common.ErrorCode(err) != common.NotFound {
|
||||
return false, errors.Wrap(err, "failed to find system setting")
|
||||
}
|
||||
memoDisplayWithUpdatedTs := false
|
||||
if memoDisplayWithUpdatedTsSetting != nil {
|
||||
err = json.Unmarshal([]byte(memoDisplayWithUpdatedTsSetting.Value), &memoDisplayWithUpdatedTs)
|
||||
if err != nil {
|
||||
return false, errors.Wrap(err, "failed to unmarshal system setting value")
|
||||
}
|
||||
}
|
||||
return memoDisplayWithUpdatedTs, nil
|
||||
}
|
||||
|
|
|
@ -67,8 +67,9 @@ type FindMemoMessage struct {
|
|||
VisibilityList []Visibility
|
||||
|
||||
// Pagination
|
||||
Limit *int
|
||||
Offset *int
|
||||
Limit *int
|
||||
Offset *int
|
||||
OrderByUpdatedTs bool
|
||||
}
|
||||
|
||||
type UpdateMemoMessage struct {
|
||||
|
@ -254,6 +255,12 @@ func listMemos(ctx context.Context, tx *sql.Tx, find *FindMemoMessage) ([]*MemoM
|
|||
}
|
||||
where = append(where, fmt.Sprintf("memo.visibility in (%s)", strings.Join(list, ",")))
|
||||
}
|
||||
orders := []string{"pinned DESC"}
|
||||
if find.OrderByUpdatedTs {
|
||||
orders = append(orders, "updated_ts DESC")
|
||||
} else {
|
||||
orders = append(orders, "created_ts DESC")
|
||||
}
|
||||
|
||||
query := `
|
||||
SELECT
|
||||
|
@ -284,7 +291,7 @@ func listMemos(ctx context.Context, tx *sql.Tx, find *FindMemoMessage) ([]*MemoM
|
|||
memo_resource ON memo.id = memo_resource.memo_id
|
||||
WHERE ` + strings.Join(where, " AND ") + `
|
||||
GROUP BY memo.id
|
||||
ORDER BY pinned DESC, memo.created_ts DESC
|
||||
ORDER BY ` + strings.Join(orders, ", ") + `
|
||||
`
|
||||
if find.Limit != nil {
|
||||
query = fmt.Sprintf("%s LIMIT %d", query, *find.Limit)
|
||||
|
|
Loading…
Reference in a new issue