aboutsummaryrefslogtreecommitdiff
path: root/src/server/Controller/Income.hs
blob: ff3e75d62a16c645313dab1753a5ea70c242ff44 (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
49
50
51
52
53
54
55
{-# 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
  )