improvements, fixes, etc...

This commit is contained in:
Loretta 2024-12-10 13:45:29 +01:00
parent 070f634069
commit 7353efadc4
6 changed files with 90 additions and 30 deletions

View File

@ -98,11 +98,11 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Components
productId = productModel.Id; productId = productModel.Id;
var auctions = await _auctionService.GetAllAuctionsAsync() ?? new List<Auction>(); var auctions = await _auctionService.GetAllAuctionsAsync() ?? [];
// Assign the auctions to the ViewBag // Assign the auctions to the ViewBag
ViewBag.Auctions = auctions; ViewBag.Auctions = auctions;
ProductAssignToAuctionViewModel viewModel = new ProductAssignToAuctionViewModel(); var viewModel = new ProductAssignToAuctionViewModel();
viewModel.ProductId = productId; viewModel.ProductId = productId;
viewModel.StartingPrice = productModel.OldPrice; viewModel.StartingPrice = productModel.OldPrice;
viewModel.BidPrice = productModel.OldPrice; viewModel.BidPrice = productModel.OldPrice;

View File

@ -1,5 +1,12 @@
using Microsoft.AspNetCore.Mvc; using AyCode.Core.Extensions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
using Nop.Core; using Nop.Core;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums;
using Nop.Plugin.Misc.AuctionPlugin.Hubs;
using Nop.Plugin.Misc.AuctionPlugin.Hubs.Messages;
using Nop.Plugin.Misc.AuctionPlugin.Services;
using Nop.Services.Cms; using Nop.Services.Cms;
using Nop.Services.Logging; using Nop.Services.Logging;
using Nop.Web.Framework.Components; using Nop.Web.Framework.Components;
@ -9,31 +16,64 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Components
{ {
[ViewComponent(Name = "LiveAnnouncement")] [ViewComponent(Name = "LiveAnnouncement")]
public class LiveAnnouncementViewComponent : NopViewComponent public class LiveAnnouncementViewComponent(ILogger logger, IWorkContext workContext, IWidgetPluginManager widgetPluginManager, AuctionService auctionService, IHubContext<AuctionHub> auctionHubContext)
: NopViewComponent
{ {
protected readonly ILogger _logger;
protected readonly IWorkContext _workContext;
protected readonly IWidgetPluginManager _widgetPluginManager;
public LiveAnnouncementViewComponent(ILogger logger, IWorkContext workContext, IWidgetPluginManager widgetPluginManager)
{
_logger = logger;
_workContext = workContext;
_widgetPluginManager = widgetPluginManager;
}
public async Task<IViewComponentResult> InvokeAsync(string widgetZone, object additionalData) public async Task<IViewComponentResult> InvokeAsync(string widgetZone, object additionalData)
{ {
await _logger.InformationAsync("SignalR Widget called"); //await logger.InformationAsync("LiveAnnouncementViewComponent.InvokeAsync called");
//lock... - J.
var auctions = await auctionService.GetAllCurrentAutoOpenAndClosedAuctionsAsync();
if (auctions.Count > 0)
{
await logger.InformationAsync($"LiveAnnouncementViewComponent.InvokeAsync auctions.Count > 0; count: {auctions.Count}; names: {string.Join("; ", auctions.Select(x => x.AuctionName))}");
var statusChangedMessageWrapper = new MessageWrapper
{
MessageType = nameof(ProductToAuctionStatusNotification),
SenderId = 0,
ResponseType = ResponseType.ToAllClients
};
foreach (var auction in auctions)
{
auction.Closed = false;
await auctionService.UpdateAuctionAsync(auction);
var auctionDto = new AuctionDto(auction);
var productToAuctions = (await auctionService.GetProductToAuctionsByAuctionIdAsync(auction.Id, false)).Where(x => x.AuctionStatus == AuctionStatus.None).ToList();
foreach (var productToAuction in productToAuctions)
{
productToAuction.AuctionStatus = AuctionStatus.Active;
await auctionService.UpdateProductToAuctionMappingAsync(productToAuction);
auctionDto.ProductToAuctionDtos.Clear();//TEMPOPRARY - J.
auctionDto.ProductToAuctionDtos.Add(new ProductToAuctionDto(productToAuction));
////TEMPOPRARY - J.
//statusChangedMessageWrapper.Data = new ProductToAuctionStatusNotification(auctionDto, 0, $"Az aukciót megnyitottuk: {auction.AuctionName}").ToJson();
//await _auctionHubContext.Clients.All.SendAsync("send", statusChangedMessageWrapper.ToJson());
////TEMPOPRARY - J.
}
await auctionService.UpdateProductToAuctionMappingAsync(productToAuctions);
statusChangedMessageWrapper.Data = new ProductToAuctionStatusNotification(auctionDto, 0, $"Az aukciót megnyitottuk: {auction.AuctionName}").ToJson();
await auctionHubContext.Clients.All.SendAsync("send", statusChangedMessageWrapper.ToJson());
}
}
//ensure that what3words widget is active and enabled //ensure that what3words widget is active and enabled
var customer = await _workContext.GetCurrentCustomerAsync(); var customer = await workContext.GetCurrentCustomerAsync();
await _logger.InformationAsync($"SignalR Widget called customer: {customer.Email}"); await logger.InformationAsync($"SignalR Widget called customer: {customer.Email}");
if (!await _widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName, customer)) if (!await widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName, customer))
return Content(string.Empty); return Content(string.Empty);
await _logger.InformationAsync("SignalR Widget: widget active"); await logger.InformationAsync("SignalR Widget: widget active");
if (!widgetZone.Equals(PublicWidgetZones.BodyStartHtmlTagAfter)) if (!widgetZone.Equals(PublicWidgetZones.BodyStartHtmlTagAfter))
{ {

View File

@ -5,6 +5,7 @@ using Nop.Core.Configuration;
using Nop.Core.Events; using Nop.Core.Events;
using Nop.Data; using Nop.Data;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums;
using Nop.Services.Logging; using Nop.Services.Logging;
namespace Nop.Plugin.Misc.AuctionPlugin.Domains.DataLayer; namespace Nop.Plugin.Misc.AuctionPlugin.Domains.DataLayer;
@ -16,9 +17,18 @@ public class AuctionDbTable: MgDbTableBase<Auction>
{ {
} }
public Task<IList<Auction>> GetAllAuctionsAsync() public IQueryable<Auction> GetAllAuctions()
{ {
return GetAllAsync(auctions => auctions.OrderByDescending(x => x.StartDateUtc), _ => default); return Table; //GetAllAsync(auctions => auctions.OrderByDescending(x => x.StartDateUtc), _ => default);
} }
/// <summary>
/// x.StartDateUtc <= utcNow && x.EndDateUtc >= utcNow
/// </summary>
/// <returns></returns>
public IQueryable<Auction> GetAllCurrentAutoOpenAndClosedAuctions()
{
var utcNow = DateTime.UtcNow;
return Table.Where(x => x.AuctionType == AuctionType.AutomaticAll && x.Closed && x.StartDateUtc <= utcNow && x.EndDateUtc >= utcNow).OrderByDescending(x=>x.StartDateUtc);
}
} }

View File

@ -14,6 +14,7 @@ using Nop.Core.Domain.Catalog;
using Nop.Core.Domain.Customers; using Nop.Core.Domain.Customers;
using Nop.Services.Catalog; using Nop.Services.Catalog;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using DocumentFormat.OpenXml.Spreadsheet;
namespace Nop.Plugin.Misc.AuctionPlugin.Hubs namespace Nop.Plugin.Misc.AuctionPlugin.Hubs
{ {
@ -34,8 +35,10 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs
if (httpContext == null) await logger.ErrorAsync($"AuctionHub.OnConnectedAsync(); (httpContext == null); connectionId: {connectionId}"); if (httpContext == null) await logger.ErrorAsync($"AuctionHub.OnConnectedAsync(); (httpContext == null); connectionId: {connectionId}");
else else
{ {
if (sessionService.GetOrCreateSessionItem(httpContext.Session.Id) == null) var sessionItem = sessionService.GetOrCreateSessionItem(httpContext.Session.Id);
await logger.ErrorAsync($"AuctionHub.OnConnectedAsync(); (sessionItem == null); connectionId: {connectionId}; sessionId: {httpContext.Session.Id}");
if (sessionItem == null) await logger.ErrorAsync($"AuctionHub.OnConnectedAsync(); (sessionItem == null); connectionId: {connectionId}; sessionId: {httpContext.Session.Id}");
else sessionItem.SignaRConnectionId = connectionId;
var userName = httpContext.Request.Query["ConnectionId"]; var userName = httpContext.Request.Query["ConnectionId"];
if (!string.IsNullOrEmpty(userName)) if (!string.IsNullOrEmpty(userName))
@ -67,6 +70,8 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs
var customer = await workContext.GetCurrentCustomerAsync(); var customer = await workContext.GetCurrentCustomerAsync();
//var connectionId = sessionItem?.SessionId; //var connectionId = sessionItem?.SessionId;
//ArgumentNullException.ThrowIfNull(messageWrapper?.Data);
if (messageWrapper?.Data == null) if (messageWrapper?.Data == null)
{ {
logger.Error($"AuctionHub.HandleMessageAsync(); message?.Data == null; connectionId: {connectionId}", null, customer); logger.Error($"AuctionHub.HandleMessageAsync(); message?.Data == null; connectionId: {connectionId}", null, customer);

View File

@ -396,10 +396,8 @@ public class AuctionService(
await ctx.Auctions.UpdateAsync(auction); await ctx.Auctions.UpdateAsync(auction);
} }
public async Task<IList<Auction>> GetAllAuctionsAsync() public Task<List<Auction>> GetAllAuctionsAsync() =>ctx.Auctions.GetAllAuctions().ToListAsync();
{ public Task<List<Auction>> GetAllCurrentAutoOpenAndClosedAuctionsAsync() =>ctx.Auctions.GetAllCurrentAutoOpenAndClosedAuctions().ToListAsync();
return await ctx.Auctions.GetAllAuctionsAsync();
}
public async Task<List<ProductToAuctionMapping>> GetProductToAuctionsByAuctionIdAsync(int auctionId, bool onlyActiveItems) public async Task<List<ProductToAuctionMapping>> GetProductToAuctionsByAuctionIdAsync(int auctionId, bool onlyActiveItems)
=> await ctx.ProductToAuctions.GetProductToAuctionsByAuctionId(auctionId, onlyActiveItems).OrderBy(x => x.SortIndex).ToListAsync(); => await ctx.ProductToAuctions.GetProductToAuctionsByAuctionId(auctionId, onlyActiveItems).OrderBy(x => x.SortIndex).ToListAsync();
@ -535,5 +533,10 @@ public class AuctionService(
await ctx.ProductToAuctions.UpdateAsync(productToAuctionMapping); await ctx.ProductToAuctions.UpdateAsync(productToAuctionMapping);
} }
public async Task UpdateProductToAuctionMappingAsync(IList<ProductToAuctionMapping> productToAuctionMappings)
{
await ctx.ProductToAuctions.UpdateAsync(productToAuctionMappings);
}
#endregion Dtos #endregion Dtos
} }

View File

@ -41,7 +41,8 @@ public interface IAuctionService
Task InsertAuctionAsync(Auction auction); Task InsertAuctionAsync(Auction auction);
Task UpdateAuctionAsync(Auction auction); Task UpdateAuctionAsync(Auction auction);
Task<IList<Auction>> GetAllAuctionsAsync(); Task<List<Auction>> GetAllAuctionsAsync();
Task<List<Auction>> GetAllCurrentAutoOpenAndClosedAuctionsAsync();
Task<AuctionDto> GetAuctionDtoWithAuctionBids(int auctionId, bool activeProductOnly, int maxBidsCount); Task<AuctionDto> GetAuctionDtoWithAuctionBids(int auctionId, bool activeProductOnly, int maxBidsCount);
Task<List<ProductToAuctionMapping>> GetProductToAuctionsByAuctionIdAsync(int auctionId, bool onlyActiveItems); Task<List<ProductToAuctionMapping>> GetProductToAuctionsByAuctionIdAsync(int auctionId, bool onlyActiveItems);
@ -65,6 +66,7 @@ public interface IAuctionService
Task<List<ProductToAuctionMapping>> GetProductToAuctionByAuctionIdAndProductIdAsync(int auctionId, int productId, bool activeProductOnly); Task<List<ProductToAuctionMapping>> GetProductToAuctionByAuctionIdAndProductIdAsync(int auctionId, int productId, bool activeProductOnly);
Task<ProductToAuctionMapping> GetProductToAuctionMappingByIdAsync(int productToAuctionMappingId); Task<ProductToAuctionMapping> GetProductToAuctionMappingByIdAsync(int productToAuctionMappingId);
Task UpdateProductToAuctionMappingAsync(ProductToAuctionMapping productToAuctionMapping); Task UpdateProductToAuctionMappingAsync(ProductToAuctionMapping productToAuctionMapping);
Task UpdateProductToAuctionMappingAsync(IList<ProductToAuctionMapping> productToAuctionMappings);
Task<Order> CreateOrderForWinnerAsync(ProductToAuctionMapping productToAuctionMapping); Task<Order> CreateOrderForWinnerAsync(ProductToAuctionMapping productToAuctionMapping);
} }