From 992e4a6c40a04654cb94edf31395f1e70f123d59 Mon Sep 17 00:00:00 2001 From: Loretta Date: Tue, 19 Nov 2024 11:30:30 +0100 Subject: [PATCH] fixes --- .../AdminProductAuctionSettingsBox.cshtml | 6 +- .../Hubs/SignalRMessageHandler.cs | 112 ++++++++++-------- .../Services/AuctionService.cs | 5 +- .../Services/IAuctionService.cs | 2 - 4 files changed, 68 insertions(+), 57 deletions(-) diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/AdminProductAuctionSettingsBox.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/AdminProductAuctionSettingsBox.cshtml index 95e6301..a8bbc18 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/AdminProductAuctionSettingsBox.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Views/AdminProductAuctionSettingsBox.cshtml @@ -50,14 +50,16 @@ }; addAntiForgeryToken(postData); - console.log("postData: " + JSON.stringify(postData)); + var jsonData = JSON.stringify(postData); + console.log("postData: " + jsonData); + debugger; // Perform AJAX call $.ajax({ url: "/Admin/AuctionPluginAdmin/AssignProductToAuction", // Update to match your endpoint type: "POST", contentType: "application/json", - data: JSON.stringify(postData), + data: jsonData, traditional: true, success: function (response) { alert("Product successfully assigned to the auction!"); diff --git a/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs b/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs index 585751d..d76f3b9 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs @@ -30,6 +30,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs { switch (message.MessageType) { + //nameof(IAuctionHubClient.SendPrice) case "BidRequestMessage": await HandleBidRequest(message.Data); break; @@ -52,6 +53,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs { await _logger.InformationAsync("Deserialization returned null. Message data might not match the expected structure."); } + bidRequestMessage = a; } catch (Exception ex) @@ -60,66 +62,72 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs } //AuctionBidRequest bidRequestMessage = new AuctionBidRequest(); - if (bidRequestMessage != null) + try { - await _logger.InformationAsync($"Bid received: - Auction:{bidRequestMessage.AuctionId} Product: {bidRequestMessage.ProductId} - Bid: {bidRequestMessage.BidPrice} - Customer: {bidRequestMessage.CustomerId}"); - //get product - var product = await _productService.GetProductByIdAsync(Convert.ToInt32(bidRequestMessage.ProductId)); - - if (product != null) + if (bidRequestMessage != null) { - //validate the bidprice amount + await _logger.InformationAsync($"Bid received: - Auction:{bidRequestMessage.AuctionId} Product: {bidRequestMessage.ProductId} - Bid: {bidRequestMessage.BidPrice} - Customer: {bidRequestMessage.CustomerId}"); + //get product + var product = await _productService.GetProductByIdAsync(Convert.ToInt32(bidRequestMessage.ProductId)); - //set new price - product.Price = Convert.ToDecimal(bidRequestMessage.BidPrice); - - } - - List mapping = await _auctionService.GetProductToAuctionByAuctionIdAndProductIdAsync(Convert.ToInt32(bidRequestMessage.AuctionId), Convert.ToInt32(bidRequestMessage.ProductId)); - - - AuctionBid auctionBid = new AuctionBid(); - - auctionBid.ProductId = Convert.ToInt32(bidRequestMessage.ProductId); - auctionBid.CustomerId = Convert.ToInt32(bidRequestMessage.CustomerId); - auctionBid.BidPrice = Convert.ToDecimal(bidRequestMessage.BidPrice); - auctionBid.ProductAuctionMappingId = mapping.FirstOrDefault().Id; - - //save bid - try - { - var result = _auctionService.InsertBidAsync(auctionBid); - - } - catch(Exception ex) - { - _logger.Error($"MessageHandling error: {ex.ToString()}"); - } - - //update product - - await _productService.UpdateProductAsync(product); - - // Optionally broadcast to all clients - var bid = new MessageWrapper - { - MessageType = "bidNotification", - Data = new BidNotificationMessage + if (product != null) { - ProductName = bidRequestMessage.ProductId, - BidPrice = bidRequestMessage.BidPrice, - NextStepAmount = "50000" - } - }; - var jsonMessage = JsonConvert.SerializeObject(bid, Formatting.Indented, - new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() } - ); + //validate the bidprice amount - await _hubContext.Clients.All.SendAsync("send", jsonMessage); + + //set new price + product.Price = Convert.ToDecimal(bidRequestMessage.BidPrice); + + } + + List mapping = await _auctionService.GetProductToAuctionByAuctionIdAndProductIdAsync(Convert.ToInt32(bidRequestMessage.AuctionId), Convert.ToInt32(bidRequestMessage.ProductId)); + + + AuctionBid auctionBid = new AuctionBid(); + + auctionBid.ProductId = Convert.ToInt32(bidRequestMessage.ProductId); + auctionBid.CustomerId = Convert.ToInt32(bidRequestMessage.CustomerId); + auctionBid.BidPrice = Convert.ToDecimal(bidRequestMessage.BidPrice); + auctionBid.ProductAuctionMappingId = mapping.FirstOrDefault().Id; + + //save bid + try + { + await _auctionService.InsertBidAsync(auctionBid); + } + catch (Exception e) + { + _logger.Error($"MessageHandling InsertBidAsync error: {e.ToString()}"); + } + + //update product + + await _productService.UpdateProductAsync(product); + + // Optionally broadcast to all clients + var bid = new MessageWrapper + { + MessageType = "bidNotification", + Data = new BidNotificationMessage + { + ProductName = bidRequestMessage.ProductId, + BidPrice = bidRequestMessage.BidPrice, + NextStepAmount = "50000" + } + }; + var jsonMessage = JsonConvert.SerializeObject(bid, Formatting.Indented, + new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() } + ); + + await _hubContext.Clients.All.SendAsync("send", jsonMessage); + } + } + catch (Exception ex) + { + _logger.Error($"MessageHandling error: {ex.ToString()}"); } - } } } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs index c412205..33f7792 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs @@ -211,12 +211,15 @@ public class AuctionService : IAuctionService return new List(await _ctx.ProductToAuctions.GetByAuctionAndProductId(auctionId, productId).ToListAsync()); } - public async Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId) + public async Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId) { var auction = await GetAuctionDtoByIdAsync(auctionId); if (auction == null) return null; + var existedProductToAuction = (await GetProductToAuctionByAuctionIdAndProductIdAsync(auctionId, productId)).FirstOrDefault(); + if (existedProductToAuction != null) return existedProductToAuction; + var mapping = new ProductToAuctionMapping { ProductId = productId, diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs index ca7ce33..aa7ffb1 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs @@ -50,6 +50,4 @@ public interface IAuctionService Task> GetProductToAuctionsByProductIdAsync(int productId); Task> GetProductToAuctionByAuctionIdAndProductIdAsync(int auctionId, int productId); - - Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId); } \ No newline at end of file