import Network.Wai.Middleware.Gzip (GzipFiles (GzipCompress)) import qualified Network.Wai.Middleware.Gzip as W import Network.Wai.Middleware.Static import qualified Web.Scotty as S import qualified Conf import qualified Controller.Category as Category import qualified Controller.Income as Income import qualified Controller.Index as Index import qualified Controller.Payment as Payment import Job.Daemon (runDaemons) main :: IO () main = do conf <- Conf.get "application.conf" _ <- runDaemons conf S.scotty (Conf.port conf) $ do S.middleware $ W.gzip $ W.def { W.gzipFiles = GzipCompress } S.middleware . staticPolicy $ noDots >-> addBase "public" S.post "/api/askSignIn" $ S.jsonData >>= Index.askSignIn conf S.get "/api/signIn/:signInToken" $ do signInToken <- S.param "signInToken" Index.trySignIn conf signInToken S.post "/api/signOut" $ Index.signOut conf S.post "/api/payment" $ S.jsonData >>= Payment.create S.put "/api/payment" $ S.jsonData >>= Payment.edit S.delete "/api/payment/:id" $ do paymentId <- S.param "id" Payment.delete paymentId S.post "/api/income" $ S.jsonData >>= Income.create S.put "/api/income" $ S.jsonData >>= Income.edit S.delete "/api/income/:id" $ do incomeId <- S.param "id" Income.delete incomeId S.post "/api/category" $ S.jsonData >>= Category.create S.put "/api/category" $ S.jsonData >>= Category.edit S.delete "/api/category/:id" $ do categoryId <- S.param "id" Category.delete categoryId S.notFound $ Index.get conf