mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
fix: return pinned status after edit (#1629)
* stash * query pinned status after patch * eslint * refactor query * eslint * process specify case * add test * Update memo.go
This commit is contained in:
@ -268,6 +268,32 @@ func patchMemoRaw(ctx context.Context, tx *sql.Tx, patch *api.MemoPatch) (*memoR
|
|||||||
return nil, FormatError(err)
|
return nil, FormatError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pinnedQuery := `
|
||||||
|
SELECT
|
||||||
|
pinned
|
||||||
|
FROM memo_organizer
|
||||||
|
WHERE memo_id = ? AND user_id = ?
|
||||||
|
`
|
||||||
|
row, err := tx.QueryContext(ctx, pinnedQuery, patch.ID, memoRaw.CreatorID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, FormatError(err)
|
||||||
|
}
|
||||||
|
defer row.Close()
|
||||||
|
|
||||||
|
if !row.Next() {
|
||||||
|
memoRaw.Pinned = false
|
||||||
|
} else {
|
||||||
|
if err := row.Scan(
|
||||||
|
&memoRaw.Pinned,
|
||||||
|
); err != nil {
|
||||||
|
return nil, FormatError(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := row.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return &memoRaw, nil
|
return &memoRaw, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,20 @@ func TestMemoServer(t *testing.T) {
|
|||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, updatedContent, memo.Content)
|
require.Equal(t, updatedContent, memo.Content)
|
||||||
|
require.Equal(t, false, memo.Pinned)
|
||||||
|
memo, err = s.postMemosOrganizer(&api.MemoOrganizerUpsert{
|
||||||
|
MemoID: memo.ID,
|
||||||
|
UserID: user.ID,
|
||||||
|
Pinned: true,
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
memo, err = s.patchMemo(&api.MemoPatch{
|
||||||
|
ID: memo.ID,
|
||||||
|
Content: &updatedContent,
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, updatedContent, memo.Content)
|
||||||
|
require.Equal(t, true, memo.Pinned)
|
||||||
err = s.deleteMemo(&api.MemoDelete{
|
err = s.deleteMemo(&api.MemoDelete{
|
||||||
ID: memo.ID,
|
ID: memo.ID,
|
||||||
})
|
})
|
||||||
@ -154,3 +168,30 @@ func (s *TestingServer) deleteMemo(memoDelete *api.MemoDelete) error {
|
|||||||
_, err := s.delete(fmt.Sprintf("/api/memo/%d", memoDelete.ID), nil)
|
_, err := s.delete(fmt.Sprintf("/api/memo/%d", memoDelete.ID), nil)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *TestingServer) postMemosOrganizer(memosOrganizer *api.MemoOrganizerUpsert) (*api.Memo, error) {
|
||||||
|
rawData, err := json.Marshal(&memosOrganizer)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "failed to marshal memos organizer")
|
||||||
|
}
|
||||||
|
reader := bytes.NewReader(rawData)
|
||||||
|
body, err := s.post(fmt.Sprintf("/api/memo/%d/organizer", memosOrganizer.MemoID), reader, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
_, err = buf.ReadFrom(body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "fail to read response body")
|
||||||
|
}
|
||||||
|
|
||||||
|
type MemoOrganizerResponse struct {
|
||||||
|
Data *api.Memo `json:"data"`
|
||||||
|
}
|
||||||
|
res := new(MemoOrganizerResponse)
|
||||||
|
if err = json.Unmarshal(buf.Bytes(), res); err != nil {
|
||||||
|
return nil, errors.Wrap(err, "fail to unmarshal organizer memo create response")
|
||||||
|
}
|
||||||
|
return res.Data, err
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user