aboutsummaryrefslogtreecommitdiff
path: root/src/server/Model/User.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/Model/User.hs')
-rw-r--r--src/server/Model/User.hs70
1 files changed, 46 insertions, 24 deletions
diff --git a/src/server/Model/User.hs b/src/server/Model/User.hs
index ab39822..c8a0d53 100644
--- a/src/server/Model/User.hs
+++ b/src/server/Model/User.hs
@@ -1,42 +1,64 @@
+{-# LANGUAGE OverloadedStrings #-}
+
module Model.User
- ( list
+ ( UserId
+ , User(..)
+ , list
, getUser
- , getJson
, findUser
, createUser
, deleteUser
) where
+import Data.Int (Int64)
+import Data.List (find)
+import Data.Maybe (listToMaybe)
import Data.Text (Text)
import Data.Time.Clock (getCurrentTime)
-import Data.List (find)
+import Data.Time.Clock (UTCTime)
+import Database.SQLite.Simple (Only(Only), FromRow(fromRow))
+import Prelude hiding (id)
+import qualified Database.SQLite.Simple as SQLite
-import Control.Monad.IO.Class (liftIO)
+import Model.Query (Query(Query))
-import Database.Persist
+type UserId = Int64
-import Model.Database
-import qualified Model.Json.User as Json
+data User = User
+ { id :: UserId
+ , creation :: UTCTime
+ , email :: Text
+ , name :: Text
+ } deriving Show
-list :: Persist [Entity User]
-list = selectList [] [Desc UserCreation]
+instance FromRow User where
+ fromRow = User <$> SQLite.field <*> SQLite.field <*> SQLite.field <*> SQLite.field
-getUser :: Text -> Persist (Maybe (Entity User))
-getUser email = selectFirst [UserEmail ==. email] []
+list :: Query [User]
+list = Query (\conn -> SQLite.query_ conn "SELECT * from user ORDER BY creation DESC")
-findUser :: UserId -> [Entity User] -> Maybe User
-findUser i = fmap entityVal . find ((==) i . entityKey)
+getUser :: Text -> Query (Maybe User)
+getUser userEmail =
+ Query (\conn -> listToMaybe <$>
+ SQLite.query conn "SELECT * FROM user WHERE email = ? LIMIT 1" (Only userEmail)
+ )
-getJson :: Entity User -> Json.User
-getJson userEntity =
- let user = entityVal userEntity
- in Json.User (entityKey userEntity) (userName user) (userEmail user)
+findUser :: UserId -> [User] -> Maybe User
+findUser userId = find ((==) userId . id)
-createUser :: Text -> Text -> Persist UserId
-createUser email name = do
- now <- liftIO getCurrentTime
- insert $ User now email name
+createUser :: Text -> Text -> Query UserId
+createUser userEmail userName =
+ Query (\conn -> do
+ now <- getCurrentTime
+ SQLite.execute
+ conn
+ "INSERT INTO user (creation, email, name) VALUES (?, ?, ?)"
+ (now, userEmail, userName)
+ SQLite.lastInsertRowId conn
+ )
-deleteUser :: Text -> Persist ()
-deleteUser email =
- deleteWhere [UserEmail ==. email]
+deleteUser :: Text -> Query ()
+deleteUser userEmail =
+ Query (\conn ->
+ SQLite.execute conn "DELETE FROM user WHERE email = ?" (Only userEmail)
+ )