{-# 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