fixes
This commit is contained in:
parent
992e4a6c40
commit
0f6d7006a7
|
|
@ -17,6 +17,7 @@ using Nop.Web.Framework.Mvc;
|
|||
using Nop.Web.Framework.Mvc.Filters;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using AyCode.Core.Extensions;
|
||||
|
||||
namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
using Nop.Plugin.Misc.AuctionPlugin.Hubs.Messages;
|
||||
using System.Globalization;
|
||||
using AyCode.Core.Extensions;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Hubs.Messages;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Models;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Services;
|
||||
|
|
@ -28,105 +30,86 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs
|
|||
|
||||
public async Task HandleMessage(MessageWrapper message)
|
||||
{
|
||||
if (message?.Data == null)
|
||||
{
|
||||
_logger.Error($"SignalRMessageHandler.HandleMessage(); message?.Data == null");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (message.MessageType)
|
||||
{
|
||||
//nameof(IAuctionHubClient.SendPrice)
|
||||
case "BidRequestMessage":
|
||||
await HandleBidRequest(message.Data);
|
||||
await HandleBidRequest(message.Data.ToString()?.JsonTo<AuctionBidRequest>());
|
||||
break;
|
||||
|
||||
// Add other message types here
|
||||
default:
|
||||
await _logger.ErrorAsync("Unknown message type");
|
||||
await _logger.ErrorAsync("SignalRMessageHandler.HandleMessage(); Unknown message type");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task HandleBidRequest(object data)
|
||||
private async Task HandleBidRequest(AuctionBidRequest bidRequestMessage)
|
||||
{
|
||||
AuctionBidRequest bidRequestMessage = new AuctionBidRequest();
|
||||
try
|
||||
if (bidRequestMessage == null)
|
||||
{
|
||||
var a = JsonConvert.DeserializeObject<AuctionBidRequest>(data.ToString());
|
||||
//var b = (message.Data as JObject)?.ToObject<AuctionBidRequest>();
|
||||
if (a == null)
|
||||
{
|
||||
await _logger.InformationAsync("Deserialization returned null. Message data might not match the expected structure.");
|
||||
}
|
||||
|
||||
bidRequestMessage = a;
|
||||
_logger.Error($"SignalRMessageHandler.HandleBidRequest(); bidRequestMessage == null");
|
||||
return;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await _logger.ErrorAsync("Error during deserialization of AuctionBidRequest", ex);
|
||||
}
|
||||
//AuctionBidRequest bidRequestMessage = new AuctionBidRequest();
|
||||
|
||||
try
|
||||
{
|
||||
await _logger.InformationAsync($"SignalRMessageHandler.HandleBidRequest(); Bid received: - Auction: {bidRequestMessage.AuctionId} Product: {bidRequestMessage.ProductId} - Bid: {bidRequestMessage.BidPrice} - Customer: {bidRequestMessage.CustomerId}");
|
||||
|
||||
if (bidRequestMessage != null)
|
||||
var product = await _productService.GetProductByIdAsync(bidRequestMessage.ProductId);
|
||||
if (product == null)
|
||||
{
|
||||
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)
|
||||
{
|
||||
//validate the bidprice amount
|
||||
|
||||
|
||||
//set new price
|
||||
product.Price = Convert.ToDecimal(bidRequestMessage.BidPrice);
|
||||
|
||||
}
|
||||
|
||||
List<ProductToAuctionMapping> 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);
|
||||
_logger.Error($"SignalRMessageHandler.HandleBidRequest(); product == null");
|
||||
return; //ha nincs product vagy exception van, akkor ne broadcast-eljük ki az invalid Bid-et! - J.
|
||||
}
|
||||
|
||||
var mapping = await _auctionService.GetProductToAuctionByAuctionIdAndProductIdAsync(bidRequestMessage.AuctionId, bidRequestMessage.ProductId);
|
||||
if (mapping == null || mapping.Count == 0)
|
||||
{
|
||||
_logger.Error($"SignalRMessageHandler.HandleBidRequest(); mapping == null || mapping.Count == 0");
|
||||
return; //ha nincs ProductToAuction, akkor ne broadcast-eljük ki az invalid Bid-et! - J.
|
||||
}
|
||||
|
||||
var auctionBid = bidRequestMessage.CreateMainEntity();
|
||||
auctionBid.ProductAuctionMappingId = mapping.FirstOrDefault()!.Id;
|
||||
|
||||
//TODO: validate the bidprice amount
|
||||
if (product.Price >= bidRequestMessage.BidPrice)
|
||||
{
|
||||
_logger.Warning($"SignalRMessageHandler.HandleBidRequest(); product.Price >= bidRequestMessage.BidPrice; productPrice: {product.Price}; bidRequestPrice: {bidRequestMessage.BidPrice}");
|
||||
return;
|
||||
}
|
||||
|
||||
//save bid
|
||||
await _auctionService.InsertBidAsync(auctionBid);
|
||||
|
||||
//set new price
|
||||
product.Price = bidRequestMessage.BidPrice;
|
||||
await _productService.UpdateProductAsync(product);
|
||||
|
||||
// Optionally broadcast to all clients
|
||||
var bid = new MessageWrapper
|
||||
{
|
||||
MessageType = "bidNotification",
|
||||
Data = new BidNotificationMessage
|
||||
{
|
||||
ProductName = bidRequestMessage.ProductId.ToString(),
|
||||
BidPrice = bidRequestMessage.BidPrice.ToString(CultureInfo.InvariantCulture),
|
||||
NextStepAmount = "50000"
|
||||
}
|
||||
};
|
||||
|
||||
await _hubContext.Clients.All.SendAsync("send", bid.ToJson());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error($"MessageHandling error: {ex.ToString()}");
|
||||
_logger.Error($"SignalRMessageHandler.HandleBidRequest(); MessageHandling error: {ex}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,15 +3,16 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos;
|
||||
|
||||
namespace Nop.Plugin.Misc.AuctionPlugin.Models
|
||||
{
|
||||
public class AuctionBidRequest
|
||||
public class AuctionBidRequest : AuctionBidDto
|
||||
{
|
||||
public string AuctionId { get; set; }
|
||||
public string BidPrice { get; set; }
|
||||
public string ProductId { get; set; }
|
||||
public string CustomerId { get; set; }
|
||||
public int AuctionId { get; set; }
|
||||
//public string BidPrice { get; set; }
|
||||
//public int ProductId { get; set; }
|
||||
//public int CustomerId { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue