aboutsummaryrefslogtreecommitdiff
path: root/server/src/Main.hs
blob: 659a0fad7809001d1cbc89a213fdcca8d625786f (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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
module Main
  ( main
  ) where

import qualified Network.HTTP.Types.Status     as Status
import           Network.Wai.Middleware.Gzip   (GzipFiles (GzipCompress))
import qualified Network.Wai.Middleware.Gzip   as W
import           Network.Wai.Middleware.Static
import qualified Web.Scotty                    as S

import qualified Conf
import qualified Controller.Category           as Category
import qualified Controller.Income             as Income
import qualified Controller.Index              as Index
import qualified Controller.Payment            as Payment
import qualified Controller.Statistics         as Statistics
import qualified Controller.User               as User
import qualified Design.Global                 as Design
import           Job.Daemon                    (runDaemons)

main :: IO ()
main = do
  conf <- Conf.get "application.conf"
  putStrLn . show $ conf
  _ <- runDaemons conf
  S.scotty (Conf.port conf) $ do

    S.middleware $
      W.gzip $ W.def { W.gzipFiles = GzipCompress }

    S.middleware . staticPolicy $
      noDots >-> addBase "public"

    S.get "/css/main.css" $ do
      S.setHeader "Content-Type" "text/css"
      S.text Design.globalDesign

    S.post "/api/signIn" $
      S.jsonData >>= Index.signIn conf

    S.post "/api/signOut" $
      Index.signOut conf

    S.get "/api/users"$
      User.list

    S.get "/api/payments" $ do
      frequency <- S.param "frequency"
      page <- S.param "page"
      perPage <- S.param "perPage"
      search <- S.param "search"
      Payment.list (read frequency) page perPage search

    S.get "/api/payment/category" $ do
      name <- S.param "name"
      Payment.searchCategory name

    S.post "/api/payment" $
      S.jsonData >>= Payment.create

    S.put "/api/payment" $
      S.jsonData >>= Payment.edit

    S.delete "/api/payment/:id" $ do
      paymentId <- S.param "id"
      Payment.delete paymentId

    S.get "/api/incomes" $ do
      page <- S.param "page"
      perPage <- S.param "perPage"
      Income.list page perPage

    S.post "/api/income" $
      S.jsonData >>= Income.create

    S.put "/api/income" $
      S.jsonData >>= Income.edit

    S.delete "/api/income/:id" $ do
      incomeId <- S.param "id"
      Income.delete incomeId

    S.get "/api/allCategories" $ do
      Category.listAll

    S.get "/api/categories" $ do
      page <- S.param "page"
      perPage <- S.param "perPage"
      Category.list page perPage

    S.post "/api/category" $
      S.jsonData >>= Category.create

    S.put "/api/category" $
      S.jsonData >>= Category.edit

    S.delete "/api/category/:id" $ do
      categoryId <- S.param "id"
      Category.delete categoryId

    S.get "/api/statistics" $ do
      Statistics.paymentsAndIncomes

    S.notFound $ do
      S.status Status.ok200
      Index.get conf