blob: 371ba780d9deaf05d4d6b3f7838abefe6161954f (
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
module Controller.Category
( listAll
, list
, create
, edit
, delete
) where
import Control.Monad.IO.Class (liftIO)
import qualified Data.Text.Lazy as TL
import Data.Validation (Validation (..))
import Network.HTTP.Types.Status (badRequest400, ok200)
import Web.Scotty hiding (delete)
import Common.Model (CategoryId, CategoryPage (..),
CreateCategoryForm (..),
EditCategoryForm (..))
import qualified Common.Msg as Msg
import qualified Controller.Helper as ControllerHelper
import Model.CreateCategory (CreateCategory (..))
import Model.EditCategory (EditCategory (..))
import qualified Model.Query as Query
import qualified Persistence.Category as CategoryPersistence
import qualified Persistence.Payment as PaymentPersistence
import qualified Secure
import qualified Validation.Category as CategoryValidation
listAll :: ActionM ()
listAll =
Secure.loggedAction (\_ ->
(liftIO . Query.run $ CategoryPersistence.listAll) >>= json
)
list :: Int -> Int -> ActionM ()
list page perPage =
Secure.loggedAction (\_ ->
(liftIO . Query.run $ do
categories <- CategoryPersistence.list page perPage
usedCategories <- PaymentPersistence.usedCategories
count <- CategoryPersistence.count
return $ CategoryPage page categories usedCategories count
) >>= json
)
create :: CreateCategoryForm -> ActionM ()
create form =
Secure.loggedAction (\_ ->
(liftIO . Query.run $ do
case CategoryValidation.createCategory form of
Success (CreateCategory name color) -> do
Right <$> (CategoryPersistence.create name color)
Failure validationError ->
return $ Left validationError
) >>= ControllerHelper.okOrBadRequest
)
edit :: EditCategoryForm -> ActionM ()
edit form =
Secure.loggedAction (\_ ->
(liftIO . Query.run $ do
case CategoryValidation.editCategory form of
Success (EditCategory categoryId name color) ->
do
isSuccess <- CategoryPersistence.edit categoryId name color
return $ if isSuccess then
Right ()
else
Left $ Msg.get Msg.Error_CategoryEdit
Failure validationError ->
return $ Left validationError
) >>= ControllerHelper.okOrBadRequest
)
delete :: CategoryId -> ActionM ()
delete categoryId =
Secure.loggedAction (\_ -> do
deleted <- liftIO . Query.run $ do
CategoryPersistence.delete categoryId
if deleted
then
status ok200
else do
status badRequest400
text . TL.fromStrict $ Msg.get Msg.Category_NotDeleted
)
|