-
Notifications
You must be signed in to change notification settings - Fork 82
/
Copy pathticket_audit.go
111 lines (93 loc) · 3.29 KB
/
ticket_audit.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
package zendesk
import (
"context"
"encoding/json"
"fmt"
"time"
)
// TicketAudit is struct for ticket_audit payload
type TicketAudit struct {
ID int64 `json:"id,omitempty"`
TicketID int64 `json:"ticket_id,omitempty"`
Metadata interface{} `json:"metadata,omitempty"`
Via TicketAuditVia `json:"via,omitempty"`
CreatedAt *time.Time `json:"created_at,omitempty"`
AuthorID int64 `json:"author_id,omitempty"`
Events []interface{} `json:"events,omitempty"`
}
// TicketAuditVia is struct for via payload
type TicketAuditVia struct {
Channel string `json:"channel,omitempty"`
Source struct {
To interface{} `json:"to,omitempty"`
From interface{} `json:"from,omitempty"`
Ref string `json:"ref,omitempty"`
} `json:"source,omitempty"`
}
// TicketAuditAPI an interface containing all of the ticket audit related zendesk methods
type TicketAuditAPI interface {
GetAllTicketAudits(ctx context.Context, opts CursorOption) ([]TicketAudit, Cursor, error)
GetTicketAudits(ctx context.Context, ticketID int64, opts PageOptions) ([]TicketAudit, Page, error)
GetTicketAudit(ctx context.Context, TicketID, ID int64) (TicketAudit, error)
GetTicketAuditsIterator(ctx context.Context, opts *PaginationOptions) *Iterator[TicketAudit]
GetTicketAuditsOBP(ctx context.Context, opts *OBPOptions) ([]TicketAudit, Page, error)
GetTicketAuditsCBP(ctx context.Context, opts *CBPOptions) ([]TicketAudit, CursorPaginationMeta, error)
}
// GetAllTicketAudits list all ticket audits
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_audits#list-all-ticket-audits
func (z *Client) GetAllTicketAudits(ctx context.Context, opts CursorOption) ([]TicketAudit, Cursor, error) {
var result struct {
Audits []TicketAudit `json:"audits"`
Cursor
}
u, err := addOptions("/ticket_audits.json", opts)
if err != nil {
return []TicketAudit{}, Cursor{}, err
}
body, err := z.get(ctx, u)
if err != nil {
return []TicketAudit{}, Cursor{}, err
}
err = json.Unmarshal(body, &result)
if err != nil {
return []TicketAudit{}, Cursor{}, err
}
return result.Audits, result.Cursor, err
}
// GetTicketAudits list audits for a ticket
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_audits#list-audits-for-a-ticket
func (z *Client) GetTicketAudits(ctx context.Context, ticketID int64, opts PageOptions) ([]TicketAudit, Page, error) {
var result struct {
Audits []TicketAudit `json:"audits"`
Page
}
u, err := addOptions(fmt.Sprintf("/tickets/%d/audits.json", ticketID), opts)
if err != nil {
return []TicketAudit{}, Page{}, err
}
body, err := z.get(ctx, u)
if err != nil {
return []TicketAudit{}, Page{}, err
}
err = json.Unmarshal(body, &result)
if err != nil {
return []TicketAudit{}, Page{}, err
}
return result.Audits, result.Page, err
}
// GetTicketAudit show audit
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_audits#show-audit
func (z *Client) GetTicketAudit(ctx context.Context, ticketID, ID int64) (TicketAudit, error) {
var result struct {
Audit TicketAudit `json:"audit"`
}
body, err := z.get(ctx, fmt.Sprintf("/tickets/%d/audits/%d.json", ticketID, ID))
if err != nil {
return TicketAudit{}, err
}
err = json.Unmarshal(body, &result)
if err != nil {
return TicketAudit{}, err
}
return result.Audit, err
}