aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authorJoris2019-10-20 21:31:57 +0200
committerJoris2019-10-20 21:31:57 +0200
commit602c52acfcfa494b07fec05c20b317b60ea8a6f3 (patch)
tree34fd9c44f82a83569822bc36eb2e0b04518e59f2 /server/src
parent7aadcc97f9df0e2daccbe8a8726d8bc6c63d67f4 (diff)
downloadbudget-602c52acfcfa494b07fec05c20b317b60ea8a6f3.tar.gz
budget-602c52acfcfa494b07fec05c20b317b60ea8a6f3.tar.bz2
budget-602c52acfcfa494b07fec05c20b317b60ea8a6f3.zip
Load init data per page with AJAX
Diffstat (limited to 'server/src')
-rw-r--r--server/src/Controller/Category.hs9
-rw-r--r--server/src/Controller/Income.hs9
-rw-r--r--server/src/Controller/Index.hs11
-rw-r--r--server/src/Controller/Payment.hs7
-rw-r--r--server/src/Controller/User.hs17
-rw-r--r--server/src/Design/Global.hs12
-rw-r--r--server/src/Main.hs24
-rw-r--r--server/src/Persistence/Init.hs25
8 files changed, 81 insertions, 33 deletions
diff --git a/server/src/Controller/Category.hs b/server/src/Controller/Category.hs
index 37b8357..e536caa 100644
--- a/server/src/Controller/Category.hs
+++ b/server/src/Controller/Category.hs
@@ -1,5 +1,6 @@
module Controller.Category
- ( create
+ ( list
+ , create
, edit
, delete
) where
@@ -19,6 +20,12 @@ import qualified Persistence.Category as CategoryPersistence
import qualified Persistence.PaymentCategory as PaymentCategoryPersistence
import qualified Secure
+list :: ActionM ()
+list =
+ Secure.loggedAction (\_ ->
+ (liftIO . Query.run $ CategoryPersistence.list) >>= json
+ )
+
create :: CreateCategory -> ActionM ()
create (CreateCategory name color) =
Secure.loggedAction (\_ ->
diff --git a/server/src/Controller/Income.hs b/server/src/Controller/Income.hs
index e013849..b40976b 100644
--- a/server/src/Controller/Income.hs
+++ b/server/src/Controller/Income.hs
@@ -1,5 +1,6 @@
module Controller.Income
- ( create
+ ( list
+ , create
, edit
, delete
) where
@@ -20,6 +21,12 @@ import qualified Persistence.Income as IncomePersistence
import qualified Secure
import qualified Validation.Income as IncomeValidation
+list :: ActionM ()
+list =
+ Secure.loggedAction (\_ ->
+ (liftIO . Query.run $ IncomePersistence.list) >>= json
+ )
+
create :: CreateIncomeForm -> ActionM ()
create form =
Secure.loggedAction (\user ->
diff --git a/server/src/Controller/Index.hs b/server/src/Controller/Index.hs
index 5ebe921..3788685 100644
--- a/server/src/Controller/Index.hs
+++ b/server/src/Controller/Index.hs
@@ -16,8 +16,9 @@ import Prelude hiding (error)
import Web.Scotty (ActionM)
import qualified Web.Scotty as S
-import Common.Model (Email (..), InitResult (..),
- SignInForm (..), User (..))
+import Common.Model (Email (..), Init (..),
+ InitResult (..), SignInForm (..),
+ User (..))
import Common.Msg (Key)
import qualified Common.Msg as Msg
import qualified Common.Validation.SignIn as SignInValidation
@@ -26,7 +27,6 @@ import Conf (Conf (..))
import qualified LoginSession
import qualified Model.Query as Query
import qualified Model.SignIn as SignIn
-import qualified Persistence.Init as InitPersistence
import qualified Persistence.User as UserPersistence
import qualified Secure
import qualified SendMail
@@ -40,8 +40,9 @@ get conf = do
case mbLoggedUser of
Nothing ->
return InitEmpty
- Just user ->
- liftIO . Query.run . fmap InitSuccess $ InitPersistence.getInit user conf
+ Just user -> do
+ users <- liftIO . Query.run $ UserPersistence.list
+ return . InitSuccess $ Init users (_user_id user) (Conf.currency conf)
S.html $ page initResult
askSignIn :: Conf -> SignInForm -> ActionM ()
diff --git a/server/src/Controller/Payment.hs b/server/src/Controller/Payment.hs
index ba9d1ba..30b63ff 100644
--- a/server/src/Controller/Payment.hs
+++ b/server/src/Controller/Payment.hs
@@ -1,5 +1,6 @@
module Controller.Payment
( list
+ , listPaymentCategories
, create
, edit
, delete
@@ -32,6 +33,12 @@ list =
(liftIO . Query.run $ PaymentPersistence.listActive) >>= json
)
+listPaymentCategories :: ActionM ()
+listPaymentCategories =
+ Secure.loggedAction (\_ ->
+ (liftIO . Query.run $ PaymentCategoryPersistence.list) >>= json
+ )
+
create :: CreatePaymentForm -> ActionM ()
create form =
Secure.loggedAction (\user ->
diff --git a/server/src/Controller/User.hs b/server/src/Controller/User.hs
new file mode 100644
index 0000000..a7bb136
--- /dev/null
+++ b/server/src/Controller/User.hs
@@ -0,0 +1,17 @@
+module Controller.User
+ ( list
+ ) where
+
+import Control.Monad.IO.Class (liftIO)
+import Web.Scotty (ActionM)
+import qualified Web.Scotty as S
+
+import qualified Model.Query as Query
+import qualified Persistence.User as UserPersistence
+import qualified Secure
+
+list :: ActionM ()
+list =
+ Secure.loggedAction (\_ ->
+ (liftIO . Query.run $ UserPersistence.list) >>= S.json
+ )
diff --git a/server/src/Design/Global.hs b/server/src/Design/Global.hs
index 5b8f2dc..598319b 100644
--- a/server/src/Design/Global.hs
+++ b/server/src/Design/Global.hs
@@ -52,6 +52,18 @@ global = do
".app" ? do
appearAnimation
+ display flex
+ height (pct 100)
+ flexDirection column
+
+ "main" ?
+ appearAnimation
+
+ ".pageSpinner" ? do
+ display flex
+ alignItems center
+ justifyContent center
+ flexGrow 1
".spinner" ? do
display flex
diff --git a/server/src/Main.hs b/server/src/Main.hs
index e3dad9e..9882092 100644
--- a/server/src/Main.hs
+++ b/server/src/Main.hs
@@ -1,3 +1,8 @@
+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
@@ -8,6 +13,7 @@ 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 ()
@@ -32,6 +38,12 @@ main = do
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
@@ -42,6 +54,9 @@ main = do
paymentId <- S.param "id"
Payment.delete paymentId
+ S.get "/api/incomes" $
+ Income.list
+
S.post "/api/income" $
S.jsonData >>= Income.create
@@ -52,6 +67,12 @@ main = 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
@@ -62,5 +83,6 @@ main = do
categoryId <- S.param "id"
Category.delete categoryId
- S.notFound $
+ S.notFound $ do
+ S.status Status.ok200
Index.get conf
diff --git a/server/src/Persistence/Init.hs b/server/src/Persistence/Init.hs
deleted file mode 100644
index 74d9172..0000000
--- a/server/src/Persistence/Init.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-module Persistence.Init
- ( getInit
- ) where
-
-import Common.Model (Init (Init), User (..))
-
-import Conf (Conf)
-import qualified Conf
-import Model.Query (Query)
-import qualified Persistence.Category as CategoryPersistence
-import qualified Persistence.Income as IncomePersistence
-import qualified Persistence.Payment as PaymentPersistence
-import qualified Persistence.PaymentCategory as PaymentCategoryPersistence
-import qualified Persistence.User as UserPersistence
-
-getInit :: User -> Conf -> Query Init
-getInit user conf =
- Init <$>
- UserPersistence.list <*>
- (return . _user_id $ user) <*>
- PaymentPersistence.listActive <*>
- IncomePersistence.list <*>
- CategoryPersistence.list <*>
- PaymentCategoryPersistence.list <*>
- (return . Conf.currency $ conf)