blob: b40976b1ffa8f5deb9dc296f79dc651ab5ca8189 (
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
|
module Controller.Income
( list
, create
, edit
, delete
) where
import Control.Monad.IO.Class (liftIO)
import Data.Validation (Validation (Failure, Success))
import qualified Network.HTTP.Types.Status as Status
import Web.Scotty hiding (delete)
import Common.Model (CreateIncomeForm (..),
EditIncome (..), IncomeId,
User (..))
import qualified Controller.Helper as ControllerHelper
import Model.CreateIncome (CreateIncome (..))
import qualified Model.Query as Query
import qualified Persistence.Income as IncomePersistence
import qualified Secure
import qualified Validation.Income as IncomeValidation
list :: ActionM ()
list =
Secure.loggedAction (\_ ->
(liftIO . Query.run $ IncomePersistence.list) >>= json
)
create :: CreateIncomeForm -> ActionM ()
create form =
Secure.loggedAction (\user ->
(liftIO . Query.run $ do
case IncomeValidation.createIncome form of
Success (CreateIncome amount date) -> do
Right <$> (IncomePersistence.create (_user_id user) date amount)
Failure validationError ->
return $ Left validationError
) >>= ControllerHelper.jsonOrBadRequest
)
edit :: EditIncome -> ActionM ()
edit (EditIncome incomeId date amount) =
Secure.loggedAction (\user -> do
updated <- liftIO . Query.run $ IncomePersistence.edit (_user_id user) incomeId date amount
if updated
then status Status.ok200
else status Status.badRequest400
)
delete :: IncomeId -> ActionM ()
delete incomeId =
Secure.loggedAction (\user -> do
_ <- liftIO . Query.run $ IncomePersistence.delete (_user_id user) incomeId
status Status.ok200
)
|