badgerdb messageservers storage
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
ycc
2024-02-08 22:17:16 +01:00
parent 93e972900f
commit 978b6fdfd1
10 changed files with 1385 additions and 156 deletions

View File

@ -1,10 +1,5 @@
package meowlib
import (
"github.com/dgraph-io/badger"
"google.golang.org/protobuf/proto"
)
func (sc *ServerCard) GetUid() string {
return sc.Login + ":" + sc.Password + "@" + sc.Url
}
@ -12,101 +7,3 @@ func (sc *ServerCard) GetUid() string {
func (sc *ServerCard) IsSame(sc1 *ServerCard) bool {
return sc.GetUid() == sc1.GetUid()
}
//
// Storage
//
// Open a badger database
func OpenBadgerDb(path string) (*badger.DB, error) {
opts := badger.DefaultOptions(path)
opts.Logger = nil
return badger.Open(opts)
}
// Store function stores a ServerCard in a badger database with servercard.GetUid() as key
func (sc *ServerCard) Store(db *badger.DB) error {
// first marchal the ServerCard to bytes with protobuf
b, err := proto.Marshal(sc)
if err != nil {
return err
}
// then store it in the database
return db.Update(func(txn *badger.Txn) error {
return txn.Set([]byte(sc.GetUid()), b)
})
}
// LoadServerCard function loads a ServerCard from a badger database with servercard.GetUid() as key
func LoadServerCard(db *badger.DB, uid string) (*ServerCard, error) {
var sc ServerCard
err := db.View(func(txn *badger.Txn) error {
item, err := txn.Get([]byte(uid))
if err != nil {
return err
}
return item.Value(func(val []byte) error {
return proto.Unmarshal(val, &sc)
})
})
return &sc, err
}
// DeleteServerCard function deletes a ServerCard from a badger database with servercard.GetUid() as key
func DeleteServerCard(db *badger.DB, uid string) error {
return db.Update(func(txn *badger.Txn) error {
return txn.Delete([]byte(uid))
})
}
// LoadAllServerCards function loads all ServerCards from a badger database
func LoadAllServerCards(db *badger.DB) ([]*ServerCard, error) {
var scs []*ServerCard
err := db.View(func(txn *badger.Txn) error {
opts := badger.DefaultIteratorOptions
opts.PrefetchSize = 10
it := txn.NewIterator(opts)
defer it.Close()
for it.Rewind(); it.Valid(); it.Next() {
item := it.Item()
var sc ServerCard
err := item.Value(func(val []byte) error {
return proto.Unmarshal(val, &sc)
})
if err != nil {
return err
}
scs = append(scs, &sc)
}
return nil
})
return scs, err
}
// LoadServerCardsFromUids function loads ServerCards with id in []Uid parameter from a badger database
func LoadServerCardsFromUids(db *badger.DB, uids []string) ([]*ServerCard, error) {
var scs []*ServerCard
err := db.View(func(txn *badger.Txn) error {
for _, uid := range uids {
item, err := txn.Get([]byte(uid))
if err != nil {
return err
}
var sc ServerCard
err = item.Value(func(val []byte) error {
return proto.Unmarshal(val, &sc)
})
if err != nil {
return err
}
scs = append(scs, &sc)
}
return nil
})
return scs, err
}
// close a badger database
func CloseBadgerDb(db *badger.DB) {
db.Close()
}