-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy patheventapi_data.go
More file actions
108 lines (95 loc) · 2.41 KB
/
eventapi_data.go
File metadata and controls
108 lines (95 loc) · 2.41 KB
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
package webapi
import (
"encoding/json"
"github.com/raceresult/go-model/variant"
)
// Data contains all api endpoints regarding data
type Data struct {
api *EventAPI
}
// newData creates a new Data api endpoint group
func newData(api *EventAPI) *Data {
return &Data{
api: api,
}
}
// Count returns the count of records matching the given filters
func (q *Data) Count(filter string) (int, error) {
values := urlValues{
"filter": filter,
}
bts, err := q.api.get("data/count", values)
if err != nil {
return 0, err
}
var dest int
if err := json.Unmarshal(bts, &dest); err != nil {
return 0, err
}
return dest, nil
}
// List returns arbitrary records
func (q *Data) List(fields []string, filter string, sort []string, limitFrom, limitTo int, groups []string,
multiplierField string, selectorResult string) ([][]variant.Variant, error) {
values := urlValues{
"fields": fields,
"filter": filter,
"sort": sort,
"limitFrom": limitFrom,
"limitTo": limitTo,
"groups": groups,
"multiplierField": multiplierField,
"selectorResult": selectorResult,
"listFormat": "JSON",
}
bts, err := q.api.get("data/list", values)
if err != nil {
return nil, err
}
// parse json
var arr [][]interface{}
if err := json.Unmarshal(bts, &arr); err != nil {
return nil, err
}
// convert to variant
dest := make([][]variant.Variant, 0, len(arr))
for _, col := range arr {
vl := make([]variant.Variant, len(col))
for j, x := range col {
vl[j] = variant.ToVariant(x)
}
dest = append(dest, vl)
}
return dest, nil
}
// Transformation creates min/max/sum/count/avg statistic
func (q *Data) Transformation(colField string, rowFields []string, filter string, field string, mode int,
sortByValue bool) ([][]variant.Variant, error) {
values := urlValues{
"colField": colField,
"rowFields": rowFields,
"filter": filter,
"field": field,
"mode": mode,
"sortByValue": sortByValue,
}
bts, err := q.api.get("data/transformation", values)
if err != nil {
return nil, err
}
// parse json
var arr [][]interface{}
if err := json.Unmarshal(bts, &arr); err != nil {
return nil, err
}
// convert to variant
dest := make([][]variant.Variant, 0, len(arr))
for _, col := range arr {
vl := make([]variant.Variant, len(col))
for j, x := range col {
vl[j] = variant.ToVariant(x)
}
dest = append(dest, vl)
}
return dest, nil
}