40 lines
875 B
Go
40 lines
875 B
Go
package config
|
|
|
|
import "gorm.io/gorm"
|
|
|
|
type Repository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewRepository(db *gorm.DB) *Repository {
|
|
return &Repository{db: db}
|
|
}
|
|
|
|
func (r *Repository) Get(key string) (*ConfigEntry, error) {
|
|
var e ConfigEntry
|
|
if err := r.db.First(&e, "key = ?", key).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &e, nil
|
|
}
|
|
|
|
func (r *Repository) Upsert(key, value string) error {
|
|
// Try update first, then insert if nothing updated.
|
|
res := r.db.Model(&ConfigEntry{}).Where("key = ?", key).Update("value", value)
|
|
if res.Error != nil {
|
|
return res.Error
|
|
}
|
|
if res.RowsAffected > 0 {
|
|
return nil
|
|
}
|
|
return r.db.Create(&ConfigEntry{Key: key, Value: value}).Error
|
|
}
|
|
|
|
func (r *Repository) List() ([]ConfigEntry, error) {
|
|
var entries []ConfigEntry
|
|
if err := r.db.Order("key asc").Find(&entries).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return entries, nil
|
|
}
|