From f72f72e1cdeb9dd881a40ac946d7b5ef42fe6e9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Tue, 3 Feb 2026 20:37:36 +0500 Subject: [PATCH] Improve FindItems function with better error handling and logging --- internal/db/db.go | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) 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 }