Migrated from GORM to bbolt for lightweight key-value storage, better aligning with project requirements. Updated repository methods to utilize bbolt's native APIs and removed dependencies associated with GORM.
83 lines
1.6 KiB
Go
83 lines
1.6 KiB
Go
package setting
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/db"
|
|
"go.etcd.io/bbolt"
|
|
)
|
|
|
|
type RepositoryContract interface {
|
|
Create(setting Setting) (Setting, error)
|
|
CreateOrUpdate(code string, value string) (Setting, error)
|
|
GetValue(code string) (value string, err error)
|
|
}
|
|
|
|
type Repository struct {
|
|
db *bbolt.DB
|
|
}
|
|
|
|
func NewRepository(db *bbolt.DB) *Repository {
|
|
return &Repository{db}
|
|
}
|
|
|
|
func (r Repository) GetValue(code string) (value string, err error) {
|
|
var setting Setting
|
|
|
|
err = r.db.View(func(tx *bbolt.Tx) error {
|
|
b := tx.Bucket([]byte("settings"))
|
|
if b == nil {
|
|
return errors.New("bucket 'settings' not found")
|
|
}
|
|
val := b.Get([]byte(code))
|
|
if val == nil {
|
|
return db.ErrRecordNotFound
|
|
}
|
|
return json.Unmarshal(val, &setting)
|
|
})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return setting.Value, nil
|
|
|
|
}
|
|
|
|
func (r Repository) Create(setting Setting) (Setting, error) {
|
|
err := r.db.Update(func(tx *bbolt.Tx) error {
|
|
b := tx.Bucket([]byte("settings"))
|
|
if b == nil {
|
|
return errors.New("bucket 'settings' not found")
|
|
}
|
|
|
|
data, err := json.Marshal(setting)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return b.Put([]byte(setting.Code), data)
|
|
})
|
|
return setting, err
|
|
}
|
|
|
|
func (r Repository) CreateOrUpdate(code string, value string) (Setting, error) {
|
|
var setting Setting
|
|
setting.Code = code
|
|
setting.Value = value
|
|
|
|
err := r.db.Update(func(tx *bbolt.Tx) error {
|
|
b := tx.Bucket([]byte("settings"))
|
|
if b == nil {
|
|
return errors.New("bucket 'settings' not found")
|
|
}
|
|
|
|
data, err := json.Marshal(setting)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return b.Put([]byte(code), data)
|
|
})
|
|
return setting, err
|
|
}
|