3
0
corteza/pkg/settings/settings.go
2019-10-01 18:13:26 +02:00

84 lines
1.7 KiB
Go

package settings
import (
"context"
)
type (
service struct {
repository Repository
}
Service interface {
With(ctx context.Context) Service
FindByPrefix(prefix string) (vv ValueSet, err error)
BulkSet(vv ValueSet) (err error)
Set(v *Value) (err error)
Get(name string, ownedBy uint64) (out *Value, err error)
Delete(name string, ownedBy uint64) error
GetGlobalString(name string) (out string, err error)
GetGlobalBool(name string) (out bool, err error)
}
)
func NewService(r Repository) Service {
svc := &service{
repository: r,
}
return svc
}
func (s service) With(ctx context.Context) Service {
return &service{
repository: s.repository.With(ctx),
}
}
func (s service) FindByPrefix(prefix string) (ValueSet, error) {
if vv, err := s.repository.Find(Filter{Prefix: prefix}); err != nil {
return nil, err
} else {
return vv, nil
}
}
func (s service) Set(v *Value) (err error) {
return s.repository.Set(v)
}
func (s service) BulkSet(vv ValueSet) (err error) {
return s.repository.BulkSet(vv)
}
func (s service) Get(name string, ownedBy uint64) (out *Value, err error) {
return s.repository.Get(name, ownedBy)
}
func (s service) Delete(name string, ownedBy uint64) error {
return s.repository.Delete(name, ownedBy)
}
func (s service) GetGlobalString(name string) (out string, err error) {
const global = 0
var v *Value
if v, err = s.repository.Get(name, global); err == nil && v != nil {
err = v.Value.Unmarshal(&out)
}
return
}
func (s service) GetGlobalBool(name string) (out bool, err error) {
const global = 0
var v *Value
if v, err = s.repository.Get(name, global); err == nil && v != nil {
err = v.Value.Unmarshal(&out)
}
return
}