diff --git a/src/storage/sqlite/feed.go b/src/storage/sqlite/feed.go index def6817..5df9498 100644 --- a/src/storage/sqlite/feed.go +++ b/src/storage/sqlite/feed.go @@ -24,7 +24,7 @@ type CreateFeedParams struct { FolderID *int64 } -func (s *Storage) CreateFeed(params CreateFeedParams) *Feed { +func (s *SQLiteStorage) CreateFeed(params CreateFeedParams) *Feed { title := params.Title if title == "" { title = params.FeedLink @@ -57,7 +57,7 @@ func (s *Storage) CreateFeed(params CreateFeedParams) *Feed { } } -func (s *Storage) DeleteFeed(feedId int64) bool { +func (s *SQLiteStorage) DeleteFeed(feedId int64) bool { result, err := s.db.Exec(`delete from feeds where id = :id`, sql.Named("id", feedId)) if err != nil { log.Print(err) @@ -80,7 +80,7 @@ type UpdateFeedParams struct { Icon Nullable[[]byte] } -func (s *Storage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error) { +func (s *SQLiteStorage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error) { _, err := s.db.Exec(` update feeds set title = coalesce(:title, title), @@ -104,7 +104,7 @@ func (s *Storage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error return true, nil } -func (s *Storage) ListFeeds() []Feed { +func (s *SQLiteStorage) ListFeeds() []Feed { result := make([]Feed, 0) rows, err := s.db.Query(` select id, folder_id, title, description, link, feed_link, @@ -136,7 +136,7 @@ func (s *Storage) ListFeeds() []Feed { return result } -func (s *Storage) GetFeed(id int64) *Feed { +func (s *SQLiteStorage) GetFeed(id int64) *Feed { var f Feed err := s.db.QueryRow(` select diff --git a/src/storage/sqlite/feedstate.go b/src/storage/sqlite/feedstate.go index deeb9b7..60e4852 100644 --- a/src/storage/sqlite/feedstate.go +++ b/src/storage/sqlite/feedstate.go @@ -13,7 +13,7 @@ type FeedState struct { HTTPEtag string } -func (s *Storage) ListFeedStates() ([]FeedState, error) { +func (s *SQLiteStorage) ListFeedStates() ([]FeedState, error) { rows, err := s.db.Query(` select feed_id @@ -46,7 +46,7 @@ func (s *Storage) ListFeedStates() ([]FeedState, error) { return states, nil } -func (s *Storage) GetFeedState(feedID int64) (*FeedState, error) { +func (s *SQLiteStorage) GetFeedState(feedID int64) (*FeedState, error) { var state FeedState err := s.db.QueryRow(` select @@ -79,7 +79,7 @@ type UpdateFeedStateParams struct { HTTPEtag *string } -func (s *Storage) UpdateFeedState(feedID int64, params UpdateFeedStateParams) (bool, error) { +func (s *SQLiteStorage) UpdateFeedState(feedID int64, params UpdateFeedStateParams) (bool, error) { lastError := params.LastError if lastError != nil && *lastError == "" { lastError = nil diff --git a/src/storage/sqlite/folder.go b/src/storage/sqlite/folder.go index b8ad02d..ac3eedf 100644 --- a/src/storage/sqlite/folder.go +++ b/src/storage/sqlite/folder.go @@ -11,7 +11,7 @@ type Folder struct { IsExpanded bool `json:"is_expanded"` } -func (s *Storage) CreateFolder(title string) *Folder { +func (s *SQLiteStorage) CreateFolder(title string) *Folder { expanded := true row := s.db.QueryRow(` insert into folders (title, is_expanded) values (:title, :is_expanded) @@ -30,7 +30,7 @@ func (s *Storage) CreateFolder(title string) *Folder { return &Folder{Id: id, Title: title, IsExpanded: expanded} } -func (s *Storage) DeleteFolder(folderId int64) bool { +func (s *SQLiteStorage) DeleteFolder(folderId int64) bool { _, err := s.db.Exec(`delete from folders where id = :id`, sql.Named("id", folderId)) if err != nil { log.Print(err) @@ -43,7 +43,7 @@ type UpdateFolderParams struct { IsExpanded *bool } -func (s *Storage) UpdateFolder(folderId int64, params UpdateFolderParams) (bool, error) { +func (s *SQLiteStorage) UpdateFolder(folderId int64, params UpdateFolderParams) (bool, error) { _, err := s.db.Exec(` update folders set title = coalesce(:title, title), @@ -61,7 +61,7 @@ func (s *Storage) UpdateFolder(folderId int64, params UpdateFolderParams) (bool, return true, nil } -func (s *Storage) ListFolders() []Folder { +func (s *SQLiteStorage) ListFolders() []Folder { result := make([]Folder, 0) rows, err := s.db.Query(` select id, title, is_expanded diff --git a/src/storage/sqlite/item.go b/src/storage/sqlite/item.go index 4524c99..a6c762f 100644 --- a/src/storage/sqlite/item.go +++ b/src/storage/sqlite/item.go @@ -116,7 +116,7 @@ func (list ItemList) Swap(i, j int) { list[i], list[j] = list[j], list[i] } -func (s *Storage) CreateItems(items []Item) bool { +func (s *SQLiteStorage) CreateItems(items []Item) bool { tx, err := s.db.Begin() if err != nil { log.Print(err) @@ -241,7 +241,7 @@ func listQueryPredicate(filter ItemFilter, newestFirst bool) (string, []any) { return predicate, args } -func (s *Storage) CountItems() int { +func (s *SQLiteStorage) CountItems() int { var count int err := s.db.QueryRow(`select count(*) from items`).Scan(&count) if err != nil { @@ -251,7 +251,7 @@ func (s *Storage) CountItems() int { return count } -func (s *Storage) ListItems( +func (s *SQLiteStorage) ListItems( filter ItemFilter, limit int, newestFirst bool, @@ -305,7 +305,7 @@ func (s *Storage) ListItems( return result } -func (s *Storage) GetItem(id int64) *Item { +func (s *SQLiteStorage) GetItem(id int64) *Item { i := &Item{} err := s.db.QueryRow(` select @@ -324,7 +324,7 @@ func (s *Storage) GetItem(id int64) *Item { return i } -func (s *Storage) UpdateItemStatus(item_id int64, status ItemStatus) bool { +func (s *SQLiteStorage) UpdateItemStatus(item_id int64, status ItemStatus) bool { _, err := s.db.Exec(`update items set status = :status where id = :id`, sql.Named("status", status), sql.Named("id", item_id), @@ -332,7 +332,7 @@ func (s *Storage) UpdateItemStatus(item_id int64, status ItemStatus) bool { return err == nil } -func (s *Storage) MarkItemsRead(filter MarkFilter) bool { +func (s *SQLiteStorage) MarkItemsRead(filter MarkFilter) bool { predicate, args := listQueryPredicate(ItemFilter{ FolderID: filter.FolderID, FeedID: filter.FeedID, @@ -355,7 +355,7 @@ type FeedStat struct { StarredCount int64 `json:"starred"` } -func (s *Storage) FeedStats() []FeedStat { +func (s *SQLiteStorage) FeedStats() []FeedStat { result := make([]FeedStat, 0) rows, err := s.db.Query(fmt.Sprintf(` select @@ -388,7 +388,7 @@ var ( // - Never delete starred entries. // - Keep at least 50 latest items for each feed. // - Delete entries older than 90 days relative to the latest arrived item in the same feed. -func (s *Storage) DeleteOldItems() { +func (s *SQLiteStorage) DeleteOldItems() { result, err := s.db.Exec(` delete from items where id in ( diff --git a/src/storage/sqlite/item_test.go b/src/storage/sqlite/item_test.go index 6356534..06a5180 100644 --- a/src/storage/sqlite/item_test.go +++ b/src/storage/sqlite/item_test.go @@ -35,7 +35,7 @@ type testItemScope struct { folder1, folder2 *Folder } -func testItemsSetup(db *Storage) testItemScope { +func testItemsSetup(db *SQLiteStorage) testItemScope { folder1 := db.CreateFolder("folder1") folder2 := db.CreateFolder("folder2") @@ -115,7 +115,7 @@ func testItemsSetup(db *Storage) testItemScope { } } -func getItem(db *Storage, guid string) *Item { +func getItem(db *SQLiteStorage, guid string) *Item { i := &Item{} err := db.db.QueryRow(` select diff --git a/src/storage/sqlite/settings.go b/src/storage/sqlite/settings.go index 4155db3..7fdce0e 100644 --- a/src/storage/sqlite/settings.go +++ b/src/storage/sqlite/settings.go @@ -49,7 +49,7 @@ func settingsDefaults() Settings { } } -func (s *Storage) GetSettings() Settings { +func (s *SQLiteStorage) GetSettings() Settings { result := settingsDefaults() rows, err := s.db.Query(`select key, val from settings;`) if err != nil { @@ -102,7 +102,7 @@ type UpdateSettingsParams struct { Language *string `json:"language"` } -func (s *Storage) UpdateSettings(params UpdateSettingsParams) bool { +func (s *SQLiteStorage) UpdateSettings(params UpdateSettingsParams) bool { tx, err := s.db.Begin() if err != nil { log.Print(err) diff --git a/src/storage/sqlite/storage.go b/src/storage/sqlite/storage.go index 37c108b..817e343 100644 --- a/src/storage/sqlite/storage.go +++ b/src/storage/sqlite/storage.go @@ -17,7 +17,7 @@ func init() { }) } -type Storage struct { +type SQLiteStorage struct { db *sql.DB } @@ -30,7 +30,7 @@ func SetNullable[T any](v *T) Nullable[T] { return Nullable[T]{Set: true, Value: v} } -func New(path string) (*Storage, error) { +func New(path string) (*SQLiteStorage, error) { if pos := strings.IndexRune(path, '?'); pos == -1 { params := "_journal=WAL&_sync=NORMAL&_busy_timeout=5000&cache=shared" log.Printf("opening db with params: %s", params) @@ -45,9 +45,9 @@ func New(path string) (*Storage, error) { if err = migrate(db); err != nil { return nil, err } - return &Storage{db: db}, nil + return &SQLiteStorage{db: db}, nil } -func (s *Storage) Close() error { +func (s *SQLiteStorage) Close() error { return s.db.Close() } diff --git a/src/storage/sqlite/storage_test.go b/src/storage/sqlite/storage_test.go index a9a7b04..7e996ec 100644 --- a/src/storage/sqlite/storage_test.go +++ b/src/storage/sqlite/storage_test.go @@ -7,7 +7,7 @@ import ( "testing" ) -func testDB() *Storage { +func testDB() *SQLiteStorage { log.SetOutput(io.Discard) db, err := New(":memory:") if err != nil {