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.
This commit is contained in:
2025-05-09 23:58:48 +05:00
parent f262d5f931
commit 86886fb5d9
7 changed files with 92 additions and 84 deletions

View File

@@ -1,7 +1,6 @@
package setting
type Setting struct {
ID uint `gorm:"primary_key"`
Code string `gorm:"type:varchar(100);uniqueIndex;not null"`
Value string `gorm:"type:text"`
Code string `json:"code"`
Value string `json:"value"`
}

View File

@@ -1,8 +1,10 @@
package setting
import (
"encoding/json"
"errors"
"gorm.io/gorm"
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/db"
"go.etcd.io/bbolt"
)
type RepositoryContract interface {
@@ -12,44 +14,69 @@ type RepositoryContract interface {
}
type Repository struct {
db *gorm.DB
db *bbolt.DB
}
func NewRepository(db *gorm.DB) *Repository {
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.Where("code = ?", code).First(&setting).Error
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, err
return setting.Value, nil
}
func (r Repository) Create(setting Setting) (Setting, error) {
err := r.db.Create(&setting).Error
if err != nil {
return setting, err
}
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
err := r.db.Where("code = ?", code).First(&setting).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) == true {
setting = Setting{Code: code, Value: value}
return r.Create(setting)
} else {
return setting, err
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")
}
}
err = r.db.Model(&setting).UpdateColumn("value", value).Error
if err != nil {
return setting, err
}
data, err := json.Marshal(setting)
if err != nil {
return err
}
return b.Put([]byte(code), data)
})
return setting, err
}