-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMain.hs
50 lines (38 loc) · 1.72 KB
/
Main.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Aeson (encode)
import OpenBudget.Builder
import qualified OpenBudget.Types.Area as Area (select)
import OpenBudget.Types.Database
import qualified OpenBudget.Types.Document as Document (select)
import qualified OpenBudget.Types.Expense as Expense (select)
import Paths_api (getDataFileName)
import Web.Scotty
import qualified Data.Map as Map (Map, fromList)
main :: IO ()
main = do
-- todo: перенести БД у IORef та оновляти кожного разу,
-- коли оновлюється директорія `data`
db <- newDatabase
doc <- getDataFileName "resourses/index.html"
scotty 3000 $ do
get "/" $
file doc
get "/areas" $ do
params' <- params
jsonUtf8 $ Area.select params' (areas db)
get "/documents" $ do
params' <- params
jsonUtf8 $ Document.select params' (documents db)
get "/expenses" $ do
params' <- params
jsonUtf8 $ Expense.select params' (expenses db)
get "/links" $
raw $ encode (Map.fromList [ ("areas", "https://api.open-budget.org/areas")
, ("documents", "https://api.open-budget.org/areas")
, ("expenses", "https://api.open-budget.org/expenses")
] :: Map.Map String String)
where jsonUtf8 xs = do
setHeader "Access-Control-Allow-Origin" "*"
setHeader "Content-Type" "application/json; charset=utf-8"
raw $ encode xs