Compare commits

...

2 Commits

3 changed files with 47 additions and 2 deletions

View File

@ -45,6 +45,17 @@ namespace FirmTracker_Server.Controllers
return Ok(product);
}
[HttpGet("name/{name}")]
[ProducesResponseType(200)]
[ProducesResponseType(404)]
public IActionResult GetProductByName(string name)
{
var product = _productCrud.GetProductByName(name);
if (product ==null)
return NotFound();
return Ok(product);
}
// PUT: api/Products/5
[HttpPut("{id}")]
[ProducesResponseType(200)] // Created

View File

@ -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

View File

@ -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<Product>()
.Where(p => p.Id == productId)
.Select(p => p.Availability)
.FirstOrDefault();
return product;
}
}
public Product GetProduct(int productId)
{
using (var session = SessionFactory.OpenSession())
@ -61,6 +74,16 @@ namespace FirmTracker_Server.nHibernate.Products
}
}
public Product GetProductByName(string productName)
{
using (var session = SessionFactory.OpenSession())
{
var query = session.CreateQuery("from Product where Name = :name");
query.SetParameter("name", productName);
return query.UniqueResult<Product>();
}
}
public void UpdateProduct(Product product)
{
using (var session = SessionFactory.OpenSession())