Files
elm-0.19-workshop/intro-to-elm/part8/src/Request/Article/Comments.elm
Richard Feldman 7793c69762 Move stuff
2018-08-05 04:13:33 -04:00

54 lines
1.7 KiB
Elm

module Request.Article.Comments exposing (delete, list, post)
import Data.Article as Article exposing (Article, Tag, slugToString)
import Data.Article.Comment as Comment exposing (Comment, CommentId)
import Data.AuthToken exposing (AuthToken, withAuthorization)
import Http
import HttpBuilder exposing (RequestBuilder, withExpect, withQueryParams)
import Json.Decode as Decode
import Json.Encode as Encode exposing (Value)
import Request.Helpers exposing (apiUrl)
-- LIST --
list : Maybe AuthToken -> Article.Slug -> Http.Request (List Comment)
list maybeToken slug =
apiUrl ("/articles/" ++ Article.slugToString slug ++ "/comments")
|> HttpBuilder.get
|> HttpBuilder.withExpect (Http.expectJson (Decode.field "comments" (Decode.list Comment.decoder)))
|> withAuthorization maybeToken
|> HttpBuilder.toRequest
-- POST --
post : Article.Slug -> String -> AuthToken -> Http.Request Comment
post slug body token =
apiUrl ("/articles/" ++ Article.slugToString slug ++ "/comments")
|> HttpBuilder.post
|> HttpBuilder.withBody (Http.jsonBody (encodeCommentBody body))
|> HttpBuilder.withExpect (Http.expectJson (Decode.field "comment" Comment.decoder))
|> withAuthorization (Just token)
|> HttpBuilder.toRequest
encodeCommentBody : String -> Value
encodeCommentBody body =
Encode.object [ ( "comment", Encode.object [ ( "body", Encode.string body ) ] ) ]
-- DELETE --
delete : Article.Slug -> CommentId -> AuthToken -> Http.Request ()
delete slug commentId token =
apiUrl ("/articles/" ++ Article.slugToString slug ++ "/comments/" ++ Comment.idToString commentId)
|> HttpBuilder.delete
|> withAuthorization (Just token)
|> HttpBuilder.toRequest