-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
eventTypes.go
136 lines (114 loc) · 3.78 KB
/
eventTypes.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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package calendly
import (
"encoding/json"
"fmt"
"strings"
"time"
)
// EventType holds a Calendly EventType object
type EventType struct {
URI string `json:"uri"`
Name string `json:"name"`
Active bool `json:"active"`
Slug string `json:"slug"`
SchedulingUrl string `json:"scheduling_url"`
Duration int `json:"duration"`
Kind string `json:"kind"`
PoolingType string `json:"pooling_type"`
Type string `json:"type"`
Color string `json:"color"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
InternalNote string `json:"internal_note"`
DescriptionPlain string `json:"description_plain"`
DescriptionHtml string `json:"description_html"`
Profile Profile `json:"profile"`
Secret bool `json:"secret"`
CustomQuestions []CustomQuestion `json:"custom_questions"`
}
// Profile holds a Calendly Profile object
type Profile struct {
Type string `json:"type"`
Name string `json:"name"`
Owner string `json:"owner"`
}
// CustomQuestion holds a Calendly CustomQuestion object
type CustomQuestion struct {
Name string `json:"name"`
Type string `json:"type"`
Position int `json:"position"`
Enabled bool `json:"enabled"`
Required bool `json:"required"`
AnswerChoices []string `json:"answer_choices"`
IncludeOther bool `json:"include_other"`
}
// ListUsersEventTypesInput is used as input for the ListUsersEventTypes function
type ListUsersEventTypesInput struct {
Active string // This should be a bool, but Go doesn't have a null value for bools so we use string
Count int
Organization string
PageToken string
Sort string
User string
}
// ListUsersEventTypesResponse is the response from the Calendly API
type listUsersEventTypesResponse struct {
Collection []EventType `json:"collection"`
Pagination struct {
Count int `json:"count"`
NextPage string `json:"next_page"`
} `json:"pagination"`
}
// ListUsersEventTypes list a users event types
// Either User or Organization are required
func (cw *CalendlyWrapper) ListUsersEventTypes(input *ListUsersEventTypesInput) ([]EventType, error) {
var etl []EventType
var etlResponse listUsersEventTypesResponse
url := fmt.Sprintf("%s%s", cw.baseApiUrl, "event_types")
// Only user or organization can be supplied, not both
if input.User != "" {
url += fmt.Sprintf("?user=%s", input.User)
} else if input.Organization != "" {
url += fmt.Sprintf("?organization=%s", input.Organization)
}
switch strings.ToLower(input.Active) {
case "true":
url += "&active=true"
case "false":
url += "&active=false"
}
if input.Count != 0 && (input.Count >= 1 && input.Count <= 100) {
url += fmt.Sprintf("&count=%d", input.Count)
}
if input.PageToken != "" {
url += fmt.Sprintf("&page_token=%s", input.PageToken)
}
if input.Sort != "" {
url += fmt.Sprintf("&sort=%s", input.Sort)
}
resp, err := cw.sendGetReq(url)
if err != nil {
return etl, err
}
err = json.Unmarshal(resp, &etlResponse)
if err != nil {
return etl, err
}
etl = etlResponse.Collection
return etl, nil
}
// GetEventType returns the event type for the given id
func (cw *CalendlyWrapper) GetEventType(id string) (EventType, error) {
var et EventType
var eventTypeResponse map[string]EventType
resp, err := cw.sendGetReq(fmt.Sprintf("%s%s%s", cw.baseApiUrl, "event_types/", id))
if err != nil {
return et, err
}
err = json.Unmarshal(resp, &eventTypeResponse)
if err != nil {
return et, err
}
et = eventTypeResponse["resource"]
return et, nil
}