-
Notifications
You must be signed in to change notification settings - Fork 0
/
plan.go
136 lines (112 loc) · 2.83 KB
/
plan.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 culqi
import (
"bytes"
"encoding/json"
"net/url"
)
const (
planURL = baseURL + "/plans"
)
// Plan objeto request de plan
type Plan struct {
Name string `json:"name"`
Amount int `json:"amount"`
CurrencyCode string `json:"currency_code"`
Interval string `json:"interval"`
IntervalCount int `json:"interval_count"`
TrialDays int `json:"trial_days"`
Limit int `json:"limit"`
Metadata map[string]string `json:"metadata"`
}
// ResponsePlan objeto respuesta de plan
type ResponsePlan struct {
Plan
Object string `json:"object"`
ID string `json:"id"`
CreationDate int `json:"creation_date"`
TotalSubscriptions int `json:"total_subscriptions"`
}
// ResponsePlanAll respuesta de tarjeta para GetAll
type ResponsePlanAll struct {
Data []ResponsePlan `json:"data"`
WrapperResponse
}
// Create método para crear un plan
func (pln *Plan) Create() (*ResponsePlan, error) {
j, err := json.Marshal(pln)
if err != nil {
return nil, err
}
res, err := do("POST", planURL, nil, bytes.NewBuffer(j))
if err != nil {
return nil, err
}
rpln := &ResponsePlan{}
if err = json.Unmarshal(res, rpln); err != nil {
return nil, err
}
return rpln, nil
}
// GetByID método para obtener un plan por id
func (pln *Plan) GetByID(id string) (*ResponsePlan, error) {
if id == "" {
return nil, ErrParameter
}
res, err := do("GET", planURL+"/"+id, nil, nil)
if err != nil {
return nil, err
}
rpln := &ResponsePlan{}
if err = json.Unmarshal(res, rpln); err != nil {
return nil, err
}
return rpln, nil
}
// GetAll método para obtener la lista de los planes
func (pln *Plan) GetAll(queryParams url.Values) (*ResponsePlanAll, error) {
res, err := do("GET", planURL, queryParams, nil)
if err != nil {
return nil, err
}
rpln := &ResponsePlanAll{}
if err = json.Unmarshal(res, rpln); err != nil {
return nil, err
}
return rpln, nil
}
// Update método para agregar o remplazar información a los valores de la metadata de un plan
func (pln *Plan) Update(id string, metadata map[string]string) (*ResponsePlan, error) {
if id == "" || len(metadata) == 0 {
return nil, ErrParameter
}
j, err := json.Marshal(
struct {
Metadata map[string]string `json:"metadata"`
}{
metadata,
},
)
if err != nil {
return nil, err
}
res, err := do("PATCH", planURL+"/"+id, nil, bytes.NewBuffer(j))
if err != nil {
return nil, err
}
rpln := &ResponsePlan{}
if err = json.Unmarshal(res, rpln); err != nil {
return nil, err
}
return rpln, nil
}
// Delete método para eliminar un plan por id
func (pln *Plan) Delete(id string) error {
if id == "" {
return ErrParameter
}
_, err := do("DELETE", planURL+"/"+id, nil, nil)
if err != nil {
return err
}
return nil
}