blob: 19109a3be9fd52629bbc04c34ac8084d91b27507 (
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
|
{-# LANGUAGE OverloadedStrings #-}
module Controller.Category
( create
, edit
, delete
) where
import Control.Monad.IO.Class (liftIO)
import Data.Text (Text)
import Network.HTTP.Types.Status (ok200, badRequest400)
import qualified Data.Text.Lazy as TL
import Web.Scotty hiding (delete)
import Json (jsonId)
import Model.Database
import qualified Model.Category as Category
import qualified Model.Json.CreateCategory as Json
import qualified Model.Json.EditCategory as Json
import qualified Model.Message.Key as Key
import qualified Model.PaymentCategory as PaymentCategory
import qualified Secure
create :: Json.CreateCategory -> ActionM ()
create (Json.CreateCategory name color) =
Secure.loggedAction (\_ ->
(liftIO . runDb $ Category.create name color) >>= jsonId
)
edit :: Json.EditCategory -> ActionM ()
edit (Json.EditCategory categoryId name color) =
Secure.loggedAction (\_ -> do
updated <- liftIO . runDb $ Category.edit categoryId name color
if updated
then status ok200
else status badRequest400
)
delete :: Text -> ActionM ()
delete categoryId =
Secure.loggedAction (\_ -> do
deleted <- liftIO . runDb $ do
paymentCategories <- PaymentCategory.listByCategory (textToKey categoryId)
if null paymentCategories
then Category.delete (textToKey categoryId)
else return False
if deleted
then
status ok200
else do
status badRequest400
text . TL.pack . show $ Key.CategoryNotDeleted
)
|