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

import Web.Scotty

import Network.Wai.Middleware.Static

import Job.Daemon (runDaemons)

import qualified Data.Text.Lazy as LT

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

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"
      getIndex conf signInToken

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

    post "/signOut" $
      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

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