/
datastore.go
63 lines (58 loc) · 1.68 KB
/
datastore.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
package servant
import (
"appengine"
"appengine/datastore"
"net/url"
"reflect"
"strconv"
"strings"
)
func GetCardByKey(keyStr string, c appengine.Context) (card Card, err error) {
k := datastore.NewKey(c, "Card", keyStr, 0, nil)
e := Card{}
err = datastore.Get(c, k, &e)
e.KeyName = k.StringID()
return e, err
}
func EqualQuery(query *datastore.Query, values url.Values, s string) *datastore.Query {
if len(values[s]) != 0 {
if values[s][0] == "true" || values[s][0] == "false" {
value, _ := strconv.ParseBool(values[s][0])
query = query.Filter(strings.ToUpper(s[:1])+s[1:]+"=", value)
} else {
query = query.Filter(strings.ToUpper(s[:1])+s[1:]+"=", values[s][0])
}
}
return query
}
func GreaterThanEqualQuery(query *datastore.Query, values url.Values, s string) *datastore.Query {
if len(values[s]) != 0 {
columnName := strings.TrimRight(strings.ToUpper(s[:1])+s[1:], "From")
query = query.Filter(columnName+">=", ToInt(values[s][0])).Order(columnName)
}
return query
}
func Removenequality(cards []Card, values url.Values, s string) []Card {
fromName := s + "From"
toName := s + "To"
if len(values[fromName]) != 0 || len(values[toName]) != 0 {
fromValue := -1
toValue := 100
if len(values[fromName]) != 0 {
fromValue = ToInt(values[fromName][0])
}
if len(values[toName]) != 0 {
toValue = ToInt(values[toName][0])
}
columnName := strings.ToUpper(s[:1]) + s[1:]
resultList := make([]Card, 0, 0)
for _, card := range cards {
columnValue := reflect.ValueOf(card).FieldByName(columnName).Int()
if int64(fromValue) <= columnValue && columnValue <= int64(toValue) {
resultList = append(resultList, card)
}
}
return resultList
}
return cards
}