diff --git a/store/memo.go b/store/memo.go index fd30dff6..65ff91f2 100644 --- a/store/memo.go +++ b/store/memo.go @@ -268,6 +268,32 @@ func patchMemoRaw(ctx context.Context, tx *sql.Tx, patch *api.MemoPatch) (*memoR 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 } diff --git a/test/server/memo_test.go b/test/server/memo_test.go index a8562b95..87e55104 100644 --- a/test/server/memo_test.go +++ b/test/server/memo_test.go @@ -43,6 +43,20 @@ func TestMemoServer(t *testing.T) { }) require.NoError(t, err) 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{ 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) 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 +}