module Controller.Payment ( getPaymentsAction , createPaymentAction , deletePaymentAction , getTotalPaymentsAction ) where import Web.Scotty import Network.HTTP.Types.Status (ok200, badRequest400) import Database.Persist import Control.Monad.IO.Class (liftIO) import Data.Text (Text) import qualified Secure import Model.Database import Model.Payment import Model.Json.Message import Model.Message import Model.Message.Key (Key(PaymentNotDeleted)) getPaymentsAction :: ActionM () getPaymentsAction = Secure.loggedAction (\_ -> do payments <- liftIO $ runDb getPayments json payments ) createPaymentAction :: Text -> Int -> ActionM () createPaymentAction name cost = Secure.loggedAction (\user -> do paymentKey <- liftIO . runDb $ createPayment (entityKey user) name cost json . Message . paymentKeyToText $ paymentKey ) deletePaymentAction :: Text -> ActionM () deletePaymentAction paymentId = Secure.loggedAction (\user -> do deleted <- liftIO . runDb $ deleteOwnPayment user (textToKey paymentId) if deleted then status ok200 else do status badRequest400 json . Message . getMessage $ PaymentNotDeleted ) getTotalPaymentsAction :: ActionM () getTotalPaymentsAction = Secure.loggedAction (\_ -> do (liftIO . runDb $ getTotalPayments) >>= json )