{-# LANGUAGE OverloadedStrings #-} module Controller.Income ( getIncomes , addIncome , deleteOwnIncome ) 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.AddIncome as Json getIncomes :: ActionM () getIncomes = Secure.loggedAction (\_ -> (liftIO $ map Income.getJsonIncome <$> runDb Income.getIncomes) >>= json ) addIncome :: Json.AddIncome -> ActionM () addIncome (Json.AddIncome date amount) = Secure.loggedAction (\user -> (liftIO . runDb $ Income.addIncome (entityKey user) date amount) >>= jsonId ) deleteOwnIncome :: Text -> ActionM () deleteOwnIncome incomeId = Secure.loggedAction (\user -> do deleted <- liftIO . runDb $ Income.deleteOwnIncome user (textToKey incomeId) if deleted then status ok200 else do status badRequest400 text . TL.pack . show $ Key.IncomeNotDeleted )