/
localpreset.go
68 lines (59 loc) · 1.89 KB
/
localpreset.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package redis
import (
"errors"
"github.com/go-redis/redis"
"github.com/video-dev/video-transcoding-api/db"
"github.com/video-dev/video-transcoding-api/db/redis/storage"
)
const localPresetsSetKey = "localpresets"
func (r *redisRepository) CreateLocalPreset(localPreset *db.LocalPreset) error {
if _, err := r.GetLocalPreset(localPreset.Name); err == nil {
return db.ErrLocalPresetAlreadyExists
}
return r.saveLocalPreset(localPreset)
}
func (r *redisRepository) UpdateLocalPreset(localPreset *db.LocalPreset) error {
if _, err := r.GetLocalPreset(localPreset.Name); err == db.ErrLocalPresetNotFound {
return err
}
return r.saveLocalPreset(localPreset)
}
func (r *redisRepository) saveLocalPreset(localPreset *db.LocalPreset) error {
fields, err := r.storage.FieldMap(localPreset)
if err != nil {
return err
}
if localPreset.Name == "" {
return errors.New("preset name missing")
}
localPresetKey := r.localPresetKey(localPreset.Name)
return r.storage.RedisClient().Watch(func(tx *redis.Tx) error {
err := tx.HMSet(localPresetKey, fields).Err()
if err != nil {
return err
}
return tx.SAdd(localPresetsSetKey, localPreset.Name).Err()
}, localPresetKey)
}
func (r *redisRepository) DeleteLocalPreset(localPreset *db.LocalPreset) error {
err := r.storage.Delete(r.localPresetKey(localPreset.Name))
if err != nil {
if err == storage.ErrNotFound {
return db.ErrLocalPresetNotFound
}
return err
}
r.storage.RedisClient().SRem(localPresetsSetKey, localPreset.Name)
return nil
}
func (r *redisRepository) GetLocalPreset(name string) (*db.LocalPreset, error) {
localPreset := db.LocalPreset{Name: name, Preset: db.Preset{}}
err := r.storage.Load(r.localPresetKey(name), &localPreset)
if err == storage.ErrNotFound {
return nil, db.ErrLocalPresetNotFound
}
return &localPreset, err
}
func (r *redisRepository) localPresetKey(name string) string {
return "localpreset:" + name
}