mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
chore: order by updated ts in memo store (#1761)
This commit is contained in:
@ -299,6 +299,14 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
|
|||||||
findMemoMessage.Offset = &offset
|
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)
|
memoMessageList, err := s.Store.ListMemos(ctx, findMemoMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch memo list").SetInternal(err)
|
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 {
|
if err != nil {
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find memo list").SetInternal(err)
|
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find memo list").SetInternal(err)
|
||||||
}
|
}
|
||||||
|
memoResponseList := []*api.MemoResponse{}
|
||||||
createdTsList := []int64{}
|
for _, memoMessage := range memoMessageList {
|
||||||
for _, memo := range list {
|
memoResponse, err := s.composeMemoMessageToMemoResponse(ctx, memoMessage)
|
||||||
createdTsList = append(createdTsList, memo.CreatedTs)
|
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 {
|
g.GET("/memo/all", func(c echo.Context) error {
|
||||||
@ -469,6 +493,14 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
|
|||||||
normalStatus := store.Normal
|
normalStatus := store.Normal
|
||||||
findMemoMessage.RowStatus = &normalStatus
|
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)
|
memoMessageList, err := s.Store.ListMemos(ctx, findMemoMessage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return echo.NewHTTPError(http.StatusInternalServerError, "Failed to fetch all memo list").SetInternal(err)
|
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.
|
// Compose display ts.
|
||||||
memoResponse.DisplayTs = memoResponse.CreatedTs
|
memoResponse.DisplayTs = memoResponse.CreatedTs
|
||||||
// Find memo display with updated ts setting.
|
// Find memo display with updated ts setting.
|
||||||
memoDisplayWithUpdatedTsSetting, err := s.Store.FindSystemSetting(ctx, &api.SystemSettingFind{
|
memoDisplayWithUpdatedTs, err := s.getMemoDisplayWithUpdatedTsSettingValue(ctx)
|
||||||
Name: api.SystemSettingMemoDisplayWithUpdatedTsName,
|
if err != nil {
|
||||||
})
|
return nil, err
|
||||||
if err != nil && common.ErrorCode(err) != common.NotFound {
|
|
||||||
return nil, errors.Wrap(err, "failed to find system setting")
|
|
||||||
}
|
}
|
||||||
if memoDisplayWithUpdatedTsSetting != nil {
|
if memoDisplayWithUpdatedTs {
|
||||||
memoDisplayWithUpdatedTs := false
|
memoResponse.DisplayTs = memoResponse.UpdatedTs
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
relationList := []*api.MemoRelation{}
|
relationList := []*api.MemoRelation{}
|
||||||
@ -662,3 +685,20 @@ func (s *Server) composeMemoMessageToMemoResponse(ctx context.Context, memoMessa
|
|||||||
|
|
||||||
return memoResponse, nil
|
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
|
VisibilityList []Visibility
|
||||||
|
|
||||||
// Pagination
|
// Pagination
|
||||||
Limit *int
|
Limit *int
|
||||||
Offset *int
|
Offset *int
|
||||||
|
OrderByUpdatedTs bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateMemoMessage struct {
|
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, ",")))
|
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 := `
|
query := `
|
||||||
SELECT
|
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
|
memo_resource ON memo.id = memo_resource.memo_id
|
||||||
WHERE ` + strings.Join(where, " AND ") + `
|
WHERE ` + strings.Join(where, " AND ") + `
|
||||||
GROUP BY memo.id
|
GROUP BY memo.id
|
||||||
ORDER BY pinned DESC, memo.created_ts DESC
|
ORDER BY ` + strings.Join(orders, ", ") + `
|
||||||
`
|
`
|
||||||
if find.Limit != nil {
|
if find.Limit != nil {
|
||||||
query = fmt.Sprintf("%s LIMIT %d", query, *find.Limit)
|
query = fmt.Sprintf("%s LIMIT %d", query, *find.Limit)
|
||||||
|
Reference in New Issue
Block a user