Mango.Nop.Plugins/Nop.Plugin.Misc.AuctionPlugin/Components/LiveAnnouncementViewCompone...

89 lines
4.0 KiB
C#

using AyCode.Core.Extensions;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.SignalR;
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.Logging;
using Nop.Web.Framework.Components;
using Nop.Web.Framework.Infrastructure;
namespace Nop.Plugin.Misc.AuctionPlugin.Components
{
[ViewComponent(Name = "LiveAnnouncement")]
public class LiveAnnouncementViewComponent(ILogger logger, IWorkContext workContext, IWidgetPluginManager widgetPluginManager, AuctionService auctionService, IHubContext<AuctionHub> auctionHubContext)
: NopViewComponent
{
public async Task<IViewComponentResult> InvokeAsync(string widgetZone, object additionalData)
{
//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
var customer = await workContext.GetCurrentCustomerAsync();
await logger.InformationAsync($"SignalR Widget called customer: {customer.Email}");
if (!await widgetPluginManager.IsPluginActiveAsync(AuctionDefaults.SystemName, customer))
return Content(string.Empty);
await logger.InformationAsync("SignalR Widget: widget active");
if (!widgetZone.Equals(PublicWidgetZones.BodyStartHtmlTagAfter))
{
return Content(string.Empty);
}
return View("~/Plugins/Misc.AuctionPlugin/Views/LiveAnnouncement.cshtml");
}
}
}