{-# OPTIONS_GHC -fno-warn-orphans #-} module Model.User ( list , get , create , delete ) where import Data.Maybe (listToMaybe) import Data.Text (Text) import Data.Time.Clock (getCurrentTime) import Database.SQLite.Simple (FromRow (fromRow), Only (Only)) import qualified Database.SQLite.Simple as SQLite import Prelude hiding (id) import Common.Model (User (..), UserId) import Model.Query (Query (Query)) instance FromRow User where fromRow = User <$> SQLite.field <*> SQLite.field <*> SQLite.field <*> SQLite.field list :: Query [User] list = Query (\conn -> SQLite.query_ conn "SELECT * from user ORDER BY creation DESC") get :: Text -> Query (Maybe User) get userEmail = Query (\conn -> listToMaybe <$> SQLite.query conn "SELECT * FROM user WHERE email = ? LIMIT 1" (Only userEmail) ) create :: Text -> Text -> Query UserId create userEmail userName = Query (\conn -> do now <- getCurrentTime SQLite.execute conn "INSERT INTO user (creation, email, name) VALUES (?, ?, ?)" (now, userEmail, userName) SQLite.lastInsertRowId conn ) delete :: Text -> Query () delete userEmail = Query (\conn -> SQLite.execute conn "DELETE FROM user WHERE email = ?" (Only userEmail) )