lucienne-0.0.1: Lucienne/Controller/AddNewFeed.hs
module Lucienne.Controller.AddNewFeed
(addNewFeed,doAddNewFeed)
where
import Control.Monad.Trans (liftIO)
import Lucienne.Controller.Imports
import qualified Lucienne.View.AddNewFeed as View
import qualified Lucienne.Database as DB
import Lucienne.Fetch (fetchFeedByUrl)
import qualified Lucienne.Model.Feed as F
import qualified Lucienne.Model.FeedItem as FI
import qualified Lucienne.Url as Url
addNewFeed :: User -> Controller Response
addNewFeed _ = do
msg <- getMessages
ok $ toResponse $ View.addNewFeed msg
doAddNewFeed :: User -> Controller Response
doAddNewFeed user = do
decodeBody
url <- look "url"
alreadySubscribed <- lift $ DB.feedExists user url
if alreadySubscribed
then seeOther $ withMessage AlreadySubscribed Url.addNewFeed
else do
result <- liftIO $ fetchFeedByUrl url
case result of
Left msg -> badRequest $ toResponse $ msg
Right (feed,items) -> do
feedId <- lift $ DB.addFeed $ F.setOwner user feed
_ <- lift $ DB.addFeedItems $ map (FI.setOwner user . FI.setFeedId feedId) items
seeFeed feedId