diff options
Diffstat (limited to 'server/src/Main.hs')
-rw-r--r-- | server/src/Main.hs | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/server/src/Main.hs b/server/src/Main.hs new file mode 100644 index 0000000..659a0fa --- /dev/null +++ b/server/src/Main.hs @@ -0,0 +1,106 @@ +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.Statistics as Statistics +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 + Statistics.paymentsAndIncomes + + S.notFound $ do + S.status Status.ok200 + Index.get conf |