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 qualified Design.Global as Design import Job.Daemon (runDaemons) main :: IO () main = do conf <- Conf.get "application.conf" putStrLn . show $ 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.get "/css/main.css" $ do S.setHeader "Content-Type" "text/css" S.text Design.globalDesign S.post "/api/signIn" $ S.jsonData >>= Index.signIn conf S.post "/api/signOut" $ Index.signOut conf S.get "/api/users"$ User.list S.get "/api/payments" $ do frequency <- S.param "frequency" page <- S.param "page" perPage <- S.param "perPage" search <- S.param "search" Payment.list (read frequency) page perPage search S.get "/api/payment/category" $ do name <- S.param "name" Payment.searchCategory name 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" $ do page <- S.param "page" perPage <- S.param "perPage" Income.list page perPage 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/allCategories" $ do Category.listAll S.get "/api/categories" $ do page <- S.param "page" perPage <- S.param "perPage" Category.list page perPage 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.get "/api/statistics" $ do Payment.statistics S.notFound $ do S.status Status.ok200 Index.get conf