forked from algolia/algoliasearch-client-go
/
types_abtesting.go
72 lines (63 loc) · 2.11 KB
/
types_abtesting.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
package algoliasearch
import (
"encoding/json"
"fmt"
"time"
)
type ABTest struct {
Name string
Variants []Variant
EndAt time.Time
}
const ISO8601 = "2006-01-02T15:04:05Z"
func (abTest ABTest) MarshalJSON() ([]byte, error) {
jsonVariants, err := json.Marshal(abTest.Variants)
if err != nil {
return nil, fmt.Errorf("cannot marshal variants: %s", err)
}
jsonAbTest := fmt.Sprintf(
`{"name":"%s","variants":%s,"endAt":"%s"}`,
abTest.Name,
jsonVariants,
abTest.EndAt.In(time.UTC).Format(ISO8601),
)
return []byte(jsonAbTest), nil
}
type Variant struct {
Index string `json:"index"`
TrafficPercentage int `json:"trafficPercentage"`
Description string `json:"description,omitempty"`
}
type ABTestTaskRes struct {
ABTestID int `json:"abTestID"`
Index string `json:"index"`
TaskID int `json:"taskID"`
}
type GetABTestsRes struct {
ABTests []ABTestResponse `json:"abtests"`
Count int `json:"count"`
Total int `json:"total"`
}
type ABTestResponse struct {
ABTestID int `json:"abTestID"`
ClickSignificance int `json:"clickSignificance"`
ConversionSignificance float64 `json:"conversionSignificance"`
CreatedAt time.Time `json:"createdAt"`
EndAt time.Time `json:"endAt"`
Name string `json:"name"`
Status string `json:"status"`
Variants []VariantResponse `json:"variants"`
}
type VariantResponse struct {
AverageClickPosition int `json:"averageClickPosition"`
ClickCount int `json:"clickCount"`
ClickThroughRate float64 `json:"clickThroughRate"`
ConversionCount int `json:"conversionCount"`
ConversionRate float64 `json:"conversionRate"`
Description string `json:"description"`
Index string `json:"index"`
NoResultCount int `json:"noResultCount"`
SearchCount int `json:"searchCount"`
TrafficPercentage int `json:"trafficPercentage"`
UserCount int `json:"userCount"`
}