54 lines
1.7 KiB
Elm
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
|