{-# LANGUAGE OverloadedStrings #-} import Web.Scotty import Network.Wai.Middleware.Static import Job.Daemon (runDaemons) import qualified Data.Text.Lazy as LT import qualified Controller.Index as Index import qualified Controller.SignIn as SignIn import qualified Controller.Payment as Payment import qualified Controller.Income as Income import qualified Controller.Category as Category 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" Index.get conf signInToken post "/signIn" $ do email <- param "email" SignIn.signIn conf email post "/signOut" $ Index.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 post "/category" $ jsonData >>= Category.create put "/category" $ jsonData >>= Category.edit delete "/category" $ do categoryId <- param "id" Category.delete categoryId mbParam :: Parsable a => LT.Text -> ActionM (Maybe a) mbParam key = (Just <$> param key) `rescue` (const . return $ Nothing)