{-# 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"