diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbContext.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbContext.cs index d38eb52..2e50666 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbContext.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbContext.cs @@ -1,4 +1,5 @@ using Mango.Nop.Core.Repositories; +using Nop.Core; using Nop.Data; using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; using System; diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbTable.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbTable.cs index 3c9948b..7400e82 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbTable.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/DataLayer/AuctionDbTable.cs @@ -13,4 +13,10 @@ public class AuctionDbTable: MgDbTableBase public AuctionDbTable(IEventPublisher eventPublisher, INopDataProvider dataProvider, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, AppSettings appSettings) : base(eventPublisher, dataProvider, shortTermCacheManager, staticCacheManager, appSettings) { } + + public Task> GetAllAuctionsAsync() + { + return GetAllAsync(auctions => auctions.OrderByDescending(x => x.StartDateUtc), _ => default); + } + } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/Announcement.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/Announcement.cs index 3129a7d..ffbf851 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/Announcement.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/Announcement.cs @@ -6,7 +6,7 @@ using Nop.Core; namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities { - public class Announcement : EntityBase, ITimeStampCreated + public class Announcement : MgEntityBase, ITimeStampCreated { public string Name { get; set; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/Auction.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/Auction.cs index 2e19d53..48cc913 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/Auction.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/Auction.cs @@ -1,4 +1,5 @@ -using AyCode.Interfaces.Entities; +using System.ComponentModel.DataAnnotations.Schema; +using AyCode.Interfaces.Entities; using AyCode.Interfaces.TimeStampInfo; using Mango.Nop.Core.Entities; using Mango.Nop.Core.Interfaces; @@ -7,7 +8,7 @@ using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; -public class Auction: EntityBase, ITimeStampInfo//, ISoftRemoveEntityInt +public partial class Auction: MgEntityBase, ITimeStampInfo//, ISoftRemoveEntityInt { public string AuctionName { get; set; } public AuctionType AuctionType{ get; set; } @@ -17,6 +18,9 @@ public class Auction: EntityBase, ITimeStampInfo//, ISoftRemoveEntityInt public bool Closed { get; set; } + [NotMapped] + public List ProductToAuctionMappings { get; } = []; + public DateTime Created { get; set; } public DateTime Modified { get; set; } } \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/AuctionBid.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/AuctionBid.cs index 04b26db..ff49ec3 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/AuctionBid.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/AuctionBid.cs @@ -5,7 +5,7 @@ using Nop.Core; namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities { - public class AuctionBid : EntityBase, ITimeStampInfo//, ISoftRemoveEntityInt + public partial class AuctionBid : MgEntityBase, ITimeStampInfo//, ISoftRemoveEntityInt { public int ProductAuctionMappingId { get; set; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/AuctionItem.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/AuctionItem.cs index 1a02b05..24f233c 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/AuctionItem.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/AuctionItem.cs @@ -5,7 +5,7 @@ using Nop.Core; namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; -public class AuctionItem : EntityBase, ITimeStampInfo//, ISoftRemoveEntityInt +public partial class AuctionItem : MgEntityBase, ITimeStampInfo//, ISoftRemoveEntityInt { public DateTime Created { get; set; } public DateTime Modified { get; set; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/ProductToAuctionMapping.cs b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/ProductToAuctionMapping.cs index 4ee5990..1d4303c 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/ProductToAuctionMapping.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Domains/Entities/ProductToAuctionMapping.cs @@ -6,7 +6,7 @@ using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums; namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; -public class ProductToAuctionMapping : EntityBase, ITimeStampInfo//, ISoftRemoveEntityInt +public partial class ProductToAuctionMapping : MgEntityBase, ITimeStampInfo//, ISoftRemoveEntityInt { public int ProductId { get; set; } public int AuctionId { get; set; } diff --git a/Nop.Plugin.Misc.AuctionPlugin/Mapping/Builders/ProductToAuctionBuilder.cs b/Nop.Plugin.Misc.AuctionPlugin/Mapping/Builders/ProductToAuctionBuilder.cs new file mode 100644 index 0000000..52e950d --- /dev/null +++ b/Nop.Plugin.Misc.AuctionPlugin/Mapping/Builders/ProductToAuctionBuilder.cs @@ -0,0 +1,38 @@ +using FluentMigrator; +using FluentMigrator.Builders.Create.Table; +using Nop.Data.Mapping.Builders; +using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities; +using Nop.Data.Extensions; +using System.Data; +using Nop.Core.Domain.Catalog; +using Nop.Core.Domain.Common; +using Nop.Data.Mapping; + +namespace Nop.Plugin.Misc.AuctionPlugin.Mapping.Builders; + +public class ProductToAuctionMappingBuilder : NopEntityBuilder +{ + #region Methods + + /// + /// Apply entity configuration + /// + /// Create table expression builder + public override void MapEntity(CreateTableExpressionBuilder table) + { + table.WithColumn(nameof(ProductToAuctionMapping.Id)).AsInt32().PrimaryKey() + + .WithColumn(nameof(ProductToAuctionMapping.AuctionId)).AsInt32().ForeignKey(onDelete: Rule.None) //Rule.Cascade?? + .WithColumn(nameof(ProductToAuctionMapping.ProductId)).AsInt32().ForeignKey(onDelete: Rule.None) //Rule.Cascade?? + + .WithColumn(nameof(ProductToAuctionMapping.AuctionStatus)).AsByte().NotNullable() //enum??? - J. + + .WithColumn(nameof(ProductToAuctionMapping.StartingPrice)).AsInt32().NotNullable() + .WithColumn(nameof(ProductToAuctionMapping.BidPrice)).AsInt32().NotNullable() + .WithColumn(nameof(ProductToAuctionMapping.BidAmount)).AsInt32().NotNullable().WithDefaultValue(1) + .WithColumn(nameof(ProductToAuctionMapping.Created)).AsDateTime().NotNullable() + .WithColumn(nameof(ProductToAuctionMapping.Modified)).AsDateTime().NotNullable().WithDefault(SystemMethods.CurrentUTCDateTime); + } + + #endregion +} \ No newline at end of file diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs index 8e0d238..90f892d 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/AuctionService.cs @@ -1,5 +1,6 @@ using Nop.Core; using Nop.Core.Caching; +using Nop.Core.Domain.Customers; using Nop.Data; using Nop.Plugin.Misc.AuctionPlugin.Domains; using Nop.Plugin.Misc.AuctionPlugin.Domains.DataLayer; @@ -32,7 +33,7 @@ public class AuctionService : IAuctionService //protected readonly IRepository _auctionRepository; protected readonly IShortTermCacheManager _shortTermCacheManager; protected readonly IStaticCacheManager _staticCacheManager; - + protected readonly IWorkContext _workContext; #endregion #region Ctor @@ -43,7 +44,7 @@ public class AuctionService : IAuctionService /// Store pickup point repository /// Short term cache manager /// Cache manager - public AuctionService(AuctionDbContext ctx, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager) + public AuctionService(AuctionDbContext ctx, IShortTermCacheManager shortTermCacheManager, IStaticCacheManager staticCacheManager, IWorkContext workContext) { _ctx = ctx; //_customerBidRepository = customerBidRepository; @@ -51,12 +52,23 @@ public class AuctionService : IAuctionService _shortTermCacheManager = shortTermCacheManager; _staticCacheManager = staticCacheManager; + _workContext = workContext; } #endregion #region Methods + private async Task ValidateAuctionBid(AuctionBid auctionBid) + { + auctionBid.CustomerId = (await _workContext.GetCurrentCustomerAsync()).Id; //elvileg megnézi cache-ben, csak utána DB-zik! - J. + auctionBid.Modified = DateTime.UtcNow; + + //etc... + + return true; + } + /// /// Gets all bids /// @@ -89,14 +101,20 @@ public class AuctionService : IAuctionService public virtual async Task InsertBidAsync(AuctionBid auctionBid) { - await _ctx.AuctionBids.InsertAsync(auctionBid, false); - await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); + if (await ValidateAuctionBid(auctionBid)) + { + await _ctx.AuctionBids.InsertAsync(auctionBid, false); + await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); + } } public virtual async Task UpdateBidAsync(AuctionBid auctionBid) { - await _ctx.AuctionBids.UpdateAsync(auctionBid, false); - await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); + if (await ValidateAuctionBid(auctionBid)) + { + await _ctx.AuctionBids.UpdateAsync(auctionBid, false); + await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); + } } /// @@ -117,9 +135,15 @@ public class AuctionService : IAuctionService await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); } - public async Task> GetAllAuctionsAsync() + public async Task> GetAllAuctionsAsync() { - return (await _ctx.Auctions.GetAllAsync(auctions => auctions.OrderByDescending(x => x.StartDateUtc), _ => default)).ToList(); + return await _ctx.Auctions.GetAllAuctionsAsync(); + } + + public async Task> GetProductToAuctionsByAuctionIdAsync(int auctionId, bool onlyActiveItems = false) + { + //return (await _ctx.Auctions.GetAllAsync(auctions => auctions.OrderByDescending(x => x.StartDateUtc), _ => default)).ToList(); + return []; } #endregion diff --git a/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs b/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs index 623c967..2f5508f 100644 --- a/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs +++ b/Nop.Plugin.Misc.AuctionPlugin/Services/IAuctionService.cs @@ -31,5 +31,5 @@ public interface IAuctionService Task InsertAuctionAsync(Auction auction); - Task> GetAllAuctionsAsync(); + Task> GetAllAuctionsAsync(); } \ No newline at end of file