From 6bb6c043e5a12a5f165e468a30b2ee0cc97b52bd Mon Sep 17 00:00:00 2001 From: Athurg Gooth Date: Mon, 9 Oct 2023 21:18:47 +0800 Subject: [PATCH] feat: add support for ListMemoOrganizer (#2367) * Add support for ListMemoOrganizer * fix rows not close --- store/db/mysql/memo_organizer.go | 33 +++++++++++++++++++------------ store/db/sqlite/memo_organizer.go | 33 +++++++++++++++++++------------ store/driver.go | 2 +- store/memo_organizer.go | 16 ++++++++++++++- 4 files changed, 56 insertions(+), 28 deletions(-) diff --git a/store/db/mysql/memo_organizer.go b/store/db/mysql/memo_organizer.go index aeabb2ba3..441a04053 100644 --- a/store/db/mysql/memo_organizer.go +++ b/store/db/mysql/memo_organizer.go @@ -16,8 +16,8 @@ func (d *DB) UpsertMemoOrganizer(ctx context.Context, upsert *store.MemoOrganize return upsert, nil } -func (d *DB) GetMemoOrganizer(ctx context.Context, find *store.FindMemoOrganizer) (*store.MemoOrganizer, error) { - where, args := []string{}, []any{} +func (d *DB) ListMemoOrganizer(ctx context.Context, find *store.FindMemoOrganizer) ([]*store.MemoOrganizer, error) { + where, args := []string{"1 = 1"}, []any{} if find.MemoID != 0 { where = append(where, "`memo_id` = ?") args = append(args, find.MemoID) @@ -28,24 +28,31 @@ func (d *DB) GetMemoOrganizer(ctx context.Context, find *store.FindMemoOrganizer } query := "SELECT `memo_id`, `user_id`, `pinned` FROM `memo_organizer` WHERE " + strings.Join(where, " AND ") - row := d.db.QueryRowContext(ctx, query, args...) - if err := row.Err(); err != nil { + rows, err := d.db.QueryContext(ctx, query, args...) + if err != nil { return nil, err } - if row == nil { - return nil, nil + defer rows.Close() + + list := []*store.MemoOrganizer{} + for rows.Next() { + memoOrganizer := &store.MemoOrganizer{} + if err := rows.Scan( + &memoOrganizer.MemoID, + &memoOrganizer.UserID, + &memoOrganizer.Pinned, + ); err != nil { + return nil, err + } + + list = append(list, memoOrganizer) } - memoOrganizer := &store.MemoOrganizer{} - if err := row.Scan( - &memoOrganizer.MemoID, - &memoOrganizer.UserID, - &memoOrganizer.Pinned, - ); err != nil { + if err := rows.Err(); err != nil { return nil, err } - return memoOrganizer, nil + return list, nil } func (d *DB) DeleteMemoOrganizer(ctx context.Context, delete *store.DeleteMemoOrganizer) error { diff --git a/store/db/sqlite/memo_organizer.go b/store/db/sqlite/memo_organizer.go index 7aa2bc7b0..0d0167eaa 100644 --- a/store/db/sqlite/memo_organizer.go +++ b/store/db/sqlite/memo_organizer.go @@ -28,8 +28,8 @@ func (d *DB) UpsertMemoOrganizer(ctx context.Context, upsert *store.MemoOrganize return upsert, nil } -func (d *DB) GetMemoOrganizer(ctx context.Context, find *store.FindMemoOrganizer) (*store.MemoOrganizer, error) { - where, args := []string{}, []any{} +func (d *DB) ListMemoOrganizer(ctx context.Context, find *store.FindMemoOrganizer) ([]*store.MemoOrganizer, error) { + where, args := []string{"1 = 1"}, []any{} if find.MemoID != 0 { where = append(where, "memo_id = ?") args = append(args, find.MemoID) @@ -47,24 +47,31 @@ func (d *DB) GetMemoOrganizer(ctx context.Context, find *store.FindMemoOrganizer FROM memo_organizer WHERE %s `, strings.Join(where, " AND ")) - row := d.db.QueryRowContext(ctx, query, args...) - if err := row.Err(); err != nil { + rows, err := d.db.QueryContext(ctx, query, args...) + if err != nil { return nil, err } - if row == nil { - return nil, nil + defer rows.Close() + + list := []*store.MemoOrganizer{} + for rows.Next() { + memoOrganizer := &store.MemoOrganizer{} + if err := rows.Scan( + &memoOrganizer.MemoID, + &memoOrganizer.UserID, + &memoOrganizer.Pinned, + ); err != nil { + return nil, err + } + + list = append(list, memoOrganizer) } - memoOrganizer := &store.MemoOrganizer{} - if err := row.Scan( - &memoOrganizer.MemoID, - &memoOrganizer.UserID, - &memoOrganizer.Pinned, - ); err != nil { + if err := rows.Err(); err != nil { return nil, err } - return memoOrganizer, nil + return list, nil } func (d *DB) DeleteMemoOrganizer(ctx context.Context, delete *store.DeleteMemoOrganizer) error { diff --git a/store/driver.go b/store/driver.go index 26c6af5ba..7fe852fcf 100644 --- a/store/driver.go +++ b/store/driver.go @@ -41,7 +41,7 @@ type Driver interface { // MemoOrganizer model related methods. UpsertMemoOrganizer(ctx context.Context, upsert *MemoOrganizer) (*MemoOrganizer, error) - GetMemoOrganizer(ctx context.Context, find *FindMemoOrganizer) (*MemoOrganizer, error) + ListMemoOrganizer(ctx context.Context, find *FindMemoOrganizer) ([]*MemoOrganizer, error) DeleteMemoOrganizer(ctx context.Context, delete *DeleteMemoOrganizer) error // SystemSetting model related methods. diff --git a/store/memo_organizer.go b/store/memo_organizer.go index 5c153adae..dbf2618e8 100644 --- a/store/memo_organizer.go +++ b/store/memo_organizer.go @@ -2,6 +2,7 @@ package store import ( "context" + "errors" ) type MemoOrganizer struct { @@ -25,7 +26,20 @@ func (s *Store) UpsertMemoOrganizer(ctx context.Context, upsert *MemoOrganizer) } func (s *Store) GetMemoOrganizer(ctx context.Context, find *FindMemoOrganizer) (*MemoOrganizer, error) { - return s.driver.GetMemoOrganizer(ctx, find) + list, err := s.ListMemoOrganizer(ctx, find) + if err != nil { + return nil, err + } + + if len(list) == 0 { + return nil, errors.New("not found") + } + + return list[0], nil +} + +func (s *Store) ListMemoOrganizer(ctx context.Context, find *FindMemoOrganizer) ([]*MemoOrganizer, error) { + return s.driver.ListMemoOrganizer(ctx, find) } func (s *Store) DeleteMemoOrganizer(ctx context.Context, delete *DeleteMemoOrganizer) error {