-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathcampaign.go
More file actions
77 lines (64 loc) · 2 KB
/
campaign.go
File metadata and controls
77 lines (64 loc) · 2 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
package opslevel
type ListCampaignsVariables struct {
After *string
First *int
SortBy *CampaignSortEnum
Status *CampaignStatusEnum
}
func (v *ListCampaignsVariables) AsPayloadVariables() *PayloadVariables {
variables := PayloadVariables{}
if v.After != nil {
variables["after"] = *v.After
}
if v.First != nil {
variables["first"] = *v.First
}
if v.SortBy != nil {
variables["sortBy"] = *v.SortBy
}
if v.Status != nil {
// cast status to match filter argument type
variables["status"] = string(*v.Status)
}
return &variables
}
func (client *Client) ListCampaigns(campaignVariables *ListCampaignsVariables) (*CampaignConnection, error) {
if campaignVariables == nil {
campaignVariables = &ListCampaignsVariables{}
}
defaultPages := client.InitialPageVariablesPointer()
if campaignVariables.First == nil {
defaultFirst := (*defaultPages)["first"].(int)
campaignVariables.First = &defaultFirst
}
if campaignVariables.After == nil {
defaultAfter := (*defaultPages)["after"].(string)
campaignVariables.After = &defaultAfter
}
if campaignVariables.SortBy == nil {
campaignVariables.SortBy = &CampaignSortEnumStartDateDesc
}
if campaignVariables.Status == nil {
campaignVariables.Status = &CampaignStatusEnumInProgress
}
variables := campaignVariables.AsPayloadVariables()
var q struct {
Account struct {
Campaigns CampaignConnection `graphql:"campaigns(first: $first, after: $after, sortBy: $sortBy, filter: [{key: status, arg: $status}])"`
}
}
if err := client.Query(&q, *variables, WithName("CampaignsList")); err != nil {
return nil, err
}
if q.Account.Campaigns.PageInfo.HasNextPage {
campaignVariables.After = &q.Account.Campaigns.PageInfo.End
resp, err := client.ListCampaigns(campaignVariables)
if err != nil {
return nil, err
}
q.Account.Campaigns.Nodes = append(q.Account.Campaigns.Nodes, resp.Nodes...)
q.Account.Campaigns.PageInfo = resp.PageInfo
}
q.Account.Campaigns.TotalCount = len(q.Account.Campaigns.Nodes)
return &q.Account.Campaigns, nil
}