From f1e022523e00a11f1e9cc1f5160e234e39d4c7c2 Mon Sep 17 00:00:00 2001 From: Loretta Date: Sun, 24 Nov 2024 19:18:51 +0100 Subject: [PATCH] ... --- .../Controllers/AnnouncementController.cs | 8 ++-- .../AuctionPluginAdminController.cs | 12 +----- .../Content/Js/LiveAnnouncement.js | 15 ++++---- .../Controllers/AuctionController.cs | 4 -- .../Domains/DataLayer/AuctionDbContext.cs | 11 ++++++ .../DataLayer/ProductToAuctionDbTable.cs | 1 + .../Domains/Enums/AuctionStatus.cs | 6 +-- .../EventConsumers/AuctionEventConsumer.cs | 1 + .../Hubs/SignalRMessageHandler.cs | 37 ++++++++----------- .../Builders/ProductToAuctionBuilder.cs | 2 +- .../Services/AuctionService.cs | 19 ++++------ .../Views/PublicProductBidBox.cshtml | 14 +++---- 12 files changed, 61 insertions(+), 69 deletions(-) diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs index 228bab1..125ebdd 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AnnouncementController.cs @@ -105,11 +105,11 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Controllers [HttpPost] public async Task SendBidNotificationViewModel(BidNotificationViewModel viewModel) { - AuctionBid objOfAuctionBid = new AuctionBid(); - objOfAuctionBid.ProductId = 4; - objOfAuctionBid.BidPrice = viewModel.BidPrice; + //AuctionBid objOfAuctionBid = new AuctionBid(); + //objOfAuctionBid.ProductId = 4; + //objOfAuctionBid.BidPrice = viewModel.BidPrice; - objOfAuctionBid.Created = DateTime.UtcNow; + //objOfAuctionBid.Created = DateTime.UtcNow; //await _announcementService.InsertAsync(objOfAuctionBid); diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs index 63d9c0b..08f5cbe 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs @@ -106,17 +106,7 @@ public class AuctionPluginAdminController : BasePluginController [HttpPost] public async Task GetAuctionViewModel(AuctionViewModel viewModel) { - Auction objOfAuctionDomain = new Auction(); - objOfAuctionDomain.AuctionName = viewModel.AuctionName; - objOfAuctionDomain.AuctionType = viewModel.AuctionType; - objOfAuctionDomain.StartDateUtc = viewModel.StartDateUtc; - objOfAuctionDomain.EndDateUtc = viewModel.EndDateUtc; - objOfAuctionDomain.Closed = viewModel.Closed; - objOfAuctionDomain.Created = DateTime.UtcNow; - - //TODO: ezt kell majd használni! - J. - //var objOfAuctionDomain = viewModel.AuctionDto.CreateMainEntity(); - + var objOfAuctionDomain = viewModel.AuctionDto.CreateMainEntity(); await _auctionService.InsertAuctionAsync(objOfAuctionDomain); //if (viewModel.IsActive == true) diff --git a/Nop.Plugin.Misc.AuctionPlugin/Content/Js/LiveAnnouncement.js b/Nop.Plugin.Misc.AuctionPlugin/Content/Js/LiveAnnouncement.js index 16806b7..05f42a8 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Content/Js/LiveAnnouncement.js +++ b/Nop.Plugin.Misc.AuctionPlugin/Content/Js/LiveAnnouncement.js @@ -7,22 +7,23 @@ Active: 1, FirstWarning: 2, SecondWarning: 4, - Sold: 8, - NotSold: 16 + Pause: 8, + Sold: 16, + NotSold: 32 }); // HUF Formatter - window.HUFFormatter = new Intl.NumberFormat('hu-HU', { - style: 'currency', - currency: 'HUF', + window.HUFFormatter = new Intl.NumberFormat("hu-HU", { + style: "currency", + currency: "HUF", }); // SignalR connection setup var connection = new signalR.HubConnectionBuilder() - .withUrl('/auctionhub') + .withUrl("/auctionhub") .build(); - connection.on('send', data => { + connection.on("send", data => { MessageHandler.handle(data); }); diff --git a/Nop.Plugin.Misc.AuctionPlugin/Controllers/AuctionController.cs b/Nop.Plugin.Misc.AuctionPlugin/Controllers/AuctionController.cs index 72646a9..df82227 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Controllers/AuctionController.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Controllers/AuctionController.cs @@ -94,8 +94,6 @@ public class AuctionController : BasePluginController if (isAnyItemLive) { - - activeMapping = auctionDto.ProductToAuctionDtos.Where(x => x.AuctionStatus == AuctionStatus.Active).FirstOrDefault(); product = await _productService.GetProductByIdAsync(activeMapping.ProductId); activeProductId = activeMapping.ProductId; activeProductToAuctionId = activeMapping.Id; @@ -103,9 +101,7 @@ public class AuctionController : BasePluginController basePrice = activeMapping.StartingPrice; currentPrice = activeMapping.CurrentPrice; nextStep = AuctionService.GetStepAmount(currentPrice); - } - else { activeMapping = null; diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbContext.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbContext.cs index 3b8b9da..cc514b8 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbContext.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbContext.cs @@ -33,4 +33,15 @@ public class AuctionDbContext : MgDbContextBase, IAuctionDbSet, // Auctions2 = _auctionRepository as EntityRepository; // AuctionBids2 = _auctionBidRepository; //} + + public async Task> GetProductToAuctionsByProductIdAsync(int productId) + { + return [..await ProductToAuctions.GetByProductId(productId).ToListAsync()]; + } + + public async Task> GetProductToAuctionByAuctionIdAndProductIdAsync(int auctionId, int productId, bool activeProductOnly) + { + return [..await ProductToAuctions.GetByAuctionAndProductId(auctionId, productId, activeProductOnly).ToListAsync()]; + } + } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/ProductToAuctionDbTable.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/ProductToAuctionDbTable.cs index fefde9b..4a1323f 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/ProductToAuctionDbTable.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/ProductToAuctionDbTable.cs @@ -54,6 +54,7 @@ public class ProductToAuctionDbTable : MgDbTableBase return; } + //TODO: ezt kivegyem egyelőre? amíg a Product.Price-t használjuk, addig nem sok értelme productToAuction.StartingPrice = basePrice; productToAuction.CurrentPrice = basePrice; productToAuction.WinnerCustomerId = 0; diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs index 0068e5c..9d3e769 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs @@ -17,7 +17,7 @@ public enum AuctionStatus : byte Active = 1, FirstWarning = 2, SecondWarning = 4, - Sold = 8, - NotSold = 16, - Pause = 32 + Pause = 8, + Sold = 16, + NotSold = 32, } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/EventConsumers/AuctionEventConsumer.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/EventConsumers/AuctionEventConsumer.cs index 4b893a5..aca55b1 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/EventConsumers/AuctionEventConsumer.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/EventConsumers/AuctionEventConsumer.cs @@ -14,6 +14,7 @@ public class AuctionEventConsumer(IHttpContextAccessor httpContextAccessor, Auct //TODO: itt lehetne ciklussal az összes ProductToAuction-re! - J. var productToAuction = await ctx.ProductToAuctions.GetByProductId(eventMessage.Entity.Id).FirstOrDefaultAsync(); + //foreach if (productToAuction is { AuctionStatus: AuctionStatus.None }) { await ctx.ProductToAuctions.DeactivateItem(productToAuction, eventMessage.Entity.Price); diff --git a/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs b/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs index 5c9e9f1..1d2aacd 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Hubs/SignalRMessageHandler.cs @@ -1,7 +1,5 @@ -using System.Globalization; -using AyCode.Core.Extensions; +using AyCode.Core.Extensions; using AyCode.Utils.Extensions; -using AyCode.Utils.Wrappers; using Nop.Plugin.Misc.AuctionPlugin.Hubs.Messages; using Nop.Plugin.Misc.AuctionPlugin.Models; using Nop.Plugin.Misc.AuctionPlugin.Services; @@ -9,27 +7,21 @@ using Nop.Services.Catalog; using Nop.Services.Logging; using Microsoft.AspNetCore.SignalR; using Nop.Core; -using Nop.Plugin.Misc.AuctionPlugin.Domains.DataLayer.Interfaces; using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; namespace Nop.Plugin.Misc.AuctionPlugin.Hubs { - //- FirstWarning, SecondWarning, - //- ProductToAuctionDto ne lista legyen - //- GetFullAuctionDto - //- SortIndex - //- Rátettem egy unique-ot az AuctionId és a ProductId-ra!!! - //- Új field-ek a db-be! pl.: WinnerCustomerId, stb... - //- IsActiveItem - //- Product onupdate - //- lock + //- Dollár currency + //- Pipa, ha tied a licit + //- Pause, Lezárás, Revert, + //- ha saját licit a legjobb vagy lezárt, ne lehessen bid-elni //- az előző esetben a kliensen a gombot is tiltani, már a.cshtml-ben ellenőrizni! - //- ha nincs login elszállhat a kliens + + //- csak a watch-olt item-eknél legyen announcment //- ha bid-elt 1x is, kerüljön a watch-ba //- DbTransaction-t vhogy megcsinánli! - //- NextStepAmount public class SignalRMessageHandler(ILogger logger, IProductService productService, AuctionService auctionService, IHubContext hubContext, IWorkContext workContext) { @@ -91,6 +83,9 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs await logger.InformationAsync($"SignalRMessageHandler.HandleProductToAuctionStatusChangedRequest(); ProductToAuctionMappingId: {auctionProductStatusRequest.ProductToAuctionId}; Status: {auctionProductStatusRequest.AuctionStatus}({(int)auctionProductStatusRequest.AuctionStatus})"); //TODO: if IsAdmin.. - J. + //productBidBoxViewModel.IsAdmin = await _customerService.IsAdminAsync(customer); + //productBidBoxViewModel.IsGuest = await _customerService.IsGuestAsync(customer); + //TODO: if nincs aktív item.. - J. var auction = await auctionService.GetAuctionDtoByProductToAuctionIdAsync(auctionProductStatusRequest.ProductToAuctionId, false); @@ -119,7 +114,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs switch (auctionProductStatusRequest.AuctionStatus) { case AuctionStatus.Pause: - //TODO: - J. + //TODO: Pause - J. break; case AuctionStatus.Sold: @@ -155,7 +150,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs SenderId = senderId, Data = new ProductToAuctionStatusNotification(await auctionService.GetAuctionDtoByProductToAuctionIdAsync(productToAuction.Id, true)) { - ToasterMessage = "string.Empty", //TODO: - J. + ToasterMessage = "EMPTY", //TODO: - J. }.ToJson() }; @@ -180,9 +175,10 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs { await logger.InformationAsync($"SignalRMessageHandler.HandleBidRequest(); Bid received; Auction: {bidRequestMessage.AuctionId}; Product: {bidRequestMessage.ProductId}; Bid: {bidRequestMessage.BidPrice}; Customer: {bidRequestMessage.CustomerId}"); - //CustomerService a = new CustomerService()a.IsGuestAsync() + //CustomerService a = new CustomerService()a.IsGuestAsync() //TODO: IsGuestAsync??? - J. + var customer = await workContext.GetCurrentCustomerAsync(); - if (customer == null || bidRequestMessage.CustomerId != customer.Id) //|| !customer.Active) //TODO: ??? - J. + if (customer == null || bidRequestMessage.CustomerId != customer.Id) //|| !customer.Active) { logger.Error($"SignalRMessageHandler.HandleBidRequest(); (customer == null || bidRequestMessage.CustomerId != customer.Id)"); return; @@ -234,7 +230,6 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs var stepAmount = AuctionService.GetStepAmount(auctionBid.BidPrice); var nextBidPrice = auctionBid.BidPrice + stepAmount; - //stepAmount = GetStepAmount(nextBidPrice); //Direkt van 2x, különben a sávváltásoknál lehet gond! - J. var bid = new MessageWrapper { @@ -246,7 +241,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs CurrentPrice = auctionBid.BidPrice, NextStepAmount = stepAmount, NextBidPrice = nextBidPrice, - ToasterMessage = string.Empty, //TODO: - J. + ToasterMessage = "EMPTY", //TODO: - J. }.ToJson() }; diff --git a/Nop.Plugin.Misc.AuctionPlugin/Mapping/Builders/ProductToAuctionBuilder.cs b/Nop.Plugin.Misc.AuctionPlugin/Mapping/Builders/ProductToAuctionBuilder.cs index e03a951..3a585d2 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Mapping/Builders/ProductToAuctionBuilder.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Mapping/Builders/ProductToAuctionBuilder.cs @@ -25,7 +25,7 @@ public class ProductToAuctionMappingBuilder : NopEntityBuilder(onDelete: Rule.Cascade) //Rule.Cascade?? .WithColumn(nameof(ProductToAuctionMapping.ProductId)).AsInt32().ForeignKey(onDelete: Rule.Cascade) //Rule.Cascade?? - .WithColumn(nameof(ProductToAuctionMapping.AuctionStatus)).AsByte().NotNullable() //enum??? - J. + .WithColumn(nameof(ProductToAuctionMapping.AuctionStatus)).AsByte().NotNullable() .WithColumn(nameof(ProductToAuctionMapping.StartingPrice)).AsInt32().NotNullable() .WithColumn(nameof(ProductToAuctionMapping.CurrentPrice)).AsInt32().NotNullable() diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs index f057e39..68e0afe 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs @@ -24,7 +24,7 @@ public class AuctionService : IAuctionService /// /// {0} : current store ID /// - private readonly CacheKey _auctionAllKey = new("Nop.auction.all-{0}", AUCTION_PATTERN_KEY); //nem ezt használjuk a kódban, nem gond?! - J. + private readonly CacheKey _auctionAllKey = new("Nop.auction.all-{0}", AUCTION_PATTERN_KEY); private const string AUCTION_PATTERN_KEY = "Nop.auction."; #endregion @@ -78,7 +78,7 @@ public class AuctionService : IAuctionService { return currentPrice switch { - >= 0 and < 100000 => 10000, //Ezt csak hasraütésszerűen adtam meg!!! - J. + >= 0 and < 100000 => 10000, //100 000 - 1 000 000 >= 100000 and < 200000 => 10000, @@ -284,7 +284,7 @@ public class AuctionService : IAuctionService var productTouctionDto = await GetProductToAuctionDtoByIdAsync(productToAuctionId); if (productTouctionDto == null) return null; - var auctionDto = await GetAuctionDtoByIdAsync(productTouctionDto.AuctionId, false, false); //Ez sosem lehet null! - J. + var auctionDto = await GetAuctionDtoByIdAsync(productTouctionDto.AuctionId, false, false); if (includeProductToAuctionDto) auctionDto.ProductToAuctionDtos.Add(productTouctionDto); return auctionDto; @@ -302,15 +302,12 @@ public class AuctionService : IAuctionService return auctionBid == null ? null : new AuctionBidDto(auctionBid); } - public async Task> GetProductToAuctionsByProductIdAsync(int productId) - { - return [..await _ctx.ProductToAuctions.GetByProductId(productId).ToListAsync()]; - } + public Task> GetProductToAuctionsByProductIdAsync(int productId) + => _ctx.GetProductToAuctionsByProductIdAsync(productId); - public async Task> GetProductToAuctionByAuctionIdAndProductIdAsync(int auctionId, int productId, bool activeProductOnly) - { - return [..await _ctx.ProductToAuctions.GetByAuctionAndProductId(auctionId, productId, activeProductOnly).ToListAsync()]; - } + public Task> GetProductToAuctionByAuctionIdAndProductIdAsync(int auctionId, int productId, bool activeProductOnly) + => _ctx.GetProductToAuctionByAuctionIdAndProductIdAsync(auctionId, productId, activeProductOnly); + public async Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId) { diff --git a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml index c7ef3cc..90da6d2 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml +++ b/Nop.Plugin.Misc.AuctionPlugin/Views/PublicProductBidBox.cshtml @@ -15,17 +15,17 @@
Base Price: - @String.Format("{0:c}", Model.BasePrice) - @* @(decimal?.Round(Model.BasePrice, 2, MidpointRounding.AwayFromZero)) *@ + @($"{Model.BasePrice:c}") + @* @(decimal?.Round(Model.BasePrice, 2, MidpointRounding.AwayFromZero)) *@
Bid Step: - @String.Format("{0:c}", Model.LicitStep) + @($"{Model.LicitStep:c}")
@* -