aboutsummaryrefslogtreecommitdiff
path: root/server/src/Main.hs
blob: 745071ce228724b1a644a667da4977aa281580f1 (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
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           Job.Daemon                    (runDaemons)

main :: IO ()
main = do
  conf <- Conf.get "application.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 "/" $ do
      Index.get conf

    S.post "/askSignIn" $ do
      S.jsonData >>= Index.askSignIn conf

    S.get "/signIn/:signInToken" $ do
      signInToken <- S.param "signInToken"
      Index.trySignIn conf signInToken

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

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

    S.put "/payment" $
      S.jsonData >>= Payment.editOwn

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

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

    S.put "/income" $
      S.jsonData >>= Income.editOwn

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

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

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

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