aboutsummaryrefslogtreecommitdiff
path: root/src/server/Application.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/Application.hs')
-rw-r--r--src/server/Application.hs62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/server/Application.hs b/src/server/Application.hs
new file mode 100644
index 0000000..344b38c
--- /dev/null
+++ b/src/server/Application.hs
@@ -0,0 +1,62 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Application
+ ( getIndexAction
+ , getUsersAction
+ , getPaymentsAction
+ , addUserAction
+ , deleteUserAction
+ , insertPaymentAction
+ ) where
+
+import Web.Scotty
+
+import Network.HTTP.Types.Status (badRequest400)
+
+import Database.Persist
+
+import Control.Monad.IO.Class (liftIO)
+
+import Data.Text (Text)
+import Data.String (fromString)
+
+import Model.Database (runDb)
+import Model.User
+import Model.Payment
+
+import View.Page (page)
+
+getIndexAction :: ActionM ()
+getIndexAction = do
+ html $ page
+
+getUsersAction :: ActionM ()
+getUsersAction = do
+ users <- liftIO $ runDb getUsers
+ html . fromString . show $ users
+
+getPaymentsAction :: ActionM ()
+getPaymentsAction = do
+ payments <- liftIO $ runDb getPayments
+ json payments
+
+addUserAction :: Text -> Text -> ActionM ()
+addUserAction email name = do
+ _ <- liftIO . runDb $ insertUser email name
+ html "Ok"
+
+deleteUserAction :: Text -> ActionM ()
+deleteUserAction email = do
+ _ <- liftIO . runDb $ deleteUser email
+ html "Ok"
+
+insertPaymentAction :: Text -> Text -> Int -> ActionM ()
+insertPaymentAction email name cost = do
+ maybeUser <- liftIO . runDb $ getUser email
+ case maybeUser of
+ Just user -> do
+ _ <- liftIO . runDb $ insertPayment (entityKey user) name cost
+ return ()
+ Nothing -> do
+ status badRequest400
+ html "Not found"