@@ -3,6 +3,7 @@ package api
3
3
import (
4
4
"context"
5
5
"fmt"
6
+ "strings"
6
7
7
8
"github.com/carlmjohnson/requests"
8
9
"github.com/sailhouse/sailhouse/models"
@@ -19,34 +20,46 @@ func NewSailhouseClient(token string) *SailhouseClient {
19
20
return & SailhouseClient {token , team }
20
21
}
21
22
23
+ func (c * SailhouseClient ) getTeamURL (components ... string ) string {
24
+ url := fmt .Sprintf ("https://api.sailhouse.dev/teams/%s" , c .team )
25
+ combined := strings .Join (components , "/" )
26
+
27
+ if combined != "" {
28
+ url += "/" + combined
29
+ }
30
+
31
+ return url
32
+ }
33
+
34
+ func (c * SailhouseClient ) req () * requests.Builder {
35
+ return requests .
36
+ URL ("https://api.sailhouse.dev" ).
37
+ Header ("Authorization" , c .token )
38
+ }
39
+
22
40
func (c * SailhouseClient ) GetTeams (ctx context.Context ) ([]models.Team , error ) {
23
41
teams := []models.Team {}
24
42
25
- err := requests .
26
- URL ("https://api.sailhouse.dev/teams" ).
27
- Header ("Authorization" , c .token ).
43
+ err := c .req ().
44
+ Path ("teams" ).
28
45
ToJSON (& teams ).
29
46
Fetch (ctx )
30
47
31
48
return teams , err
32
49
}
33
50
34
51
func (c * SailhouseClient ) CreateApp (ctx context.Context , name string ) error {
35
- return requests .
36
- URL ("https://api.sailhouse.dev/apps" ).
37
- Header ("Authorization" , c .token ).
38
- Header ("sailhouse-team" , c .team ).
52
+ return c .req ().
53
+ Pathf ("/teams/%s/apps/%s" , c .team , name ).
39
54
BodyJSON (map [string ]string {"name" : name , "slug" : name }).
40
55
Fetch (ctx )
41
56
}
42
57
43
58
func (c * SailhouseClient ) GetApps (ctx context.Context ) ([]models.App , error ) {
44
59
apps := []models.App {}
45
60
46
- err := requests .
47
- URL ("https://api.sailhouse.dev/apps" ).
48
- Header ("Authorization" , c .token ).
49
- Header ("sailhouse-team" , c .team ).
61
+ err := c .req ().
62
+ Pathf ("/teams/%s/apps" , c .team ).
50
63
ToJSON (& apps ).
51
64
Fetch (ctx )
52
65
@@ -60,11 +73,8 @@ func (c *SailhouseClient) GetApps(ctx context.Context) ([]models.App, error) {
60
73
func (c * SailhouseClient ) GetTopics (ctx context.Context , appID string ) ([]models.Topic , error ) {
61
74
topics := []models.Topic {}
62
75
63
- err := requests .
64
- URL ("https://api.sailhouse.dev/topics" ).
65
- Header ("sailhouse-app" , appID ).
66
- Header ("Authorization" , c .token ).
67
- Header ("sailhouse-team" , c .team ).
76
+ err := c .req ().
77
+ Pathf ("/teams/%s/apps/%s/topics" , c .team , appID ).
68
78
ToJSON (& topics ).
69
79
Fetch (ctx )
70
80
@@ -82,11 +92,8 @@ type CreateTokenResponse struct {
82
92
func (c * SailhouseClient ) CreateToken (ctx context.Context , appID string ) (string , error ) {
83
93
var resp CreateTokenResponse
84
94
85
- err := requests .
86
- URL ("https://api.sailhouse.dev/apps/tokens" ).
87
- Header ("sailhouse-app" , appID ).
88
- Header ("Authorization" , c .token ).
89
- Header ("sailhouse-team" , c .team ).
95
+ err := c .req ().
96
+ Pathf ("/teams/%s/apps/%s/tokens" , c .team , appID ).
90
97
Method ("POST" ).
91
98
ToJSON (& resp ).
92
99
Fetch (ctx )
@@ -101,11 +108,8 @@ func (c *SailhouseClient) CreateToken(ctx context.Context, appID string) (string
101
108
func (c * SailhouseClient ) GetTokens (ctx context.Context , appID string ) ([]models.TokenPreview , error ) {
102
109
var resp []models.TokenPreview
103
110
104
- err := requests .
105
- URL ("https://api.sailhouse.dev/apps/tokens" ).
106
- Header ("sailhouse-app" , appID ).
107
- Header ("Authorization" , c .token ).
108
- Header ("sailhouse-team" , c .team ).
111
+ err := c .req ().
112
+ Pathf ("/teams/%s/apps/%s/tokens" , c .team , appID ).
109
113
ToJSON (& resp ).
110
114
Fetch (ctx )
111
115
@@ -117,43 +121,31 @@ func (c *SailhouseClient) GetTokens(ctx context.Context, appID string) ([]models
117
121
}
118
122
119
123
func (c * SailhouseClient ) CreateTopic (ctx context.Context , appID , slug string ) error {
120
- return requests .
121
- URL ("https://api.sailhouse.dev/topics" ).
122
- Header ("sailhouse-app" , appID ).
123
- Header ("Authorization" , c .token ).
124
- Header ("sailhouse-team" , c .team ).
124
+ return c .req ().
125
+ Pathf ("/teams/%s/apps/%s/topics" , c .team , appID ).
125
126
BodyJSON (map [string ]any {"slug" : slug , "subscriptions" : []string {}}).
126
127
Fetch (ctx )
127
128
}
128
129
129
130
func (c * SailhouseClient ) DeleteTopic (ctx context.Context , appID , slug string ) error {
130
- return requests .
131
- URL (fmt .Sprintf ("https://api.sailhouse.dev/topics/%s" , slug )).
132
- Header ("sailhouse-app" , appID ).
133
- Header ("Authorization" , c .token ).
134
- Header ("sailhouse-team" , c .team ).
131
+ return c .req ().
132
+ Pathf ("/teams/%s/apps/%s/topics/%s" , c .team , appID , slug ).
135
133
Method ("DELETE" ).
136
134
Fetch (ctx )
137
135
}
138
136
139
137
func (c * SailhouseClient ) CreateTopicWithKey (ctx context.Context , appID , slug , key string ) error {
140
- return requests .
141
- URL ("https://api.sailhouse.dev/topics" ).
142
- Header ("sailhouse-app" , appID ).
143
- Header ("Authorization" , c .token ).
144
- Header ("sailhouse-team" , c .team ).
138
+ return c .req ().
139
+ Pathf ("/teams/%s/apps/%s/topics/%s" , c .team , appID , slug ).
145
140
BodyJSON (map [string ]any {"slug" : slug , "subscriptions" : []string {}, "schema_key" : key }).
146
141
Fetch (ctx )
147
142
}
148
143
149
144
func (c * SailhouseClient ) GetSubscriptions (ctx context.Context , appID , topicSlug string ) ([]models.Subscription , error ) {
150
145
subscriptions := []models.Subscription {}
151
146
152
- err := requests .
153
- URL (fmt .Sprintf ("https://api.sailhouse.dev/topics/%s/subscriptions" , topicSlug )).
154
- Header ("sailhouse-app" , appID ).
155
- Header ("Authorization" , c .token ).
156
- Header ("sailhouse-team" , c .team ).
147
+ err := c .req ().
148
+ Pathf ("/teams/%s/apps/%s/topics/%s/subscriptions" , c .team , appID , topicSlug ).
157
149
ToJSON (& subscriptions ).
158
150
Fetch (ctx )
159
151
@@ -167,11 +159,8 @@ func (c *SailhouseClient) GetSubscriptions(ctx context.Context, appID, topicSlug
167
159
func (c * SailhouseClient ) GetSubscription (ctx context.Context , appID , topicSlug , subscriptionSlug string ) (* models.Subscription , error ) {
168
160
subscription := models.Subscription {}
169
161
170
- err := requests .
171
- URL (fmt .Sprintf ("https://api.sailhouse.dev/topics/%s/subscriptions/%s" , topicSlug , subscriptionSlug )).
172
- Header ("sailhouse-app" , appID ).
173
- Header ("Authorization" , c .token ).
174
- Header ("sailhouse-team" , c .team ).
162
+ err := c .req ().
163
+ Pathf ("/teams/%s/apps/%s/topics/%s/subscriptions/%s" , c .team , appID , topicSlug , subscriptionSlug ).
175
164
ToJSON (& subscription ).
176
165
Fetch (ctx )
177
166
@@ -217,11 +206,8 @@ func (c *SailhouseClient) CreateSubscription(ctx context.Context, appID string,
217
206
}
218
207
219
208
var sub models.Subscription
220
- err := requests .
221
- URL (fmt .Sprintf ("https://api.sailhouse.dev/topics/%s/subscriptions" , newSub .TopicSlug )).
222
- Header ("sailhouse-app" , appID ).
223
- Header ("Authorization" , c .token ).
224
- Header ("sailhouse-team" , c .team ).
209
+ err := c .req ().
210
+ Pathf ("/teams/%s/apps/%s/topics/%s/subscriptions" , c .team , appID , newSub .TopicSlug ).
225
211
BodyJSON (body ).
226
212
ToJSON (& sub ).
227
213
Fetch (ctx )
@@ -230,11 +216,8 @@ func (c *SailhouseClient) CreateSubscription(ctx context.Context, appID string,
230
216
}
231
217
232
218
func (c * SailhouseClient ) DeleteSubscription (ctx context.Context , appID , topicSlug , subscriptionSlug string ) error {
233
- return requests .
234
- URL (fmt .Sprintf ("https://api.sailhouse.dev/topics/%s/subscriptions/%s" , topicSlug , subscriptionSlug )).
235
- Header ("sailhouse-app" , appID ).
236
- Header ("Authorization" , c .token ).
237
- Header ("sailhouse-team" , c .team ).
219
+ return c .req ().
220
+ Pathf ("/teams/%s/apps/%s/topics/%s/subscriptions/%s" , c .team , appID , topicSlug , subscriptionSlug ).
238
221
Method ("DELETE" ).
239
222
Fetch (ctx )
240
223
}
@@ -243,36 +226,3 @@ type GetSchema struct {
243
226
Topics []models.Topic `json:"topics"`
244
227
Subscriptions []models.Subscription `json:"subscriptions"`
245
228
}
246
-
247
- func (c * SailhouseClient ) GetResourcesForSchema (ctx context.Context , appSlug , schemaKey string ) (GetSchema , error ) {
248
- var resp GetSchema
249
-
250
- err := requests .
251
- URL (fmt .Sprintf ("https://api.sailhouse.dev/schema/%s/resources" , schemaKey )).
252
- Header ("sailhouse-app" , appSlug ).
253
- Header ("Authorization" , c .token ).
254
- Header ("sailhouse-team" , c .team ).
255
- ToJSON (& resp ).
256
- Fetch (ctx )
257
-
258
- return resp , err
259
- }
260
-
261
- type GetAppUsage struct {
262
- AppID string `json:"app_id"`
263
- Count int `json:"count"`
264
- }
265
-
266
- func (c * SailhouseClient ) GetAppUsage (ctx context.Context , appSlug string ) (GetAppUsage , error ) {
267
- var resp GetAppUsage
268
-
269
- err := requests .
270
- URL ("https://api.sailhouse.dev/app/usage" ).
271
- Header ("sailhouse-app" , appSlug ).
272
- Header ("Authorization" , c .token ).
273
- Header ("sailhouse-team" , c .team ).
274
- ToJSON (& resp ).
275
- Fetch (ctx )
276
-
277
- return resp , err
278
- }
0 commit comments