{-# LANGUAGE OverloadedStrings #-} import Web.Scotty import Network.Wai.Middleware.Static 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 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