Browse Source

рефакторинг кода

develop
parent
commit
4c167c5ba7
  1. 100
      internal/db/db.go
  2. 27
      internal/rss/rss.go

100
internal/db/db.go

@ -0,0 +1,100 @@
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
}

27
internal/rss/rss.go

@ -0,0 +1,27 @@
package rss
import (
"encoding/xml"
"os"
"ssender/internal/models"
)
func NewRSS(rssPath string) (*models.Rss2, error) {
rss := &models.Rss2{}
// Open rss2 file
file, err := os.Open(rssPath)
if err != nil {
return nil, err
}
defer file.Close()
d := xml.NewDecoder(file)
// Start RSS decoding from file
if err := d.Decode(&rss); err != nil {
return nil, err
}
return rss, nil
}
Loading…
Cancel
Save