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