-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtodo.go
110 lines (98 loc) · 2.32 KB
/
todo.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package accs
import (
"github.com/garyburd/redigo/redis"
"github.com/grunmax/GinRedisApi/domn"
"github.com/grunmax/GinRedisApi/util"
)
func GetKeys(match string, pool *redis.Pool) ([]string, error) {
c := pool.Get()
defer c.Close()
var items []string
const step = 1000
results := make([]string, 0)
cursor := 0
for {
values, err := redis.Values(c.Do("SCAN", cursor, "MATCH", match, "COUNT", step))
if err != nil {
util.Log("SCAN read error", err)
return nil, err
}
values, err = redis.Scan(values, &cursor, &items)
if err != nil {
util.Log("SCAN scan error", err)
return nil, err
}
results = append(results, items...)
if cursor == 0 {
break
}
}
return results, nil
}
func TodoCreate(item domn.TodoForm, pool *redis.Pool) (*domn.TodoForm, error) {
c := pool.Get()
defer c.Close()
item.Id = util.NewId()
key := "todo:" + item.Id
if _, err := c.Do("HMSET", key,
"title", item.Title,
"completed", item.Completed,
"order", item.Order); err != nil {
util.Log("Todo create error", err)
return nil, err
} else {
return &item, nil
}
}
func TodoEdit(id string, item domn.TodoForm, pool *redis.Pool) (*domn.TodoForm, error) {
c := pool.Get()
defer c.Close()
item.Id = id
key := "todo:" + item.Id
if exist, err := redis.Bool(c.Do("EXISTS", key)); err != nil {
util.Log("check todo key error", err)
return nil, err
} else if !exist {
return nil, util.MyErr{"no key"}
}
if _, err := c.Do("HMSET", key,
"title", item.Title,
"completed", item.Completed,
"order", item.Order); err != nil {
util.Log("Todo edit error", err)
return nil, err
} else {
return &item, nil
}
}
func TodoGetId(id string, pool *redis.Pool) (*domn.TodoItem, error) {
c := pool.Get()
defer c.Close()
key := "todo:" + id
values, err := redis.Values(c.Do("HGETALL", key))
if err != nil {
util.Log("HGET key error", err)
return nil, err
}
if len(values) == 0 {
return nil, util.MyErr{"no data"}
}
var todo domn.TodoItem
if err := redis.ScanStruct(values, &todo); err != nil {
util.Log("HGET parse key error", err)
return nil, err
}
todo.Id = id
return &todo, nil
}
func TodoDeleteId(id string, pool *redis.Pool) error {
c := pool.Get()
defer c.Close()
key := "todo:" + id
if _, err := c.Do("DEL", key); err != nil {
util.Log("Todo delete error", err)
return err
} else {
return nil
}
}