{-# LANGUAGE OverloadedStrings #-} import Web.Scotty import Network.Wai.Middleware.Static import Job.Daemon (runDaemons) import qualified Data.Text.Lazy as LT import Controller.Index import Controller.SignIn import Controller.Payment as Payment import Controller.Income as Income import Model.Database (runMigrations) import qualified Conf main :: IO () main = do runMigrations conf <- Conf.get "application.conf" _ <- runDaemons conf scotty (Conf.port conf) $ do middleware . staticPolicy $ noDots >-> addBase "public" get "/" $ do signInToken <- mbParam "signInToken" getIndex conf signInToken post "/signIn" $ do email <- param "email" signIn conf email post "/signOut" $ signOut conf post "/payment" $ jsonData >>= Payment.create put "/payment" $ jsonData >>= Payment.editOwn delete "/payment" $ do paymentId <- param "id" Payment.deleteOwn paymentId post "/income" $ jsonData >>= Income.create put "/income" $ jsonData >>= Income.editOwn delete "/income" $ do incomeId <- param "id" Income.deleteOwn incomeId mbParam :: Parsable a => LT.Text -> ActionM (Maybe a) mbParam key = (Just <$> param key) `rescue` (const . return $ Nothing)