Files
elm-0.19-workshop/intro/part4/src/Request/Profile.elm
Richard Feldman d57dec1681 Rename more stuff
2018-08-05 04:49:15 -04:00

58 lines
1.6 KiB
Elm

module Request.Profile exposing (get, toggleFollow)
import Data.AuthToken exposing (AuthToken, withAuthorization)
import Data.Profile as Profile exposing (Profile)
import Data.User as User exposing (Username)
import Http
import HttpBuilder exposing (RequestBuilder, withExpect, withQueryParams)
import Json.Decode as Decode
import Request.Helpers exposing (apiUrl)
-- GET --
get : Username -> Maybe AuthToken -> Http.Request Profile
get username maybeToken =
apiUrl ("/profiles/" ++ User.usernameToString username)
|> HttpBuilder.get
|> HttpBuilder.withExpect (Http.expectJson (Decode.field "profile" Profile.decoder))
|> withAuthorization maybeToken
|> HttpBuilder.toRequest
-- FOLLOWING --
toggleFollow : Username -> Bool -> AuthToken -> Http.Request Profile
toggleFollow username following authToken =
if following then
unfollow username authToken
else
follow username authToken
follow : Username -> AuthToken -> Http.Request Profile
follow =
buildFollow HttpBuilder.post
unfollow : Username -> AuthToken -> Http.Request Profile
unfollow =
buildFollow HttpBuilder.delete
buildFollow :
(String -> RequestBuilder a)
-> Username
-> AuthToken
-> Http.Request Profile
buildFollow builderFromUrl username token =
[ apiUrl "/profiles", User.usernameToString username, "follow" ]
|> String.join "/"
|> builderFromUrl
|> withAuthorization (Just token)
|> withExpect (Http.expectJson (Decode.field "profile" Profile.decoder))
|> HttpBuilder.toRequest