{-# 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 runMigrations _ <- forkIO monthlyPaymentJobListener eitherConfig <- getConfig "config.txt" case eitherConfig of Left errorMessage -> TIO.putStrLn errorMessage Right config -> do scotty (port config) $ do middleware $ staticPolicy (noDots >-> addBase "public") get "/" getIndex post "/signOut" signOut -- SignIn post "/signIn" $ do login <- param "login" :: ActionM Text signIn config login get "/validateSignIn" $ do token <- param "token" :: ActionM Text validateSignIn config token -- Users get "/users" getUsers get "/whoAmI" whoAmI get "/income" getIncome post "/income" $ do amount <- param "amount" :: ActionM Int setIncome amount -- Payments get "/payments" $ do page <- param "page" :: ActionM Int perPage <- param "perPage" :: ActionM Int getPayments page perPage get "/monthlyPayments" getMonthlyPayments post "/payment/add" $ do name <- param "name" :: ActionM Text cost <- param "cost" :: ActionM Int frequency <- param "frequency" :: ActionM Frequency createPayment name cost frequency post "/payment/delete" $ do paymentId <- param "id" :: ActionM Text deletePayment paymentId get "/payments/total" getTotalPayments get "/payments/count" getPaymentsCount