chore: update memo list api (#350)

This commit is contained in:
boojack 2022-10-27 22:02:42 +08:00 committed by GitHub
parent bdf6d4d42a
commit 94df09c8c0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 26 additions and 12 deletions

View file

@ -28,3 +28,10 @@ func ValidateEmail(email string) bool {
func GenUUID() string {
return uuid.New().String()
}
func Min(x, y int) int {
if x < y {
return x
}
return y
}

View file

@ -193,8 +193,18 @@ func (s *Server) registerMemoRoutes(g *echo.Group) {
}
sort.Slice(list, func(i, j int) bool {
return list[i].DisplayTs > list[j].DisplayTs
return list[i].DisplayTs < list[j].DisplayTs
})
sort.Slice(list, func(i, j int) bool {
if !list[i].Pinned && list[j].Pinned {
return false
}
return true
})
if memoFind.Limit != 0 {
list = list[memoFind.Offset:common.Min(len(list), memoFind.Offset+memoFind.Limit)]
}
c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8)
if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(list)); err != nil {

View file

@ -329,14 +329,6 @@ func findMemoRawList(ctx context.Context, tx *sql.Tx, find *api.MemoFind) ([]*me
where = append(where, fmt.Sprintf("visibility in (%s)", strings.Join(list, ",")))
}
pagination := ""
if find.Limit > 0 {
pagination = fmt.Sprintf("%s LIMIT %d", pagination, find.Limit)
if find.Offset > 0 {
pagination = fmt.Sprintf("%s OFFSET %d", pagination, find.Offset)
}
}
query := `
SELECT
id,
@ -349,7 +341,7 @@ func findMemoRawList(ctx context.Context, tx *sql.Tx, find *api.MemoFind) ([]*me
FROM memo
WHERE ` + strings.Join(where, " AND ") + `
ORDER BY created_ts DESC
` + pagination
`
rows, err := tx.QueryContext(ctx, query, args...)
if err != nil {
return nil, FormatError(err)

View file

@ -78,6 +78,9 @@ export function getMemoList(memoFind?: MemoFind) {
if (memoFind?.rowStatus) {
queryList.push(`rowStatus=${memoFind.rowStatus}`);
}
if (memoFind?.pinned) {
queryList.push(`pinned=${memoFind.pinned}`);
}
if (memoFind?.offset) {
queryList.push(`offset=${memoFind.offset}`);
}

View file

@ -1,3 +1,4 @@
import { uniqBy } from "lodash";
import * as api from "../helpers/api";
import { createMemo, deleteMemo, patchMemo, setIsFetching, setMemos, setTags } from "../store/modules/memo";
import store from "../store";
@ -35,7 +36,7 @@ const memoService = {
store.dispatch(setMemos([]));
}
const memos = memoService.getState().memos;
store.dispatch(setMemos(memos.concat(fetchedMemos)));
store.dispatch(setMemos(uniqBy(memos.concat(fetchedMemos), "id")));
store.dispatch(setIsFetching(false));
return fetchedMemos;

View file

@ -18,7 +18,7 @@ const memoSlice = createSlice({
setMemos: (state, action: PayloadAction<Memo[]>) => {
return {
...state,
memos: action.payload.filter((m) => m.rowStatus === "NORMAL"),
memos: action.payload,
};
},
createMemo: (state, action: PayloadAction<Memo>) => {

View file

@ -37,6 +37,7 @@ interface MemoPatch {
interface MemoFind {
creatorId?: UserId;
rowStatus?: RowStatus;
pinned?: boolean;
visibility?: Visibility;
offset?: number;
limit?: number;