module Controller.Payment ( getPaymentsAction , createPaymentAction , deletePaymentAction , getTotalPaymentsAction , getPaymentsCountAction ) 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.Json.Number import Model.Message import Model.Message.Key (Key(PaymentNotDeleted)) getPaymentsAction :: Int -> Int -> ActionM () getPaymentsAction page perPage = Secure.loggedAction (\_ -> do payments <- liftIO $ runDb (getPayments page perPage) 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 ) getPaymentsCountAction :: ActionM () getPaymentsCountAction = Secure.loggedAction (\_ -> do Number <$> (liftIO . runDb $ getPaymentsCount) >>= json )