diff --git a/main.go b/main.go index 0152472..20ba56b 100644 --- a/main.go +++ b/main.go @@ -23,7 +23,7 @@ func main() { store.RenameFeed(feed.Id, "newtitle") log.Print(store.ListFeeds()) */ - /* + /*; items := make([]storage.Item, 3, 3) items = append(items, storage.Item{ Id: "id", @@ -65,5 +65,6 @@ func main() { Image: "image", }) log.Print(store.CreateItems(items)) + log.Print(store.ListItems()) */ } diff --git a/storage/item.go b/storage/item.go index b507580..d62b1c5 100644 --- a/storage/item.go +++ b/storage/item.go @@ -1,5 +1,7 @@ package storage +import "fmt" + type ItemStatus int const ( @@ -56,3 +58,61 @@ func (s *Storage) CreateItems(items []Item) bool { } return true } + +func itemQuery(s *Storage, cond string, v ...interface{}) []Item { + result := make([]Item, 0, 0) + query := fmt.Sprintf(` + select + id, feed_id, title, link, description, + content, author, date, date_updated, status, image + from items + where %s`, cond) + s.log.Print(query) + rows, err := s.db.Query(query, v...) + if err != nil { + s.log.Print(err) + return result + } + for rows.Next() { + var x Item + err = rows.Scan( + &x.Id, + &x.FeedId, + &x.Title, + &x.Link, + &x.Description, + &x.Content, + &x.Author, + &x.Date, + &x.DateUpdated, + &x.Status, + &x.Image, + ) + if err != nil { + s.log.Print(err) + return result + } + result = append(result, x) + } + return result +} + +func (s *Storage) ListItems() []Item { + return itemQuery(s, `1`) +} + +func (s *Storage) ListFolderItems(folder_id int64) []Item { + return itemQuery(s, `folder_id = ?`, folder_id) +} + +func (s *Storage) ListFolderItemsFiltered(folder_id int64, status ItemStatus) []Item { + return itemQuery(s, `folder_id = ? and status = ?`, folder_id, status) +} + +func (s *Storage) ListFeedItems(feed_id int64) []Item { + return itemQuery(s, `feed_id = ?`, feed_id) +} + +func (s *Storage) ListFeedItemsFiltered(feed_id int64, status ItemStatus) []Item { + return itemQuery(s, `feed_id = ? and status = ?`, feed_id, status) +}