package db import ( "encoding/json" "log" "ssender/internal/models" "github.com/boltdb/bolt" ) func InitDb(rss models.Rss2, dbpath string) error { log.Println("Initialize DB") db, err := bolt.Open(dbpath, 0600, nil) if err != nil { log.Fatal(err) } defer db.Close() err = db.Update(func(tx *bolt.Tx) error { b, err := tx.CreateBucketIfNotExists([]byte("rss")) if err != nil { return err } for _, v := range rss.ItemList { encoded, err := json.Marshal(v) if err != nil { return err } err = b.Put([]byte(v.Link), encoded) if err != nil { return err } } return nil }) if err != nil { return err } return nil } func FindItems(rss models.Rss2, dbpath string) (*models.SendItems, error) { var sendItems models.SendItems db, err := bolt.Open(dbpath, 0600, nil) 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 { sendItems.ItemList = append(sendItems.ItemList, v) } return nil }) if err != nil { return nil, err } } return &sendItems, nil } func UpdateDb(dbpath string, senditems *models.SendItems) error { log.Println("Update DB") db, err := bolt.Open(dbpath, 0600, nil) if err != nil { log.Fatal(err) } defer db.Close() err = db.Update(func(tx *bolt.Tx) error { b := tx.Bucket([]byte("rss")) for _, v := range senditems.ItemList { encoded, err := json.Marshal(v) if err != nil { return err } err = b.Put([]byte(v.Link), encoded) if err != nil { return err } } return nil }) if err != nil { return err } return nil }