aboutsummaryrefslogtreecommitdiff
path: root/src/server/Main.hs
blob: b7764c94c1d471182d691cbf0397b88300a6fe30 (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
{-# LANGUAGE OverloadedStrings #-}

import Web.Scotty

import Network.Wai.Middleware.Static

import Job.Daemon (runDaemons)

import qualified Data.Text.Lazy as LT

import qualified Controller.Index as Index
import qualified Controller.SignIn as SignIn
import qualified Controller.Payment as Payment
import qualified Controller.Income as Income
import qualified Controller.Category as Category

import Model.Database (runMigrations)

import qualified Conf

main :: IO ()
main = do
  runMigrations
  conf <- Conf.get "application.conf"
  _ <- runDaemons conf
  scotty (Conf.port conf) $ do
    middleware . staticPolicy $ noDots >-> addBase "public"

    get "/" $ do
      signInToken <- mbParam "signInToken"
      Index.get conf signInToken

    post "/signIn" $ do
      email <- param "email"
      SignIn.signIn conf email

    post "/signOut" $
      Index.signOut conf

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

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

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

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

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

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

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

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

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

mbParam :: Parsable a => LT.Text -> ActionM (Maybe a)
mbParam key = (Just <$> param key) `rescue` (const . return $ Nothing)