aboutsummaryrefslogtreecommitdiff
path: root/server/src/Controller/Income.hs
blob: 148b71395d87befdf1a84f4c3a74177310bcf269 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
{-# 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 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
  )