mirror of
https://github.com/nkanaev/yarr.git
synced 2026-06-15 12:35:04 +00:00
rename Storage struct to SQLiteStorage
This commit is contained in:
@@ -24,7 +24,7 @@ type CreateFeedParams struct {
|
|||||||
FolderID *int64
|
FolderID *int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) CreateFeed(params CreateFeedParams) *Feed {
|
func (s *SQLiteStorage) CreateFeed(params CreateFeedParams) *Feed {
|
||||||
title := params.Title
|
title := params.Title
|
||||||
if title == "" {
|
if title == "" {
|
||||||
title = params.FeedLink
|
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))
|
result, err := s.db.Exec(`delete from feeds where id = :id`, sql.Named("id", feedId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
@@ -80,7 +80,7 @@ type UpdateFeedParams struct {
|
|||||||
Icon Nullable[[]byte]
|
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(`
|
_, err := s.db.Exec(`
|
||||||
update feeds set
|
update feeds set
|
||||||
title = coalesce(:title, title),
|
title = coalesce(:title, title),
|
||||||
@@ -104,7 +104,7 @@ func (s *Storage) UpdateFeed(feedId int64, params UpdateFeedParams) (bool, error
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) ListFeeds() []Feed {
|
func (s *SQLiteStorage) ListFeeds() []Feed {
|
||||||
result := make([]Feed, 0)
|
result := make([]Feed, 0)
|
||||||
rows, err := s.db.Query(`
|
rows, err := s.db.Query(`
|
||||||
select id, folder_id, title, description, link, feed_link,
|
select id, folder_id, title, description, link, feed_link,
|
||||||
@@ -136,7 +136,7 @@ func (s *Storage) ListFeeds() []Feed {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) GetFeed(id int64) *Feed {
|
func (s *SQLiteStorage) GetFeed(id int64) *Feed {
|
||||||
var f Feed
|
var f Feed
|
||||||
err := s.db.QueryRow(`
|
err := s.db.QueryRow(`
|
||||||
select
|
select
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ type FeedState struct {
|
|||||||
HTTPEtag string
|
HTTPEtag string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) ListFeedStates() ([]FeedState, error) {
|
func (s *SQLiteStorage) ListFeedStates() ([]FeedState, error) {
|
||||||
rows, err := s.db.Query(`
|
rows, err := s.db.Query(`
|
||||||
select
|
select
|
||||||
feed_id
|
feed_id
|
||||||
@@ -46,7 +46,7 @@ func (s *Storage) ListFeedStates() ([]FeedState, error) {
|
|||||||
return states, nil
|
return states, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) GetFeedState(feedID int64) (*FeedState, error) {
|
func (s *SQLiteStorage) GetFeedState(feedID int64) (*FeedState, error) {
|
||||||
var state FeedState
|
var state FeedState
|
||||||
err := s.db.QueryRow(`
|
err := s.db.QueryRow(`
|
||||||
select
|
select
|
||||||
@@ -79,7 +79,7 @@ type UpdateFeedStateParams struct {
|
|||||||
HTTPEtag *string
|
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
|
lastError := params.LastError
|
||||||
if lastError != nil && *lastError == "" {
|
if lastError != nil && *lastError == "" {
|
||||||
lastError = nil
|
lastError = nil
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ type Folder struct {
|
|||||||
IsExpanded bool `json:"is_expanded"`
|
IsExpanded bool `json:"is_expanded"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) CreateFolder(title string) *Folder {
|
func (s *SQLiteStorage) CreateFolder(title string) *Folder {
|
||||||
expanded := true
|
expanded := true
|
||||||
row := s.db.QueryRow(`
|
row := s.db.QueryRow(`
|
||||||
insert into folders (title, is_expanded) values (:title, :is_expanded)
|
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}
|
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))
|
_, err := s.db.Exec(`delete from folders where id = :id`, sql.Named("id", folderId))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
@@ -43,7 +43,7 @@ type UpdateFolderParams struct {
|
|||||||
IsExpanded *bool
|
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(`
|
_, err := s.db.Exec(`
|
||||||
update folders set
|
update folders set
|
||||||
title = coalesce(:title, title),
|
title = coalesce(:title, title),
|
||||||
@@ -61,7 +61,7 @@ func (s *Storage) UpdateFolder(folderId int64, params UpdateFolderParams) (bool,
|
|||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) ListFolders() []Folder {
|
func (s *SQLiteStorage) ListFolders() []Folder {
|
||||||
result := make([]Folder, 0)
|
result := make([]Folder, 0)
|
||||||
rows, err := s.db.Query(`
|
rows, err := s.db.Query(`
|
||||||
select id, title, is_expanded
|
select id, title, is_expanded
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ func (list ItemList) Swap(i, j int) {
|
|||||||
list[i], list[j] = list[j], list[i]
|
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()
|
tx, err := s.db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
@@ -241,7 +241,7 @@ func listQueryPredicate(filter ItemFilter, newestFirst bool) (string, []any) {
|
|||||||
return predicate, args
|
return predicate, args
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) CountItems() int {
|
func (s *SQLiteStorage) CountItems() int {
|
||||||
var count int
|
var count int
|
||||||
err := s.db.QueryRow(`select count(*) from items`).Scan(&count)
|
err := s.db.QueryRow(`select count(*) from items`).Scan(&count)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -251,7 +251,7 @@ func (s *Storage) CountItems() int {
|
|||||||
return count
|
return count
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) ListItems(
|
func (s *SQLiteStorage) ListItems(
|
||||||
filter ItemFilter,
|
filter ItemFilter,
|
||||||
limit int,
|
limit int,
|
||||||
newestFirst bool,
|
newestFirst bool,
|
||||||
@@ -305,7 +305,7 @@ func (s *Storage) ListItems(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) GetItem(id int64) *Item {
|
func (s *SQLiteStorage) GetItem(id int64) *Item {
|
||||||
i := &Item{}
|
i := &Item{}
|
||||||
err := s.db.QueryRow(`
|
err := s.db.QueryRow(`
|
||||||
select
|
select
|
||||||
@@ -324,7 +324,7 @@ func (s *Storage) GetItem(id int64) *Item {
|
|||||||
return i
|
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`,
|
_, err := s.db.Exec(`update items set status = :status where id = :id`,
|
||||||
sql.Named("status", status),
|
sql.Named("status", status),
|
||||||
sql.Named("id", item_id),
|
sql.Named("id", item_id),
|
||||||
@@ -332,7 +332,7 @@ func (s *Storage) UpdateItemStatus(item_id int64, status ItemStatus) bool {
|
|||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) MarkItemsRead(filter MarkFilter) bool {
|
func (s *SQLiteStorage) MarkItemsRead(filter MarkFilter) bool {
|
||||||
predicate, args := listQueryPredicate(ItemFilter{
|
predicate, args := listQueryPredicate(ItemFilter{
|
||||||
FolderID: filter.FolderID,
|
FolderID: filter.FolderID,
|
||||||
FeedID: filter.FeedID,
|
FeedID: filter.FeedID,
|
||||||
@@ -355,7 +355,7 @@ type FeedStat struct {
|
|||||||
StarredCount int64 `json:"starred"`
|
StarredCount int64 `json:"starred"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) FeedStats() []FeedStat {
|
func (s *SQLiteStorage) FeedStats() []FeedStat {
|
||||||
result := make([]FeedStat, 0)
|
result := make([]FeedStat, 0)
|
||||||
rows, err := s.db.Query(fmt.Sprintf(`
|
rows, err := s.db.Query(fmt.Sprintf(`
|
||||||
select
|
select
|
||||||
@@ -388,7 +388,7 @@ var (
|
|||||||
// - Never delete starred entries.
|
// - Never delete starred entries.
|
||||||
// - Keep at least 50 latest items for each feed.
|
// - 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.
|
// - 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(`
|
result, err := s.db.Exec(`
|
||||||
delete from items
|
delete from items
|
||||||
where id in (
|
where id in (
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ type testItemScope struct {
|
|||||||
folder1, folder2 *Folder
|
folder1, folder2 *Folder
|
||||||
}
|
}
|
||||||
|
|
||||||
func testItemsSetup(db *Storage) testItemScope {
|
func testItemsSetup(db *SQLiteStorage) testItemScope {
|
||||||
folder1 := db.CreateFolder("folder1")
|
folder1 := db.CreateFolder("folder1")
|
||||||
folder2 := db.CreateFolder("folder2")
|
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{}
|
i := &Item{}
|
||||||
err := db.db.QueryRow(`
|
err := db.db.QueryRow(`
|
||||||
select
|
select
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ func settingsDefaults() Settings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) GetSettings() Settings {
|
func (s *SQLiteStorage) GetSettings() Settings {
|
||||||
result := settingsDefaults()
|
result := settingsDefaults()
|
||||||
rows, err := s.db.Query(`select key, val from settings;`)
|
rows, err := s.db.Query(`select key, val from settings;`)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -102,7 +102,7 @@ type UpdateSettingsParams struct {
|
|||||||
Language *string `json:"language"`
|
Language *string `json:"language"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Storage) UpdateSettings(params UpdateSettingsParams) bool {
|
func (s *SQLiteStorage) UpdateSettings(params UpdateSettingsParams) bool {
|
||||||
tx, err := s.db.Begin()
|
tx, err := s.db.Begin()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print(err)
|
log.Print(err)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ func init() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
type Storage struct {
|
type SQLiteStorage struct {
|
||||||
db *sql.DB
|
db *sql.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ func SetNullable[T any](v *T) Nullable[T] {
|
|||||||
return Nullable[T]{Set: true, Value: v}
|
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 {
|
if pos := strings.IndexRune(path, '?'); pos == -1 {
|
||||||
params := "_journal=WAL&_sync=NORMAL&_busy_timeout=5000&cache=shared"
|
params := "_journal=WAL&_sync=NORMAL&_busy_timeout=5000&cache=shared"
|
||||||
log.Printf("opening db with params: %s", params)
|
log.Printf("opening db with params: %s", params)
|
||||||
@@ -45,9 +45,9 @@ func New(path string) (*Storage, error) {
|
|||||||
if err = migrate(db); err != nil {
|
if err = migrate(db); err != nil {
|
||||||
return nil, err
|
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()
|
return s.db.Close()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func testDB() *Storage {
|
func testDB() *SQLiteStorage {
|
||||||
log.SetOutput(io.Discard)
|
log.SetOutput(io.Discard)
|
||||||
db, err := New(":memory:")
|
db, err := New(":memory:")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user