Add part5
This commit is contained in:
94
part5/src/Request/User.elm
Normal file
94
part5/src/Request/User.elm
Normal file
@@ -0,0 +1,94 @@
|
||||
module Request.User exposing (edit, login, register, storeSession)
|
||||
|
||||
import Data.AuthToken exposing (AuthToken, withAuthorization)
|
||||
import Data.User as User exposing (User)
|
||||
import Http
|
||||
import HttpBuilder exposing (RequestBuilder, withExpect, withQueryParams)
|
||||
import Json.Decode as Decode
|
||||
import Json.Encode as Encode
|
||||
import Json.Encode.Extra as EncodeExtra
|
||||
import Ports
|
||||
import Request.Helpers exposing (apiUrl)
|
||||
|
||||
|
||||
storeSession : User -> Cmd msg
|
||||
storeSession user =
|
||||
User.encode user
|
||||
|> Encode.encode 0
|
||||
|> Just
|
||||
|> Ports.storeSession
|
||||
|
||||
|
||||
login : { r | email : String, password : String } -> Http.Request User
|
||||
login { email, password } =
|
||||
let
|
||||
user =
|
||||
Encode.object
|
||||
[ ( "email", Encode.string email )
|
||||
, ( "password", Encode.string password )
|
||||
]
|
||||
|
||||
body =
|
||||
Encode.object [ ( "user", user ) ]
|
||||
|> Http.jsonBody
|
||||
in
|
||||
Decode.field "user" User.decoder
|
||||
|> Http.post (apiUrl "/users/login") body
|
||||
|
||||
|
||||
register : { r | username : String, email : String, password : String } -> Http.Request User
|
||||
register { username, email, password } =
|
||||
let
|
||||
user =
|
||||
Encode.object
|
||||
[ ( "username", Encode.string username )
|
||||
, ( "email", Encode.string email )
|
||||
, ( "password", Encode.string password )
|
||||
]
|
||||
|
||||
body =
|
||||
Encode.object [ ( "user", user ) ]
|
||||
|> Http.jsonBody
|
||||
in
|
||||
Decode.field "user" User.decoder
|
||||
|> Http.post (apiUrl "/users") body
|
||||
|
||||
|
||||
edit :
|
||||
{ r
|
||||
| username : String
|
||||
, email : String
|
||||
, bio : String
|
||||
, password : Maybe String
|
||||
, image : Maybe String
|
||||
}
|
||||
-> Maybe AuthToken
|
||||
-> Http.Request User
|
||||
edit { username, email, bio, password, image } maybeToken =
|
||||
let
|
||||
updates =
|
||||
[ Just ( "username", Encode.string username )
|
||||
, Just ( "email", Encode.string email )
|
||||
, Just ( "bio", Encode.string bio )
|
||||
, Just ( "image", EncodeExtra.maybe Encode.string image )
|
||||
, Maybe.map (\pass -> ( "password", Encode.string pass )) password
|
||||
]
|
||||
|> List.filterMap identity
|
||||
|
||||
body =
|
||||
( "user", Encode.object updates )
|
||||
|> List.singleton
|
||||
|> Encode.object
|
||||
|> Http.jsonBody
|
||||
|
||||
expect =
|
||||
User.decoder
|
||||
|> Decode.field "user"
|
||||
|> Http.expectJson
|
||||
in
|
||||
apiUrl "/user"
|
||||
|> HttpBuilder.put
|
||||
|> HttpBuilder.withExpect expect
|
||||
|> HttpBuilder.withBody body
|
||||
|> withAuthorization maybeToken
|
||||
|> HttpBuilder.toRequest
|
||||
Reference in New Issue
Block a user