Skip to content

Commit 4a74f11

Browse files
committed
feat: Adding support for Environments
1 parent d32de0d commit 4a74f11

File tree

1 file changed

+147
-0
lines changed

1 file changed

+147
-0
lines changed

management/environment.go

+147
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package management
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"net/url"
7+
"time"
8+
)
9+
10+
type EnvironmentResponse struct {
11+
Environment Environment `json:"environment"`
12+
}
13+
14+
type EnvironmentRequest struct {
15+
Environment EnvironmentInput `json:"environment"`
16+
}
17+
18+
// Environment represents the environment in contentstack
19+
type Environment struct {
20+
CreatedAt time.Time `json:"created_at"`
21+
UpdatedAt time.Time `json:"updated_at"`
22+
Name string `json:"name"`
23+
UID string `json:"uid,omitempty"`
24+
URLs []EnvironmentUrl `json:"urls"`
25+
}
26+
27+
type EnvironmentUrl struct {
28+
Locale string `json:"locale"`
29+
URL string `json:"url"`
30+
}
31+
32+
// EnvironmentInput is used to create or update an environment
33+
type EnvironmentInput struct {
34+
Name string `json:"name"`
35+
URLs []EnvironmentUrl `json:"urls"`
36+
}
37+
38+
func (si *StackInstance) EnvironmentCreate(ctx context.Context, input EnvironmentInput) (*Environment, error) {
39+
data, err := serializeInput(EnvironmentRequest{Environment: input})
40+
if err != nil {
41+
return nil, err
42+
}
43+
44+
resp, err := si.client.post(
45+
ctx,
46+
"/v3/environments/",
47+
url.Values{},
48+
si.headers(),
49+
data,
50+
)
51+
if err != nil {
52+
return nil, err
53+
}
54+
55+
result := &EnvironmentResponse{}
56+
if err = si.client.processResponse(resp, &result); err != nil {
57+
return nil, err
58+
}
59+
60+
return &result.Environment, nil
61+
}
62+
63+
func (si *StackInstance) EnvironmentUpdate(ctx context.Context, name string, input EnvironmentInput) (*Environment, error) {
64+
data, err := serializeInput(EnvironmentRequest{Environment: input})
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
resp, err := si.client.put(
70+
ctx,
71+
fmt.Sprintf("/v3/environments/%s", name),
72+
url.Values{},
73+
si.headers(),
74+
data,
75+
)
76+
if err != nil {
77+
return nil, err
78+
}
79+
80+
result := &EnvironmentResponse{}
81+
if err = si.client.processResponse(resp, &result); err != nil {
82+
return nil, err
83+
}
84+
85+
return &result.Environment, nil
86+
}
87+
88+
func (si *StackInstance) EnvironmentDelete(ctx context.Context, name string) error {
89+
resp, err := si.client.delete(
90+
ctx,
91+
fmt.Sprintf("/v3/environments/%s", name),
92+
url.Values{},
93+
si.headers(),
94+
nil,
95+
)
96+
if err != nil {
97+
return err
98+
}
99+
100+
result := &EnvironmentResponse{}
101+
if err = si.client.processResponse(resp, &result); err != nil {
102+
return err
103+
}
104+
105+
return nil
106+
}
107+
108+
func (si *StackInstance) EnvironmentFetch(ctx context.Context, name string) (*Environment, error) {
109+
resp, err := si.client.get(
110+
ctx,
111+
fmt.Sprintf("/v3/environments/%s", name),
112+
url.Values{},
113+
si.headers(),
114+
)
115+
if err != nil {
116+
return nil, err
117+
}
118+
119+
result := &EnvironmentResponse{}
120+
if err = si.client.processResponse(resp, &result); err != nil {
121+
return nil, err
122+
}
123+
124+
return &result.Environment, nil
125+
}
126+
127+
func (si *StackInstance) EnvironmentFetchAll(ctx context.Context, name string) ([]Environment, error) {
128+
resp, err := si.client.get(
129+
ctx,
130+
"/v3/environments",
131+
url.Values{},
132+
si.headers(),
133+
)
134+
if err != nil {
135+
return nil, err
136+
}
137+
138+
result := struct {
139+
Environments []Environment `json:"environments"`
140+
}{}
141+
142+
if err = si.client.processResponse(resp, &result); err != nil {
143+
return nil, err
144+
}
145+
146+
return result.Environments, nil
147+
}

0 commit comments

Comments
 (0)