aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authorJoris2019-10-23 22:35:27 +0200
committerJoris2019-10-23 22:35:27 +0200
commite4b32ce15f8c92f3b477d3f3d4d301ba08f9b5e3 (patch)
tree274c3ef2111b7c7975bc1fb0aa2c5728ba19999c /server/src
parentf968c8ce63e1aec119b1e6f414cf27e2c0294bcb (diff)
downloadbudget-e4b32ce15f8c92f3b477d3f3d4d301ba08f9b5e3.tar.gz
budget-e4b32ce15f8c92f3b477d3f3d4d301ba08f9b5e3.tar.bz2
budget-e4b32ce15f8c92f3b477d3f3d4d301ba08f9b5e3.zip
Edit an income
Diffstat (limited to 'server/src')
-rw-r--r--server/src/Controller/Income.hs21
-rw-r--r--server/src/Persistence/Income.hs31
2 files changed, 31 insertions, 21 deletions
diff --git a/server/src/Controller/Income.hs b/server/src/Controller/Income.hs
index b40976b..236e032 100644
--- a/server/src/Controller/Income.hs
+++ b/server/src/Controller/Income.hs
@@ -11,11 +11,12 @@ import qualified Network.HTTP.Types.Status as Status
import Web.Scotty hiding (delete)
import Common.Model (CreateIncomeForm (..),
- EditIncome (..), IncomeId,
+ EditIncomeForm (..), IncomeId,
User (..))
import qualified Controller.Helper as ControllerHelper
import Model.CreateIncome (CreateIncome (..))
+import Model.EditIncome (EditIncome (..))
import qualified Model.Query as Query
import qualified Persistence.Income as IncomePersistence
import qualified Secure
@@ -40,13 +41,17 @@ create form =
) >>= ControllerHelper.jsonOrBadRequest
)
-edit :: EditIncome -> ActionM ()
-edit (EditIncome incomeId date amount) =
- Secure.loggedAction (\user -> do
- updated <- liftIO . Query.run $ IncomePersistence.edit (_user_id user) incomeId date amount
- if updated
- then status Status.ok200
- else status Status.badRequest400
+edit :: EditIncomeForm -> ActionM ()
+edit form =
+ Secure.loggedAction (\user ->
+ (liftIO . Query.run $ do
+ case IncomeValidation.editIncome form of
+ Success (EditIncome incomeId amount date) -> do
+ Right <$> (IncomePersistence.edit (_user_id user) incomeId date amount)
+
+ Failure validationError ->
+ return $ Left validationError
+ ) >>= ControllerHelper.jsonOrBadRequest
)
delete :: IncomeId -> ActionM ()
diff --git a/server/src/Persistence/Income.hs b/server/src/Persistence/Income.hs
index a0c3bbf..2b9bf0c 100644
--- a/server/src/Persistence/Income.hs
+++ b/server/src/Persistence/Income.hs
@@ -56,25 +56,30 @@ create userId date amount =
}
)
-edit :: UserId -> IncomeId -> Day -> Int -> Query Bool
-edit incomeUserId incomeId incomeDate incomeAmount =
+edit :: UserId -> IncomeId -> Day -> Int -> Query (Maybe Income)
+edit userId incomeId incomeDate incomeAmount =
Query (\conn -> do
mbIncome <- fmap (\(Row i) -> i) . listToMaybe <$>
SQLite.query conn "SELECT * FROM income WHERE id = ?" (Only incomeId)
case mbIncome of
Just income ->
- if _income_userId income == incomeUserId
- then do
- now <- getCurrentTime
- SQLite.execute
- conn
- "UPDATE income SET edited_at = ?, date = ?, amount = ? WHERE id = ?"
- (now, incomeDate, incomeAmount, incomeId)
- return True
- else
- return False
+ do
+ currentTime <- getCurrentTime
+ SQLite.execute
+ conn
+ "UPDATE income SET edited_at = ?, date = ?, amount = ? WHERE id = ? AND user_id = ?"
+ (currentTime, incomeDate, incomeAmount, incomeId, userId)
+ return . Just $ Income
+ { _income_id = incomeId
+ , _income_userId = userId
+ , _income_date = incomeDate
+ , _income_amount = incomeAmount
+ , _income_createdAt = _income_createdAt income
+ , _income_editedAt = Just currentTime
+ , _income_deletedAt = Nothing
+ }
Nothing ->
- return False
+ return Nothing
)
delete :: UserId -> PaymentId -> Query ()