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

import Web.Scotty

import Network.Wai.Middleware.Static

import Control.Concurrent (forkIO)
import MonthlyPaymentJob (monthlyPaymentJobListener)

import Data.Text (Text)
import qualified Data.Text.IO as TIO

import Controller.Index
import Controller.SignIn
import Controller.Payment
import Controller.User

import Model.Database (runMigrations)
import Model.Frequency

import Config

main :: IO ()
main = do
  _ <- forkIO monthlyPaymentJobListener
  eitherConfig <- getConfig "config.txt"
  case eitherConfig of
    Left errorMessage ->
      TIO.putStrLn errorMessage
    Right config -> do
      runMigrations
      scotty (port config) $ do

        middleware $
          staticPolicy (noDots >-> addBase "public")

        get "/" $
          getIndexAction

        post "/signIn" $ do
          login <- param "login" :: ActionM Text
          signInAction config login

        get "/validateSignIn" $ do
          token <- param "token" :: ActionM Text
          validateSignInAction config token

        post "/signOut" $
          signOutAction

        get "/whoAmI" $
          whoAmIAction

        get "/users" $ do
          getUsersAction

        get "/payments" $ do
          page <- param "page" :: ActionM Int
          perPage <- param "perPage" :: ActionM Int
          getPaymentsAction page perPage

        get "/monthlyPayments" $ do
          getMonthlyPaymentsAction

        post "/payment/add" $ do
          name <- param "name" :: ActionM Text
          cost <- param "cost" :: ActionM Int
          frequency <- param "frequency" :: ActionM Frequency
          createPaymentAction name cost frequency

        post "/payment/delete" $ do
          paymentId <- param "id" :: ActionM Text
          deletePaymentAction paymentId

        get "/payments/total" $ do
          getTotalPaymentsAction

        get "/payments/count" $ do
          getPaymentsCountAction