58 lines
1.6 KiB
Elm
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
|