blob: 85e2a87392785cd5966aa60e9f0a29d9254b0ff6 (
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
|
{-# LANGUAGE OverloadedStrings #-}
module Controller.Payment
( getPaymentsAction
, getMonthlyPaymentsAction
, createPaymentAction
, deletePaymentAction
, getTotalPaymentsAction
, getPaymentsCountAction
) where
import Web.Scotty
import Network.HTTP.Types.Status (ok200, badRequest400)
import Database.Persist
import Control.Monad.IO.Class (liftIO)
import Data.Text (Text)
import qualified Data.Aeson.Types as Json
import qualified Secure
import Model.Database
import Model.Payment
import Model.Frequency
import Model.Json.Number
import qualified Model.Json.PaymentId as JP
import Model.Message
import Model.Message.Key (Key(PaymentNotDeleted))
import Json (jsonObject)
getPaymentsAction :: Int -> Int -> ActionM ()
getPaymentsAction page perPage =
Secure.loggedAction (\_ -> do
(liftIO $ runDb (getPunctualPayments page perPage)) >>= json
)
getMonthlyPaymentsAction :: ActionM ()
getMonthlyPaymentsAction =
Secure.loggedAction (\user -> do
(liftIO $ runDb (getUserMonthlyPayments (entityKey user))) >>= json
)
createPaymentAction :: Text -> Int -> Frequency -> ActionM ()
createPaymentAction name cost frequency =
Secure.loggedAction (\user -> do
paymentId <- liftIO . runDb $ createPayment (entityKey user) name cost frequency
json (JP.PaymentId paymentId)
)
deletePaymentAction :: Text -> ActionM ()
deletePaymentAction paymentId =
Secure.loggedAction (\user -> do
deleted <- liftIO . runDb $ deleteOwnPayment user (textToKey paymentId)
if deleted
then
status ok200
else do
status badRequest400
jsonObject [("error", Json.String $ getMessage PaymentNotDeleted)]
)
getTotalPaymentsAction :: ActionM ()
getTotalPaymentsAction =
Secure.loggedAction (\_ -> do
(liftIO . runDb $ getTotalPayments) >>= json
)
getPaymentsCountAction :: ActionM ()
getPaymentsCountAction =
Secure.loggedAction (\_ -> do
Number <$> (liftIO . runDb $ getPaymentsCount) >>= json
)
|