module Main ( main ) where import qualified Network.HTTP.Types.Status as Status 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 qualified Controller.User as User 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.get "/api/users"$ User.list S.get "/api/payments" $ Payment.list 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.get "/api/incomes" $ Income.list 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.get "/api/paymentCategories" $ Payment.listPaymentCategories S.get "/api/categories" $ Category.list 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 $ do S.status Status.ok200 Index.get conf