diff --git a/internal/db/db.go b/internal/db/db.go index b29cb7c..a458e28 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -2,7 +2,9 @@ package db import ( "encoding/json" + "fmt" "log" + "os" "ssender/internal/models" "github.com/boltdb/bolt" @@ -41,33 +43,39 @@ func InitDb(rss models.Rss2, dbpath string) error { func FindItems(rss models.Rss2, dbpath string) (*models.SendItems, error) { var sendItems models.SendItems - db, err := bolt.Open(dbpath, 0600, nil) + + // Check if DB file exists + if _, err := os.Stat(dbpath); os.IsNotExist(err) { + return nil, fmt.Errorf("database file does not exist: %s", dbpath) + } + + // Open database + db, err := openDB(dbpath) if err != nil { return nil, err } defer db.Close() - for _, v := range rss.ItemList { - err = db.View(func(tx *bolt.Tx) error { - // Assume bucket exists and has keys - b := tx.Bucket([]byte("rss")) - c := b.Cursor() - flag := false - for key, _ := c.First(); key != nil; key, _ = c.Next() { - if v.Link == string(key) { - flag = true - break - } - } - if flag { + log.Println("Finding new items in DB") + + err = db.View(func(tx *bolt.Tx) error { + b := tx.Bucket([]byte("rss")) + if b == nil { + return fmt.Errorf("bucket 'rss' not found in database") + } + for _, v := range rss.ItemList { + if b.Get([]byte(v.Link)) != nil { sendItems.ItemList = append(sendItems.ItemList, v) } - return nil - }) - if err != nil { - return nil, err } + return nil + }) + if err != nil { + return nil, err } + + log.Printf("Found %d new items", len(sendItems.ItemList)) + return &sendItems, nil }