module Persistence.User ( list , get ) where import qualified Data.Maybe as Maybe import Data.Text (Text) import Database.SQLite.Simple (FromRow (fromRow), NamedParam ((:=))) import qualified Database.SQLite.Simple as SQLite import Prelude hiding (id) import Common.Model (User (..)) import Model.Query (Query (Query)) newtype Row = Row User instance FromRow Row where fromRow = Row <$> (User <$> SQLite.field <*> SQLite.field <*> SQLite.field <*> SQLite.field) list :: Query [User] list = Query (\conn -> do map (\(Row u) -> u) <$> SQLite.query_ conn "SELECT * from user ORDER BY creation DESC" ) get :: Text -> Query (Maybe User) get email = Query (\conn -> do fmap (\(Row u) -> u) . Maybe.listToMaybe <$> SQLite.queryNamed conn "SELECT * FROM user WHERE email = :email LIMIT 1" [ ":email" := email ] )