{-# LANGUAGE OverloadedStrings #-} module Controller.Income ( create , editOwn , deleteOwn ) where import Control.Monad.IO.Class (liftIO) import Network.HTTP.Types.Status (ok200, badRequest400) import qualified Data.Text.Lazy as TL import Web.Scotty import Json (jsonId) import Model.Income (IncomeId) import qualified Model.Income as Income import qualified Model.Json.CreateIncome as Json import qualified Model.Json.EditIncome as Json import qualified Model.Message.Key as Key import qualified Model.Query as Query import qualified Model.User as User import qualified Secure create :: Json.CreateIncome -> ActionM () create (Json.CreateIncome date amount) = Secure.loggedAction (\user -> (liftIO . Query.run $ Income.create (User.id user) date amount) >>= jsonId ) editOwn :: Json.EditIncome -> ActionM () editOwn (Json.EditIncome incomeId date amount) = Secure.loggedAction (\user -> do updated <- liftIO . Query.run $ Income.editOwn (User.id user) incomeId date amount if updated then status ok200 else status badRequest400 ) deleteOwn :: IncomeId -> ActionM () deleteOwn incomeId = Secure.loggedAction (\user -> do deleted <- liftIO . Query.run $ Income.deleteOwn user incomeId if deleted then status ok200 else do status badRequest400 text . TL.pack . show $ Key.IncomeNotDeleted )