gui-for-ffmpeg/setting/repository.go
Leonid Nikitin 86886fb5d9
Replace GORM with bbolt for database operations
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.
2025-05-09 23:58:48 +05:00

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
}