aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--src/client/LoggedIn/Update.elm4
-rw-r--r--src/client/Model/PaymentCategory.elm12
-rw-r--r--src/server/Controller/Payment.hs33
-rw-r--r--src/server/Model/PaymentCategory.hs25
5 files changed, 28 insertions, 47 deletions
diff --git a/README.md b/README.md
index 3dcf8c4..281fff7 100644
--- a/README.md
+++ b/README.md
@@ -49,6 +49,7 @@ TODO
- Modelize current page for both punctual and monthly payments
- search by payment category
- Use `sqlite-simple` instead of `persistent`
+- show charts with payments and categories
- Move up element ids security (editOwn is actually at db level)
- Prevent a daemon to freeze when it got “SQLite3 returned ErrorBusy while
attempting to perform step.”
diff --git a/src/client/LoggedIn/Update.elm b/src/client/LoggedIn/Update.elm
index 9e6d6ee..f5ce7ea 100644
--- a/src/client/LoggedIn/Update.elm
+++ b/src/client/LoggedIn/Update.elm
@@ -74,7 +74,7 @@ update model msg loggedIn =
let newPayment = Payment paymentId name cost date loggedIn.me frequency
in ( { loggedIn
| payments = newPayment :: loggedIn.payments
- , paymentCategories = PaymentCategory.set name category loggedIn.paymentCategories
+ , paymentCategories = PaymentCategory.save name category loggedIn.paymentCategories
}
, Cmd.none
)
@@ -88,7 +88,7 @@ update model msg loggedIn =
, paymentCategories =
case mbOldPayment of
Just oldPayment ->
- PaymentCategory.update oldPayment.name name category loggedIn.paymentCategories
+ PaymentCategory.save name category loggedIn.paymentCategories
Nothing ->
loggedData.paymentCategories
}
diff --git a/src/client/Model/PaymentCategory.elm b/src/client/Model/PaymentCategory.elm
index 87678fe..bb6c152 100644
--- a/src/client/Model/PaymentCategory.elm
+++ b/src/client/Model/PaymentCategory.elm
@@ -3,8 +3,7 @@ module Model.PaymentCategory exposing
, paymentCategoriesDecoder
, search
, isCategoryUnused
- , set
- , update
+ , save
)
import Dict exposing (Dict)
@@ -40,9 +39,6 @@ isCategoryUnused category paymentCategories =
|> List.filter ((==) category << .category)
|> List.isEmpty
-set : String -> CategoryId -> PaymentCategories -> PaymentCategories
-set name category paymentCategories = update name name category paymentCategories
-
-update : String -> String -> CategoryId -> PaymentCategories -> PaymentCategories
-update oldName newName category paymentCategories =
- { name = newName, category = category } :: List.filter (\pc -> not <| Search.format pc.name == Search.format oldName) paymentCategories
+save : String -> CategoryId -> PaymentCategories -> PaymentCategories
+save name category paymentCategories =
+ { name = name, category = category } :: List.filter (\pc -> not <| Search.format pc.name == Search.format name) paymentCategories
diff --git a/src/server/Controller/Payment.hs b/src/server/Controller/Payment.hs
index e3f1082..831abbf 100644
--- a/src/server/Controller/Payment.hs
+++ b/src/server/Controller/Payment.hs
@@ -7,25 +7,20 @@ module Controller.Payment
, deleteOwn
) where
-import Web.Scotty
-
-import Network.HTTP.Types.Status (ok200, badRequest400)
-
-import Database.Persist
-
import Control.Monad.IO.Class (liftIO)
import Data.Text (Text)
-
-import qualified Secure
+import Database.Persist
+import Network.HTTP.Types.Status (ok200, badRequest400)
+import Web.Scotty
import Json (jsonId)
-
import Model.Database
-import qualified Model.Payment as Payment
-import qualified Model.PaymentCategory as PaymentCategory
import qualified Model.Json.CreatePayment as Json
import qualified Model.Json.EditPayment as Json
+import qualified Model.Payment as Payment
+import qualified Model.PaymentCategory as PaymentCategory
+import qualified Secure
list :: ActionM ()
list =
@@ -37,7 +32,7 @@ create :: Json.CreatePayment -> ActionM ()
create (Json.CreatePayment name cost date category frequency) =
Secure.loggedAction (\user ->
(liftIO . runDb $ do
- PaymentCategory.set name category
+ PaymentCategory.save name category
Payment.create (entityKey user) name cost date frequency
) >>= jsonId
)
@@ -46,15 +41,11 @@ editOwn :: Json.EditPayment -> ActionM ()
editOwn (Json.EditPayment paymentId name cost date category frequency) =
Secure.loggedAction (\user -> do
updated <- liftIO . runDb $ do
- mbPayment <- fmap entityVal <$> Payment.find paymentId
- case mbPayment of
- Just payment -> do
- edited <- Payment.editOwn (entityKey user) paymentId name cost date frequency
- if edited
- then PaymentCategory.edit (paymentName payment) name category >> return True
- else return edited
- _ ->
- return False
+ edited <- Payment.editOwn (entityKey user) paymentId name cost date frequency
+ _ <- if edited
+ then PaymentCategory.save name category >> return ()
+ else return ()
+ return edited
if updated
then status ok200
else status badRequest400
diff --git a/src/server/Model/PaymentCategory.hs b/src/server/Model/PaymentCategory.hs
index 6df77e2..3b0b858 100644
--- a/src/server/Model/PaymentCategory.hs
+++ b/src/server/Model/PaymentCategory.hs
@@ -3,19 +3,16 @@
module Model.PaymentCategory
( list
, listByCategory
- , set
- , edit
- , delete
+ , save
) where
+import Control.Monad.IO.Class (liftIO)
import Data.Maybe (isJust)
+
import Data.Text (Text)
import Data.Time.Clock (getCurrentTime)
-import qualified Data.Text as T
-
-import Control.Monad.IO.Class (liftIO)
-
import Database.Persist
+import qualified Data.Text as T
import Model.Database
import qualified Model.Json.PaymentCategory as Json
@@ -32,19 +29,15 @@ getJsonPaymentCategory entity =
Json.PaymentCategory (paymentCategoryName pc) (paymentCategoryCategory pc)
where pc = entityVal entity
-set :: Text -> CategoryId -> Persist ()
-set name category = edit name name category
-
-edit :: Text -> Text -> CategoryId -> Persist ()
-edit oldName newName category = do
+save :: Text -> CategoryId -> Persist ()
+save newName category = do
now <- liftIO getCurrentTime
- mbPaymentCategory <- selectFirst [PaymentCategoryName ==. (formatPaymentName oldName)] []
+ mbPaymentCategory <- selectFirst [PaymentCategoryName ==. (formatPaymentName newName)] []
if isJust mbPaymentCategory
then
updateWhere
- [ PaymentCategoryName ==. (formatPaymentName oldName) ]
- [ PaymentCategoryName =. (formatPaymentName newName)
- , PaymentCategoryCategory =. category
+ [ PaymentCategoryName ==. (formatPaymentName newName) ]
+ [ PaymentCategoryCategory =. category
, PaymentCategoryEditedAt =. Just now
]
else do