diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs index a241597..ed978e8 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Controllers/AuctionPluginAdminController.cs @@ -98,6 +98,7 @@ public class AuctionPluginAdminController : BasePluginController public async Task AuctionList() { await _logger.InformationAsync("AnnouncementList called!"); + var model = new AuctionViewModel(); return View("~/Plugins/Misc.AuctionPlugin/Areas/Admin/Views/AuctionList.cshtml", model); } @@ -112,6 +113,10 @@ public class AuctionPluginAdminController : BasePluginController objOfAuctionDomain.EndDateUtc = viewModel.EndDateUtc; objOfAuctionDomain.Closed = viewModel.Closed; objOfAuctionDomain.Created = DateTime.UtcNow; + + //TODO: ezt kell majd használni! - J. + //var objOfAuctionDomain = viewModel.AuctionDto.CreateMainEntity(); + await _auctionService.InsertAuctionAsync(objOfAuctionDomain); //if (viewModel.IsActive == true) @@ -162,10 +167,7 @@ public class AuctionPluginAdminController : BasePluginController { _logger.Information("AssignProductToAuction has been called"); - - var result = await _auctionService.GetProductToAuctionsByAuctionIdAsync(1); - return Ok(result.ToJson()); } @@ -180,10 +182,7 @@ public class AuctionPluginAdminController : BasePluginController var result = await _auctionService.AssignProductToAuctionAsync(Convert.ToInt32(model.ProductId), Convert.ToDecimal(model.StartingPrice), Convert.ToDecimal(model.BidPrice), Convert.ToInt32(model.AuctionId)); - if (result) - return Ok("Baaaazdmeeeeeeeeg"); - return StatusCode(500, "Error assigning product to auction."); + return result != null ? Ok("Baaaazdmeeeeeeeeg") : StatusCode(500, "Error assigning product to auction."); } - } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/AuctionViewModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/AuctionViewModel.cs index 739bd91..1f85d54 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/AuctionViewModel.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Areas/Admin/Models/AuctionViewModel.cs @@ -1,4 +1,5 @@ -using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; +using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos; +using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; using Nop.Web.Framework.Models; using Nop.Web.Framework.Mvc.ModelBinding; @@ -8,6 +9,8 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Areas.Admin.Models { public string PageTitle { get; set; } + public AuctionDto AuctionDto { get; set; } + [NopResourceDisplayName("Name")] public string AuctionName { get; set; } public AuctionType AuctionType { get; set; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/AuctionBidDto.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/AuctionBidDto.cs index 76e7cbf..b5b6dcf 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/AuctionBidDto.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/AuctionBidDto.cs @@ -19,6 +19,8 @@ public class AuctionBidDto : IAuctionBidDto public AuctionBidDto(AuctionBid auctionBid) { + if (auctionBid == null) return; + Id = auctionBid.Id; ProductAuctionMappingId = auctionBid.ProductAuctionMappingId; CustomerId = auctionBid.CustomerId; diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/AuctionDto.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/AuctionDto.cs index a3f5017..827bb58 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/AuctionDto.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/AuctionDto.cs @@ -1,13 +1,17 @@ using Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos.Interfaces; using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; +using Nop.Web.Framework.Mvc.ModelBinding; namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Dtos; public class AuctionDto : IAuctionDto { public int Id { get; set; } + + [NopResourceDisplayName("Name")] public string AuctionName { get; set; } + public AuctionType AuctionType { get; set; } public DateTime StartDateUtc { get; set; } public DateTime? EndDateUtc { get; set; } @@ -21,6 +25,8 @@ public class AuctionDto : IAuctionDto public AuctionDto(Auction auction) { + if (auction == null) return; + Id = auction.Id; AuctionName = auction.AuctionName; AuctionType = auction.AuctionType; diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/ProductToAuctionDto.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/ProductToAuctionDto.cs index 6eb16d7..f43c70b 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/ProductToAuctionDto.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Dtos/ProductToAuctionDto.cs @@ -24,6 +24,8 @@ public class ProductToAuctionDto : IProductToAuctionDto public ProductToAuctionDto(ProductToAuctionMapping productToAuction) { + if (productToAuction == null) return; + Id = productToAuction.Id; ProductId = productToAuction.ProductId; AuctionId = productToAuction.AuctionId; diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs index 5374a6c..6d846aa 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Enums/AuctionStatus.cs @@ -1,11 +1,22 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; +//public enum AuctionStatus : byte +//{ +// None = 0, +// Active = 5, +// FirstWarning = 10, +// SecondWarning = 15, +// SoldOut = 20, +// NotSold = 25 +//} + +[Flags] public enum AuctionStatus : byte { None = 0, - Active = 5, - FirstWarning = 10, - SecondWarning = 15, - SoldOut = 20, - NotSold = 25 + Active = 1, + FirstWarning = 2, + SecondWarning = 4, + SoldOut = 8, + NotSold = 16 } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Hubs/AuctionHub.cs b/Nop.Plugin.Misc.AuctionPlugin/Hubs/AuctionHub.cs index 2a0ba7d..bde60c3 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Hubs/AuctionHub.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Hubs/AuctionHub.cs @@ -2,24 +2,29 @@ using Microsoft.AspNetCore.SignalR; using System.Threading.Tasks; +using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities.Interfaces; +using Nop.Plugin.Misc.AuctionPlugin.Services; using Nop.Services.Logging; namespace Nop.Plugin.Misc.AuctionPlugin.Hubs { public class AuctionHub : Hub - { - ILogger _logger; + { + private readonly ILogger _logger; + private IAuctionService _auctionService; + //HubCallerContext _hubCallerContext; - public AuctionHub(ILogger logger) + public AuctionHub(IAuctionService auctionService, ILogger logger) { - _logger = logger; + _logger = logger; + _auctionService = auctionService; } - public override async Task OnConnectedAsync() + public override async Task OnConnectedAsync() { - + //await _logger.InformationAsync($"Caller connected: id{_hubCallerContext.ConnectionId}"); var userId = Context.ConnectionId; await _logger.InformationAsync($"Caller connected with id: {userId}"); @@ -28,6 +33,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs { await _logger.InformationAsync($"Caller connected with name: {userName}"); } + await base.OnConnectedAsync(); } @@ -49,8 +55,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Hubs public async Task SendPriceToUsers(string message) { - await Clients.All.SendAsync("SendPrice", message); + await Clients.All.SendPrice(message); //SendAsync(nameof(IAuctionHubClient.SendPrice), message); } } - -} +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Models/AssignAuctionRequestModel.cs b/Nop.Plugin.Misc.AuctionPlugin/Models/AssignAuctionRequestModel.cs index 5f074d4..8337603 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Models/AssignAuctionRequestModel.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Models/AssignAuctionRequestModel.cs @@ -3,11 +3,15 @@ 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 AssignAuctionRequestModel + //TODO: Miért string minden property? - J. + public class AssignAuctionRequestModel //: AuctionDto { + //vagy az alábbi - J. + //public AuctionDto AuctionDto { get; set; } public string ProductId { get; set; } public string StartingPrice { get; set; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs index 924dcc5..00e76f8 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs @@ -162,32 +162,50 @@ public class AuctionService : IAuctionService #region Dtots public async Task GetAuctionDtoByIdAsync(int auctionId) { - return new AuctionDto(await _ctx.Auctions.GetByIdAsync(auctionId)); + var auction = await _ctx.Auctions.GetByIdAsync(auctionId); + return auction == null ? null : new AuctionDto(auction); } public async Task GetAuctionDtoWithProductByIdAsync(int auctionId, int productId) { - var auctionModel = new AuctionDto(await _ctx.Auctions.GetByIdAsync(auctionId)); - auctionModel.ProductToAuctionDtos.AddRange(await _ctx.ProductToAuctions.GetByAuctionAndProductId(auctionId, productId).Select(x => new ProductToAuctionDto(x)).ToListAsync()); + var auction = await _ctx.Auctions.GetByIdAsync(auctionId); + if (auction == null) return null; - return auctionModel; + var auctionDto = new AuctionDto(auction); + auctionDto.ProductToAuctionDtos.AddRange(await _ctx.ProductToAuctions.GetByAuctionAndProductId(auctionId, productId).Select(x => new ProductToAuctionDto(x)).ToListAsync()); + + return auctionDto; } public async Task GetProductToAuctionDtoByIdAsync(int productToAuctionId) { - return new ProductToAuctionDto(await _ctx.ProductToAuctions.GetByIdAsync(productToAuctionId)); + var productToAuction = await _ctx.ProductToAuctions.GetByIdAsync(productToAuctionId); + return productToAuction == null ? null : new ProductToAuctionDto(productToAuction); + } + + public async Task GetAuctionDtoByProductToAuctionIdAsync(int productToAuctionId, bool includeProductToAuctionDto = true) + { + var productTouctionDto = await GetProductToAuctionDtoByIdAsync(productToAuctionId); + if (productTouctionDto == null) return null; + + var auctionDto = await GetAuctionDtoByIdAsync(productTouctionDto.AuctionId); //Ez sosem lehet null! - J. + + if (includeProductToAuctionDto) auctionDto.ProductToAuctionDtos.Add(productTouctionDto); + return auctionDto; } public async Task GetAuctionBidDtoByIdAsync(int auctionBidId) { - return new AuctionBidDto(await _ctx.AuctionBids.GetByIdAsync(auctionBidId)); + var auctionBid = await _ctx.AuctionBids.GetByIdAsync(auctionBidId); + + return auctionBid == null ? null : new AuctionBidDto(auctionBid); } - public async Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId) + public async Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId) { - var auction = await _ctx.Auctions.GetByIdAsync(auctionId); + var auction = await GetAuctionDtoByIdAsync(auctionId); if (auction == null) - return false; + return null; var mapping = new ProductToAuctionMapping { @@ -195,9 +213,10 @@ public class AuctionService : IAuctionService StartingPrice = startingPrice, BidPrice = bidPrice, ProductAmount = 0, - AuctionStatus = Domains.Enums.AuctionStatus.Active, + AuctionStatus = Domains.Enums.AuctionStatus.Active, //Ez miért Active alapból? - J. AuctionId = auctionId }; + try { await _ctx.ProductToAuctions.InsertAsync(mapping); @@ -207,7 +226,7 @@ public class AuctionService : IAuctionService await _logger.InformationAsync(ex.ToString()); } - return true; + return mapping; } #endregion Dtos diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs index 63a0b41..ff4c999 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs @@ -43,5 +43,5 @@ public interface IAuctionService Task GetAuctionBidDtoByIdAsync(int auctionBidId); - Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId); + Task AssignProductToAuctionAsync(int productId, decimal startingPrice, decimal bidPrice, int auctionId); } \ No newline at end of file