/
ticket_form.go
148 lines (127 loc) · 4.71 KB
/
ticket_form.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
137
138
139
140
141
142
143
144
145
146
147
148
package zendesk
import (
"context"
"encoding/json"
"fmt"
)
// TicketForm is JSON payload struct
type TicketForm struct {
ID int64 `json:"id,omitempty"`
URL string `json:"url,omitempty"`
Name string `json:"name"`
RawName string `json:"raw_name,omitempty"`
DisplayName string `json:"display_name,omitempty"`
RawDisplayName string `json:"raw_display_name,omitempty"`
Position int64 `json:"position"`
Active bool `json:"active,omitempty"`
EndUserVisible bool `json:"end_user_visible,omitempty"`
Default bool `json:"default,omitempty"`
TicketFieldIDs []int64 `json:"ticket_field_ids,omitempty"`
InAllBrands bool `json:"in_all_brands,omitempty"`
RestrictedBrandIDs []int64 `json:"restricted_brand_ids,omitempty"`
}
// TicketFormListOptions is options for GetTicketForms
//
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#available-parameters
type TicketFormListOptions struct {
PageOptions
Active bool `url:"active,omitempty"`
EndUserVisible bool `url:"end_user_visible,omitempty"`
FallbackToDefault bool `url:"fallback_to_default,omitempty"`
AssociatedToBrand bool `url:"associated_to_brand,omitempty"`
}
// TicketFormAPI an interface containing all ticket form related methods
type TicketFormAPI interface {
GetTicketForms(ctx context.Context, options *TicketFormListOptions) ([]TicketForm, Page, error)
CreateTicketForm(ctx context.Context, ticketForm TicketForm) (TicketForm, error)
DeleteTicketForm(ctx context.Context, id int64) error
UpdateTicketForm(ctx context.Context, id int64, form TicketForm) (TicketForm, error)
GetTicketForm(ctx context.Context, id int64) (TicketForm, error)
GetTicketFormsIterator(ctx context.Context, opts *PaginationOptions) *Iterator[TicketForm]
GetTicketFormsOBP(ctx context.Context, opts *OBPOptions) ([]TicketForm, Page, error)
GetTicketFormsCBP(ctx context.Context, opts *CBPOptions) ([]TicketForm, CursorPaginationMeta, error)
}
// GetTicketForms fetches ticket forms
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#list-ticket-forms
func (z *Client) GetTicketForms(ctx context.Context, options *TicketFormListOptions) ([]TicketForm, Page, error) {
var data struct {
TicketForms []TicketForm `json:"ticket_forms"`
Page
}
tmp := options
if tmp == nil {
tmp = &TicketFormListOptions{}
}
u, err := addOptions("/ticket_forms.json", tmp)
if err != nil {
return nil, Page{}, err
}
body, err := z.get(ctx, u)
if err != nil {
return []TicketForm{}, Page{}, err
}
err = json.Unmarshal(body, &data)
if err != nil {
return []TicketForm{}, Page{}, err
}
return data.TicketForms, data.Page, nil
}
// CreateTicketForm creates new ticket form
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#create-ticket-forms
func (z *Client) CreateTicketForm(ctx context.Context, ticketForm TicketForm) (TicketForm, error) {
var data, result struct {
TicketForm TicketForm `json:"ticket_form"`
}
data.TicketForm = ticketForm
body, err := z.post(ctx, "/ticket_forms.json", data)
if err != nil {
return TicketForm{}, err
}
err = json.Unmarshal(body, &result)
if err != nil {
return TicketForm{}, err
}
return result.TicketForm, nil
}
// GetTicketForm returns the specified ticket form
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#show-ticket-form
func (z *Client) GetTicketForm(ctx context.Context, id int64) (TicketForm, error) {
var result struct {
TicketForm TicketForm `json:"ticket_form"`
}
body, err := z.get(ctx, fmt.Sprintf("/ticket_forms/%d.json", id))
if err != nil {
return TicketForm{}, err
}
err = json.Unmarshal(body, &result)
if err != nil {
return TicketForm{}, err
}
return result.TicketForm, nil
}
// UpdateTicketForm updates the specified ticket form and returns the updated form
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#update-ticket-forms
func (z *Client) UpdateTicketForm(ctx context.Context, id int64, form TicketForm) (TicketForm, error) {
var data, result struct {
TicketForm TicketForm `json:"ticket_form"`
}
data.TicketForm = form
body, err := z.put(ctx, fmt.Sprintf("/ticket_forms/%d.json", id), data)
if err != nil {
return TicketForm{}, err
}
err = json.Unmarshal(body, &result)
if err != nil {
return TicketForm{}, err
}
return result.TicketForm, nil
}
// DeleteTicketForm deletes the specified ticket form
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#delete-ticket-form
func (z *Client) DeleteTicketForm(ctx context.Context, id int64) error {
err := z.delete(ctx, fmt.Sprintf("/ticket_forms/%d.json", id))
if err != nil {
return err
}
return nil
}