{-# 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 Controller.Payer import Model.Database (runMigrations) import Model.Frequency import qualified Config main :: IO () main = do runMigrations _ <- forkIO monthlyPaymentJobListener eitherConfig <- Config.getConfig "config.txt" case eitherConfig of Left errorMessage -> TIO.putStrLn errorMessage Right config -> do scotty (Config.port config) $ do middleware $ staticPolicy (noDots >-> addBase "public") get "/" (getIndex config) 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/count" getPaymentsCount -- Payers get "/payers" getPayers