module Controller.Payment ( list , create , editOwn , deleteOwn ) where import Control.Monad.IO.Class (liftIO) import Network.HTTP.Types.Status (badRequest400, ok200) import Web.Scotty import Common.Model (CreatePayment (..), EditPayment (..), PaymentId, User (..)) import Json (jsonId) import qualified Model.Payment as Payment import qualified Model.PaymentCategory as PaymentCategory import qualified Model.Query as Query import qualified Secure list :: ActionM () list = Secure.loggedAction (\_ -> (liftIO . Query.run $ Payment.listActive) >>= json ) create :: CreatePayment -> ActionM () create (CreatePayment name cost date category frequency) = Secure.loggedAction (\user -> (liftIO . Query.run $ do PaymentCategory.save name category Payment.create (_user_id user) name cost date frequency ) >>= jsonId ) editOwn :: EditPayment -> ActionM () editOwn (EditPayment paymentId name cost date category frequency) = Secure.loggedAction (\user -> do updated <- liftIO . Query.run $ do edited <- Payment.editOwn (_user_id user) paymentId name cost date frequency _ <- if edited then PaymentCategory.save name category >> return () else return () return edited if updated then status ok200 else status badRequest400 ) deleteOwn :: PaymentId -> ActionM () deleteOwn paymentId = Secure.loggedAction (\user -> do deleted <- liftIO . Query.run $ Payment.deleteOwn (_user_id user) paymentId if deleted then status ok200 else status badRequest400 )