{-# LANGUAGE OverloadedStrings #-} module Controller.Payment ( list , create , deleteOwn ) 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 Data.Text.Lazy as TL import qualified Secure import Json (jsonId) import Model.Database import qualified Model.Payment as Payment import Model.Message.Key (Key(PaymentNotDeleted)) import qualified Model.Json.CreatePayment as Json list :: ActionM () list = Secure.loggedAction (\_ -> do (liftIO $ runDb Payment.list) >>= json ) create :: Json.CreatePayment -> ActionM () create (Json.CreatePayment date name cost frequency) = Secure.loggedAction (\user -> (liftIO . runDb $ Payment.create (entityKey user) date name cost frequency) >>= jsonId ) deleteOwn :: Text -> ActionM () deleteOwn paymentId = Secure.loggedAction (\user -> do deleted <- liftIO . runDb $ Payment.deleteOwn user (textToKey paymentId) if deleted then status ok200 else do status badRequest400 text . TL.pack . show $ PaymentNotDeleted )