100 lines
5.0 KiB
C#
100 lines
5.0 KiB
C#
using AyCode.Core.Extensions;
|
|
using AyCode.Utils.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.Models;
|
|
using Nop.Plugin.Misc.AuctionPlugin.Services;
|
|
using Nop.Services.Cms;
|
|
using Nop.Services.Customers;
|
|
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, ILockService lockService, IWorkContext workContext, IWidgetPluginManager widgetPluginManager, AuctionService auctionService, IHubContext<AuctionHub> auctionHubContext, ICustomerService customerService)
|
|
: NopViewComponent
|
|
{
|
|
public async Task<IViewComponentResult> InvokeAsync(string widgetZone, object additionalData)
|
|
{
|
|
var customer = await workContext.GetCurrentCustomerAsync();
|
|
var currency = await workContext.GetWorkingCurrencyAsync();
|
|
await logger.InformationAsync($"LiveAnnouncementViewComponent.InvokeAsync(); Before lock; widgetZone: {widgetZone}", null, customer);
|
|
|
|
//using (await lockService.SemaphoreSlim.UseWaitAsync())
|
|
//{
|
|
// await logger.InformationAsync($"LiveAnnouncementViewComponent.InvokeAsync(); Enter lock; widgetZone: {widgetZone}", null, customer);
|
|
|
|
// await Task.Delay(1000);
|
|
|
|
// 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;
|
|
// 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());
|
|
// }
|
|
// }
|
|
|
|
// await logger.InformationAsync($"LiveAnnouncementViewComponent.InvokeAsync(); Exit lock; widgetZone: {widgetZone}", null, customer);
|
|
//}
|
|
|
|
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);
|
|
|
|
LiveAnnouncementViewModel myModel = new LiveAnnouncementViewModel();
|
|
|
|
myModel.CustomerId = customer.Id;
|
|
myModel.StoreId = customer.RegisteredInStoreId; //Temporary - A.
|
|
myModel.WorkingCurrency = currency;
|
|
myModel.IsAdmin = await customerService.IsAdminAsync(customer);
|
|
myModel.IsGuest = await customerService.IsGuestAsync(customer);
|
|
return View("~/Plugins/Misc.AuctionPlugin/Views/LiveAnnouncement.cshtml", myModel);
|
|
}
|
|
}
|
|
}
|