From 16c3ed181908c125cc5bf112766b7ae6cf584036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Ry=C5=BCek?= Date: Fri, 7 Jun 2024 22:25:44 +0200 Subject: [PATCH] =?UTF-8?q?Obs=C5=82uga=20sytuacji=20wydania=20towaru=20po?= =?UTF-8?q?nad=20stan=20dla=20metody=20POST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controllers/TransactionController.cs | 15 +++++++++++++-- nHIbernate/Products/ProductCRUD.cs | 13 +++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/Controllers/TransactionController.cs b/Controllers/TransactionController.cs index b4f80d5..135b92e 100644 --- a/Controllers/TransactionController.cs +++ b/Controllers/TransactionController.cs @@ -5,6 +5,7 @@ using System.Text.Json.Serialization; using System.Text.Json; using System.Transactions; using FirmTracker_Server.nHibernate.Products; +using FirmTracker_Server.nHibernate; namespace FirmTracker_Server.Controllers { @@ -41,7 +42,17 @@ namespace FirmTracker_Server.Controllers int type = _productCRUD.GetProductType(product.ProductID); if (type == 1) { - transaction.TotalPrice += ((product.Quantity * price) * ((1 - (transaction.Discount / 100)))); + int availability = _productCRUD.GetProductAvailability(product.ProductID); + + if (product.Quantity > availability) + { + return BadRequest($"Can't add product {product.ProductID} to transaction. Available: {availability}, Desired: {product.Quantity}"); + } + else + { + transaction.TotalPrice += ((product.Quantity * price) * ((1 - (transaction.Discount / 100)))); + } + } else { @@ -99,7 +110,7 @@ namespace FirmTracker_Server.Controllers product.TransactionId = transaction.Id; // This might be 0 at this point if transaction isn't saved yet decimal price = _productCRUD.GetProductPrice(product.ProductID); transaction.TotalPrice += ((product.Quantity * price) * ((1 - (transaction.Discount / 100)))); - } + } _transactionCRUD.UpdateTransaction(transaction); // Now that the transaction is saved, update each product with the correct TransactionId diff --git a/nHIbernate/Products/ProductCRUD.cs b/nHIbernate/Products/ProductCRUD.cs index ef05fd5..e14b12b 100644 --- a/nHIbernate/Products/ProductCRUD.cs +++ b/nHIbernate/Products/ProductCRUD.cs @@ -53,6 +53,19 @@ namespace FirmTracker_Server.nHibernate.Products return product; } } + + public int GetProductAvailability(int productId) + { + using(var session = SessionFactory.OpenSession()) + { + var product = session.Query() + .Where(p => p.Id == productId) + .Select(p => p.Availability) + .FirstOrDefault(); + return product; + } + } + public Product GetProduct(int productId) { using (var session = SessionFactory.OpenSession())