Skip to content

Commit

Permalink
chore: order by updated ts in memo store (#1761)
Browse files Browse the repository at this point in the history
  • Loading branch information
boojack authored May 27, 2023
1 parent e0e59c5 commit beb4d8c
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 22 deletions.
78 changes: 59 additions & 19 deletions server/memo.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
}
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)
}

createdTsList := []int64{}
for _, memo := range list {
createdTsList = append(createdTsList, memo.CreatedTs)
displayTsList := []int64{}
for _, memo := range memoResponseList {
displayTsList = append(displayTsList, memo.DisplayTs)
}
return c.JSON(http.StatusOK, composeResponse(createdTsList))
return c.JSON(http.StatusOK, composeResponse(displayTsList))
})

g.GET("/memo/all", func(c echo.Context) error {
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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{}
Expand All @@ -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
}
13 changes: 10 additions & 3 deletions store/memo.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,9 @@ type FindMemoMessage struct {
VisibilityList []Visibility

// Pagination
Limit *int
Offset *int
Limit *int
Offset *int
OrderByUpdatedTs bool
}

type UpdateMemoMessage struct {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit beb4d8c

Please sign in to comment.