lucienne-0.0.1: Lucienne/Model/Feed.hs
module Lucienne.Model.Feed
( Feed, id, ownerId, title, url, newFeed, setOwner
, feedByUrlQuery, feedByIdQuery, feedsQuery)
where
import Prelude hiding (id)
import Data.Maybe (fromJust)
import qualified Data.CompactString.UTF8 as CS
import Data.Bson (Document,ObjectId,(=:),at)
import Lucienne.DatabaseAble (DatabaseAble(..))
import Lucienne.Model.Util (maybeAddId)
import qualified Lucienne.Model.User as U
data Feed = Feed { _id :: Maybe ObjectId
, _ownerId :: Maybe String
, title :: String
, url :: String
}
newFeed :: String -> String -> Feed
newFeed = Feed Nothing Nothing
id :: Feed -> ObjectId
id = fromJust . _id
ownerId :: Feed -> String
ownerId = fromJust . _ownerId
setOwner :: U.User -> Feed -> Feed
setOwner owner feed = feed { _ownerId = Just $ U.name owner }
instance DatabaseAble Feed where
toDocument feed = maybeAddId _id feed $
[ "ownerId" =: CS.pack (ownerId feed)
, "title" =: CS.pack (title feed)
, "url" =: CS.pack (url feed)
]
fromDocument document =
let _id = "_id" `at` document
ownerId = CS.unpack $ "ownerId" `at` document
title = CS.unpack $ "title" `at` document
url = CS.unpack $ "url" `at` document
in
Feed (Just _id) (Just ownerId) title url
feedByUrlQuery :: String -> String -> Document
feedByUrlQuery ownerId url =
[ "ownerId" =: CS.pack ownerId
, "url" =: CS.pack url
]
feedByIdQuery :: String -> ObjectId -> Document
feedByIdQuery ownerId _id =
[ "ownerId" =: CS.pack ownerId
, "_id" =: _id
]
feedsQuery :: String -> Document
feedsQuery ownerId = ["ownerId" =: CS.pack ownerId]