/
Gateway.elm
350 lines (261 loc) · 8.27 KB
/
Gateway.elm
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
module Services.Gateway exposing (..)
import Domain.Core exposing (..)
import Services.Adapter exposing (..)
import Services.Encoders exposing (..)
import Services.Decoders exposing (..)
import String exposing (..)
import Http exposing (getString, Request, expectStringResponse, header)
import Json.Decode as Decode exposing (Decoder, field)
baseUrl : String
baseUrl =
-- "http://nikeza.io/"
"http://localhost:5000/"
tryLogin : Credentials -> (Result Http.Error JsonProvider -> msg) -> Cmd msg
tryLogin credentials msg =
let
url =
baseUrl ++ "login"
body =
encodeCredentials credentials |> Http.jsonBody
request =
Http.post url body providerDecoder
in
Http.send msg request
tryRegister : Form -> (Result Http.Error JsonProfile -> msg) -> Cmd msg
tryRegister form msg =
let
url =
baseUrl ++ "register"
body =
encodeRegistration form |> Http.jsonBody
request =
Http.post url body profileDecoder
in
Http.send msg request
updateThumbnail : UpdateThumbnailRequest -> (Result Http.Error String -> msg) -> Cmd msg
updateThumbnail updateThumbnailRequest msg =
let
url =
baseUrl ++ "updatethumbnail"
body =
encodeThumbnailUpdate updateThumbnailRequest |> Http.jsonBody
request =
Http.post url body Decode.string
in
Http.send msg request
thumbnail : Platform -> String -> (Result Http.Error JsonThumbnail -> msg) -> Cmd msg
thumbnail platform accessId msg =
let
url =
baseUrl ++ "thumbnail/" ++ (platform |> platformText |> String.toLower) ++ "/" ++ accessId
request =
Http.get url thumbnailDecoder
in
Http.send msg request
recentLinkProviders : Id -> (Result Http.Error (List JsonProvider) -> msg) -> Cmd msg
recentLinkProviders subscriberId msg =
let
url =
baseUrl ++ "recent/" ++ (idText subscriberId)
request =
Http.get url (Decode.list providerDecoder)
in
Http.send msg request
providers : (Result Http.Error (List JsonProvider) -> msg) -> Cmd msg
providers msg =
let
url =
baseUrl ++ "providers/wtf"
request =
Http.get url (Decode.list providerDecoder)
in
Http.send msg request
provider : Id -> (Result Http.Error JsonProvider -> msg) -> Cmd msg
provider id msg =
let
url =
baseUrl ++ "provider/" ++ (idText id)
request =
Http.get url providerDecoder
in
Http.send msg request
featuredTopics : Id -> List String -> (Result Http.Error JsonProvider -> msg) -> Cmd msg
featuredTopics id topics msg =
let
url =
baseUrl ++ "featuredtopics"
body =
(encodeFeaturedTopics id topics) |> Http.jsonBody
request =
Http.post url body providerDecoder
in
Http.send msg request
links : Id -> (Result Http.Error JsonProvider -> msg) -> Cmd msg
links profileId msg =
let
url =
baseUrl ++ "links/" ++ (idText profileId)
request =
Http.get url providerDecoder
in
Http.send msg request
topicLinks : Id -> Topic -> ContentType -> (Result Http.Error (List JsonLink) -> msg) -> Cmd msg
topicLinks profileId topic contentType msg =
let
url =
baseUrl ++ (idText profileId) ++ "/topiclinks"
body =
encodeId profileId |> Http.jsonBody
request =
Http.post url body (Decode.list linkDecoder)
in
Http.send msg request
addLink : Link -> (Result Http.Error JsonLink -> msg) -> Cmd msg
addLink link msg =
let
url =
baseUrl ++ "addlink"
body =
encodeLink link |> Http.jsonBody
request =
Http.post url body linkDecoder
in
Http.send msg request
removeLink : Link -> (Result Http.Error JsonLink -> msg) -> Cmd msg
removeLink link msg =
let
url =
baseUrl ++ "removelink"
body =
encodeLink link |> Http.jsonBody
request =
Http.post url body linkDecoder
in
Http.send msg request
featureLink : FeatureLink -> (Result Http.Error Int -> msg) -> Cmd msg
featureLink toggleRequest msg =
let
url =
baseUrl ++ "featurelink"
body =
encodeFeatureLink toggleRequest |> Http.jsonBody
request =
Http.post url body Decode.int
in
Http.send msg request
sources : Id -> (Result Http.Error (List JsonSource) -> msg) -> Cmd msg
sources profileId msg =
let
url =
baseUrl ++ "sources/" ++ idText profileId
request =
Http.get url (Decode.list sourceDecoder)
in
Http.send msg request
addSource : Source -> (Result Http.Error JsonSource -> msg) -> Cmd msg
addSource source msg =
let
url =
baseUrl ++ "addsource"
body =
encodeSource source |> Http.jsonBody
request =
Http.post url body sourceDecoder
in
Http.send msg request
removeSource : Id -> (Result Http.Error String -> msg) -> Cmd msg
removeSource sourceId msg =
case (idText sourceId) |> String.toInt of
Ok id ->
let
url =
baseUrl ++ "removesource/" ++ (id |> toString)
request =
Http.get url Decode.string
in
Http.send msg request
Err _ ->
Cmd.none
bootstrap : (Result Http.Error JsonBootstrap -> msg) -> Cmd msg
bootstrap msg =
let
url =
baseUrl ++ "bootstrap/wtf"
request =
Http.get url bootstrapDecoder
in
Http.send msg request
updateProfile : Profile -> (Result Http.Error JsonProfile -> msg) -> Cmd msg
updateProfile profile msg =
let
url =
baseUrl ++ "updateprofile"
body =
encodeProfile profile |> Http.jsonBody
request =
Http.post url body profileDecoder
in
Http.send msg request
updateProfileAndTopics : ProfileAndTopics -> (Result Http.Error JsonProvider -> msg) -> Cmd msg
updateProfileAndTopics profileAndTopics msg =
let
url =
baseUrl ++ "updateprovider"
body =
encodeProfileAndTopics profileAndTopics |> Http.jsonBody
request =
Http.post url body providerDecoder
in
Http.send msg request
suggestedTopics : String -> (Result Http.Error (List String) -> msg) -> Cmd msg
suggestedTopics search msg =
if not <| isEmpty search && String.length search > 1 then
let
url =
baseUrl ++ "suggestedtopics/" ++ (Http.encodeUri search)
request =
Http.get url (Decode.list Decode.string)
in
Http.send msg request
else
Cmd.none
subscriptions : Id -> (Result Http.Error (List JsonProvider) -> msg) -> Cmd msg
subscriptions profileId msg =
let
url =
baseUrl ++ "subscriptions/" ++ idText profileId
request =
Http.get url (Decode.list providerDecoder)
in
Http.send msg request
followers : Id -> (Result Http.Error (List JsonProvider) -> msg) -> Cmd msg
followers profileId msg =
let
url =
baseUrl ++ "followers/" ++ idText profileId
request =
Http.get url (Decode.list providerDecoder)
in
Http.send msg request
follow : SubscriptionRequest -> (Result Http.Error JsonSubscriptionActionResponse -> msg) -> Cmd msg
follow followRequest msg =
let
url =
baseUrl ++ "follow"
body =
encodeSubscriptionRequest followRequest |> Http.jsonBody
request =
Http.post url body subscriptionActionResponseDecoder
in
Http.send msg request
unsubscribe : SubscriptionRequest -> (Result Http.Error JsonSubscriptionActionResponse -> msg) -> Cmd msg
unsubscribe unsubscribeRequest msg =
let
url =
baseUrl ++ "unsubscribe"
body =
encodeSubscriptionRequest unsubscribeRequest |> Http.jsonBody
request =
Http.post url body subscriptionActionResponseDecoder
in
Http.send msg request