mirror of
https://github.com/tgdrive/teldrive.git
synced 2025-09-22 22:39:02 +08:00
46 lines
931 B
Go
46 lines
931 B
Go
package tgstorage
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/go-faster/errors"
|
|
"gorm.io/gorm"
|
|
|
|
"github.com/gotd/contrib/auth/kv"
|
|
)
|
|
|
|
type KeyValue struct {
|
|
Key string `gorm:"primaryKey;column:key"`
|
|
Value []byte `gorm:"not null;column:value;type:blob"`
|
|
}
|
|
|
|
func (KeyValue) TableName() string {
|
|
return "kv"
|
|
}
|
|
|
|
type kvStorage struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func (s kvStorage) Set(ctx context.Context, k, v string) error {
|
|
return s.db.Transaction(func(tx *gorm.DB) error {
|
|
if err := tx.Save(&KeyValue{
|
|
Key: k,
|
|
Value: []byte(v),
|
|
}).Error; err != nil {
|
|
return errors.Wrap(err, "save value")
|
|
}
|
|
return nil
|
|
})
|
|
}
|
|
|
|
func (s kvStorage) Get(ctx context.Context, k string) (string, error) {
|
|
var entry KeyValue
|
|
if err := s.db.First(&entry, "key = ?", k).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return "", kv.ErrKeyNotFound
|
|
}
|
|
return "", errors.Wrap(err, "query")
|
|
}
|
|
return string(entry.Value), nil
|
|
}
|