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