{-# LANGUAGE OverloadedStrings #-} module Controller.Income ( create , editOwn , deleteOwn ) where import Control.Monad.IO.Class (liftIO) import qualified Data.Text.Lazy as TL import Network.HTTP.Types.Status (badRequest400, ok200) import Web.Scotty import qualified Common.Message as Message import qualified Common.Message.Key as Key import Common.Model (CreateIncome (..), EditIncome (..), IncomeId, User (..)) import Json (jsonId) import qualified Model.Income as Income import qualified Model.Query as Query import qualified Secure create :: CreateIncome -> ActionM () create (CreateIncome date amount) = Secure.loggedAction (\user -> (liftIO . Query.run $ Income.create (_user_id user) date amount) >>= jsonId ) editOwn :: EditIncome -> ActionM () editOwn (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.fromStrict $ Message.get Key.Income_NotDeleted )