From f1697e5fd734ecb9208f18635e3350ce4d0784c9 Mon Sep 17 00:00:00 2001 From: Trolli Schmittlauch Date: Thu, 23 Jul 2020 16:24:45 +0200 Subject: [PATCH] re-structure post API, placeholder handlers contributes to #41, #32 --- src/Hash2Pub/FediChordTypes.hs | 2 +- src/Hash2Pub/PostService.hs | 67 ++++++++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/Hash2Pub/FediChordTypes.hs b/src/Hash2Pub/FediChordTypes.hs index f1ca5b6..a91c369 100644 --- a/src/Hash2Pub/FediChordTypes.hs +++ b/src/Hash2Pub/FediChordTypes.hs @@ -607,7 +607,7 @@ data FediChordConf = FediChordConf -- ^ list of potential bootstrapping nodes , confBootstrapSamplingInterval :: Int -- ^ pause between sampling the own ID through bootstrap nodes, in seconds - , confMaxLookupCacheAge :: POSIXTime + , confMaxLookupCacheAge :: POSIXTime -- ^ maximum age of lookup cache entries in seconds } deriving (Show, Eq) diff --git a/src/Hash2Pub/PostService.hs b/src/Hash2Pub/PostService.hs index 5a8fc3a..5f51270 100644 --- a/src/Hash2Pub/PostService.hs +++ b/src/Hash2Pub/PostService.hs @@ -1,17 +1,60 @@ -{-# LANGUAGE DataKinds #-} -{-# LANGUAGE TypeOperators #-} +{-# LANGUAGE DataKinds #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE TypeOperators #-} module Hash2Pub.PostService where -import Servant -import qualified Data.Text as Txt +import Data.Maybe (fromMaybe) +import qualified Data.Text as Txt -type ServiceAPI = "relay" :> "inbox" :> PostCreated '[PlainText] Txt.Text - -- ^ delivery endpoint of new posts to relay - :<|> "relay" :> "subscribers" :> Post '[PlainText] Txt.Text - -- ^ endpoint for delivering the subscription and outstanding queue - :<|> "post" :> Capture "postid" Txt.Text :> Get '[PlainText] Txt.Text - :<|> "tags" :> Capture "hashtag" Txt.Text :> PostCreated '[PlainText] Txt.Text - :<|> "tags" :> Capture "hashtag" Txt.Text :> "subscribe" :> Header "Origin" Txt.Text :> Get '[PlainText] Txt.Text - :<|> "tags" :> Capture "hashtag" Txt.Text :> "unsubscribe" :> Header "Origin" Txt.Text :> Get '[PlainText] Txt.Text +import Servant + +type PostServiceAPI = "relay" :> "inbox" :> ReqBody '[PlainText] Txt.Text :> PostCreated '[PlainText] Txt.Text + -- ^ delivery endpoint of newly published posts of the relay's instance + :<|> "relay" :> "subscribers" :> ReqBody '[PlainText] Txt.Text :> Post '[PlainText] Txt.Text + -- ^ endpoint for delivering the subscriptions and outstanding queue + :<|> "post" :> Capture "postid" Txt.Text :> Get '[PlainText] Txt.Text + -- ^ fetch endpoint for posts, full post ID is http://$domain/post/$postid + :<|> "posts" :> ReqBody '[PlainText] Txt.Text :> Post '[PlainText] Txt.Text + -- ^ endpoint for fetching multiple posts at once + :<|> "tags" :> Capture "hashtag" Txt.Text :> ReqBody '[PlainText] Txt.Text :> PostCreated '[PlainText] Txt.Text + -- ^ delivery endpoint for posts of $tag at subscribing instance + :<|> "tags" :> Capture "hashtag" Txt.Text :> "subscribe" :> Header "Origin" Txt.Text :> Get '[PlainText] Integer + -- ^ endpoint for subscribing the instance specified in + -- the Origin header to $hashtag. + -- Returns subscription lease time in seconds. + :<|> "tags" :> Capture "hashtag" Txt.Text :> "unsubscribe" :> Header "Origin" Txt.Text :> Get '[PlainText] Txt.Text + -- ^ endpoint for unsubscribing the instance specified in + -- the Origin header to $hashtag + + +postServer :: Server PostServiceAPI +postServer = relayInbox + :<|> subscriptionDelivery + :<|> postFetch + :<|> postMultiFetch + :<|> tagDelivery + :<|> tagSubscribe + :<|> tagUnsubscribe + +relayInbox :: Txt.Text -> Handler Txt.Text +relayInbox post = pure $ "Here be InboxDragons with " <> post + +subscriptionDelivery :: Txt.Text -> Handler Txt.Text +subscriptionDelivery subList = pure $ "Here be Subscription List dragons: " <> subList + +postFetch :: Txt.Text -> Handler Txt.Text +postFetch postID = pure $ "Here be a post with dragon ID " <> postID + +postMultiFetch :: Txt.Text -> Handler Txt.Text +postMultiFetch postIDs = pure $ "Here be multiple post dragons: " + <> (Txt.unwords . Txt.lines $ postIDs) + +tagDelivery :: Txt.Text -> Txt.Text -> Handler Txt.Text +tagDelivery hashtag posts = pure $ "Here be #" <> hashtag <> " dragons with " <> posts + +tagSubscribe :: Txt.Text -> Maybe Txt.Text -> Handler Integer +tagSubscribe hashtag origin = pure 42 + +tagUnsubscribe :: Txt.Text -> Maybe Txt.Text -> Handler Txt.Text +tagUnsubscribe hashtag origin = pure $ "Here be a dragon unsubscription from " <> fromMaybe "Nothing" origin <> " to " <> hashtag