This commit is contained in:
Adam 2024-11-12 16:23:44 +01:00
commit fb106f2fe6
17 changed files with 209 additions and 75 deletions

View File

@ -0,0 +1,17 @@
using AyCode.Core.Extensions;
using Microsoft.AspNetCore.Mvc;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
using Nop.Plugin.Misc.AuctionPlugin.Services;
using Nop.Web.Areas.Admin.Controllers;
namespace Nop.Plugin.Misc.AuctionPlugin.Controllers;
public class AuctionController(AuctionService _auctionService) : BaseAdminController
{
// GET
public IActionResult Index()
{
//var a = new Auction();
return View();
}
}

View File

@ -1,20 +0,0 @@
using Nop.Core;
namespace Nop.Plugin.Misc.AuctionPlugin.Domains
{
public class AnnouncementEntity : BaseEntity
{
public string Name { get; set; }
public string Body { get; set; }
public bool IsActive { get; set; }
public DateTime Created { get; set; }
}
}

View File

@ -1,19 +0,0 @@
using Nop.Core;
namespace Nop.Plugin.Misc.AuctionPlugin.Domains
{
public class BidEntity : BaseEntity
{
public int CustomerId { get; set; }
public int ProductId { get; set; }
public bool IsWinner { get; set; }
public int Value { get; set; }
public DateTime CreateDate { get; set; }
}
}

View File

@ -0,0 +1,22 @@
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.TimeStampInfo;
using Nop.Core;
namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities
{
public class Announcement : BaseEntity, IEntityInt, ITimeStampCreated
{
public string Name { get; set; }
public string Body { get; set; }
public bool IsActive { get; set; }
public DateTime Created { get; set; }
}
}

View File

@ -0,0 +1,20 @@
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.TimeStampInfo;
using Nop.Core;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums;
namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
public class Auction: BaseEntity, IEntityInt, ITimeStampInfo
{
public string AuctionName { get; set; }
public AuctionType AuctionType{ get; set; }
public DateTime StartDateUtc { get; set; }
public DateTime? EndDateUtc { get; set; }
public bool Closed { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,22 @@
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.TimeStampInfo;
using Nop.Core;
namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities
{
public class AuctionBid : BaseEntity, IEntityInt, ITimeStampInfo
{
public int CustomerId { get; set; }
public int ProductId { get; set; }
public bool IsWinner { get; set; }
public int BidPrice { get; set; }
public DateTime CreateDate { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}
}

View File

@ -0,0 +1,11 @@
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.TimeStampInfo;
using Nop.Core;
namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
public class AuctionItem : BaseEntity, IEntityInt, ITimeStampInfo
{
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,21 @@
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.TimeStampInfo;
using Nop.Core;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Enums;
namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
public class ProductToAuctionMapping : BaseEntity, IEntityInt, ITimeStampInfo
{
public int ProductId { get; set; }
public int AuctionId { get; set; }
public AuctionStatus AuctionStatus { get; set; } = AuctionStatus.None;
public int StartingPrice { get; set; }
public int BidPrice { get; set; }
public int BidAmount { get; set; } = 1;
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
}

View File

@ -0,0 +1,11 @@
namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Enums;
public enum AuctionStatus : byte
{
None = 0,
Active = 5,
FirstWarning = 10,
SecondWarning = 15,
SoldOut = 20,
NotSold = 25
}

View File

@ -0,0 +1,8 @@
namespace Nop.Plugin.Misc.AuctionPlugin.Domains.Enums;
public enum AuctionType : byte
{
//TODO: átbeszélni és kitalálni - J.
Manual = 0,
AutomaticNext = 5,
}

View File

@ -31,7 +31,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Infrastructure
//register services and interfaces //register services and interfaces
services.AddScoped<IAnnouncementService, AnnouncementService>(); services.AddScoped<IAnnouncementService, AnnouncementService>();
services.AddScoped<IBidService, BidService>(); services.AddScoped<IAuctionService, AuctionService>();
services.AddScoped<EventConsumer>(); services.AddScoped<EventConsumer>();
} }

View File

@ -2,6 +2,7 @@
using Nop.Data.Extensions; using Nop.Data.Extensions;
using Nop.Data.Migrations; using Nop.Data.Migrations;
using Nop.Plugin.Misc.AuctionPlugin.Domains; using Nop.Plugin.Misc.AuctionPlugin.Domains;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
namespace Nop.Plugin.Misc.AuctionPlugin.Migrations namespace Nop.Plugin.Misc.AuctionPlugin.Migrations
{ {
@ -13,8 +14,12 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Migrations
/// </summary> /// </summary>
public override void Up() public override void Up()
{ {
Create.TableFor<BidEntity>(); Create.TableFor<Auction>();
Create.TableFor<AnnouncementEntity>(); //Create.TableFor<AuctionItem>();
Create.TableFor<ProductToAuctionMapping>();
Create.TableFor<AuctionBid>();
Create.TableFor<Announcement>();
} }
} }
} }

View File

@ -68,7 +68,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\..\NopCommerce\Libraries\Nop.Core\Nop.Core.csproj" />
<ProjectReference Include="..\..\..\..\NopCommerce\Libraries\Nop.Data\Nop.Data.csproj" />
<ProjectReference Include="..\..\..\..\NopCommerce\Presentation\Nop.Web\Nop.Web.csproj" /> <ProjectReference Include="..\..\..\..\NopCommerce\Presentation\Nop.Web\Nop.Web.csproj" />
<ProjectReference Include="..\..\Libraries\Mango.Nop.Core\Mango.Nop.Core.csproj" />
<ProjectReference Include="..\..\Libraries\Mango.Nop.Services\Mango.Nop.Services.csproj" />
<ClearPluginAssemblies Include="$(MSBuildProjectDirectory)\..\..\..\..\NopCommerce\Build\ClearPluginAssemblies.proj" /> <ClearPluginAssemblies Include="$(MSBuildProjectDirectory)\..\..\..\..\NopCommerce\Build\ClearPluginAssemblies.proj" />
</ItemGroup> </ItemGroup>
@ -96,6 +100,34 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.10" />
</ItemGroup>
<ItemGroup>
<Reference Include="AyCode.Core">
<HintPath>..\..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Core.dll</HintPath>
</Reference>
<Reference Include="AyCode.Core.Server">
<HintPath>..\..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Core.Server.dll</HintPath>
</Reference>
<Reference Include="AyCode.Entities">
<HintPath>..\..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Entities.dll</HintPath>
</Reference>
<Reference Include="AyCode.Entities.Server">
<HintPath>..\..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Entities.Server.dll</HintPath>
</Reference>
<Reference Include="AyCode.Interfaces">
<HintPath>..\..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Interfaces.dll</HintPath>
</Reference>
<Reference Include="AyCode.Interfaces.Server">
<HintPath>..\..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Interfaces.Server.dll</HintPath>
</Reference>
<Reference Include="AyCode.Utils">
<HintPath>..\..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Utils.dll</HintPath>
</Reference>
</ItemGroup>
<!-- This target execute after "Build" target --> <!-- This target execute after "Build" target -->
<Target Name="NopTarget" AfterTargets="Build"> <Target Name="NopTarget" AfterTargets="Build">
<MSBuild Projects="@(ClearPluginAssemblies)" Properties="PluginPath=$(MSBuildProjectDirectory)\$(OutDir)" Targets="NopClear" /> <MSBuild Projects="@(ClearPluginAssemblies)" Properties="PluginPath=$(MSBuildProjectDirectory)\$(OutDir)" Targets="NopClear" />

View File

@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
namespace Nop.Plugin.Misc.AuctionPlugin.Services namespace Nop.Plugin.Misc.AuctionPlugin.Services
{ {
@ -14,13 +15,13 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Services
{ {
#region Field #region Field
private readonly IRepository<AnnouncementEntity> _announcementRepository; private readonly IRepository<Announcement> _announcementRepository;
#endregion #endregion
#region Ctr #region Ctr
public AnnouncementService(IRepository<AnnouncementEntity> announcementRepository) public AnnouncementService(IRepository<Announcement> announcementRepository)
{ {
_announcementRepository = announcementRepository; _announcementRepository = announcementRepository;
@ -31,7 +32,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Services
#region Methods #region Methods
public async Task DeleteAsync(AnnouncementEntity announcement) public async Task DeleteAsync(Announcement announcement)
{ {
await _announcementRepository.DeleteAsync(announcement); await _announcementRepository.DeleteAsync(announcement);
@ -40,7 +41,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Services
public async Task<bool> UpdateAsync(AnnouncementEntity announcement) public async Task<bool> UpdateAsync(Announcement announcement)
{ {
@ -57,7 +58,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Services
} }
public async Task InsertAsync(AnnouncementEntity announcement) public async Task InsertAsync(Announcement announcement)
{ {
@ -66,7 +67,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Services
} }
public async Task<IPagedList<AnnouncementEntity>> GetAnnouncementsAsync(int pageIndex = 0, int pageSize = int.MaxValue) public async Task<IPagedList<Announcement>> GetAnnouncementsAsync(int pageIndex = 0, int pageSize = int.MaxValue)
{ {
@ -76,13 +77,13 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Services
var query2 = query.OrderBy(b => b.IsActive).ToList(); var query2 = query.OrderBy(b => b.IsActive).ToList();
var liveAnnouncementDomain = new PagedList<AnnouncementEntity>(query2, pageIndex, pageSize); var liveAnnouncementDomain = new PagedList<Announcement>(query2, pageIndex, pageSize);
return liveAnnouncementDomain; return liveAnnouncementDomain;
} }
public async Task<AnnouncementEntity> GetAnnouncementDesignFirstAsync() public async Task<Announcement> GetAnnouncementDesignFirstAsync()
{ {
var result = await _announcementRepository.GetAllAsync(query => var result = await _announcementRepository.GetAllAsync(query =>
@ -105,7 +106,7 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Services
} }
public async Task<AnnouncementEntity> GetAnnouncementByIdAsync(int Id) public async Task<Announcement> GetAnnouncementByIdAsync(int Id)
{ {

View File

@ -2,13 +2,14 @@
using Nop.Core.Caching; using Nop.Core.Caching;
using Nop.Data; using Nop.Data;
using Nop.Plugin.Misc.AuctionPlugin.Domains; using Nop.Plugin.Misc.AuctionPlugin.Domains;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
namespace Nop.Plugin.Misc.AuctionPlugin.Services; namespace Nop.Plugin.Misc.AuctionPlugin.Services;
/// <summary> /// <summary>
/// Store pickup point service /// Store pickup point service
/// </summary> /// </summary>
public class BidService : IBidService public class AuctionService : IAuctionService
{ {
#region Constants #region Constants
@ -25,7 +26,7 @@ public class BidService : IBidService
#region Fields #region Fields
protected readonly IRepository<BidEntity> _customerBidRepository; protected readonly IRepository<AuctionBid> _customerBidRepository;
protected readonly IShortTermCacheManager _shortTermCacheManager; protected readonly IShortTermCacheManager _shortTermCacheManager;
protected readonly IStaticCacheManager _staticCacheManager; protected readonly IStaticCacheManager _staticCacheManager;
@ -39,7 +40,7 @@ public class BidService : IBidService
/// <param name="customerBidRepository">Store pickup point repository</param> /// <param name="customerBidRepository">Store pickup point repository</param>
/// <param name="shortTermCacheManager">Short term cache manager</param> /// <param name="shortTermCacheManager">Short term cache manager</param>
/// <param name="staticCacheManager">Cache manager</param> /// <param name="staticCacheManager">Cache manager</param>
public BidService(IRepository<BidEntity> customerBidRepository, public AuctionService(IRepository<AuctionBid> customerBidRepository,
IShortTermCacheManager shortTermCacheManager, IShortTermCacheManager shortTermCacheManager,
IStaticCacheManager staticCacheManager) IStaticCacheManager staticCacheManager)
{ {
@ -62,9 +63,9 @@ public class BidService : IBidService
/// A task that represents the asynchronous operation /// A task that represents the asynchronous operation
/// The task result contains the bids /// The task result contains the bids
/// </returns> /// </returns>
public virtual async Task<IPagedList<BidEntity>> GetAllBidsAsync(int customerId = 0, int pageIndex = 0, int pageSize = int.MaxValue) public virtual async Task<IPagedList<AuctionBid>> GetAllBidsAsync(int customerId = 0, int pageIndex = 0, int pageSize = int.MaxValue)
{ {
var rez = new List<BidEntity>(); var rez = new List<AuctionBid>();
//var rez = await _shortTermCacheManager.GetAsync(async () => await _customerBidRepository.GetAllAsync(query => //var rez = await _shortTermCacheManager.GetAsync(async () => await _customerBidRepository.GetAllAsync(query =>
//{ //{
// if (customerId > 0) // if (customerId > 0)
@ -74,23 +75,23 @@ public class BidService : IBidService
// return query; // return query;
//}), _pickupPointAllKey, customerId); //}), _pickupPointAllKey, customerId);
return new PagedList<BidEntity>(rez, pageIndex, pageSize); return new PagedList<AuctionBid>(rez, pageIndex, pageSize);
} }
public virtual async Task<BidEntity> GetBidByIdAsync(int bidId) public virtual async Task<AuctionBid> GetBidByIdAsync(int bidId)
{ {
return await _customerBidRepository.GetByIdAsync(bidId); return await _customerBidRepository.GetByIdAsync(bidId);
} }
public virtual async Task InsertBidAsync(BidEntity bid) public virtual async Task InsertBidAsync(AuctionBid auctionBid)
{ {
await _customerBidRepository.InsertAsync(bid, false); await _customerBidRepository.InsertAsync(auctionBid, false);
await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY);
} }
public virtual async Task UpdateBidAsync(BidEntity bid) public virtual async Task UpdateBidAsync(AuctionBid auctionBid)
{ {
await _customerBidRepository.UpdateAsync(bid, false); await _customerBidRepository.UpdateAsync(auctionBid, false);
await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY);
} }
@ -99,7 +100,7 @@ public class BidService : IBidService
/// </summary> /// </summary>
/// <param name="pickupPoint">Pickup point</param> /// <param name="pickupPoint">Pickup point</param>
/// <returns>A task that represents the asynchronous operation</returns> /// <returns>A task that represents the asynchronous operation</returns>
public virtual async Task DeleteBidAsync(BidEntity pickupPoint) public virtual async Task DeleteBidAsync(AuctionBid pickupPoint)
{ {
await _customerBidRepository.DeleteAsync(pickupPoint, false); await _customerBidRepository.DeleteAsync(pickupPoint, false);
await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY); await _staticCacheManager.RemoveByPrefixAsync(AUCTION_PATTERN_KEY);

View File

@ -5,6 +5,7 @@ using Nop.Core;
using Nop.Plugin.Misc.AuctionPlugin.Domains; using Nop.Plugin.Misc.AuctionPlugin.Domains;
using System.Collections.Generic; using System.Collections.Generic;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
namespace Nop.Plugin.Misc.AuctionPlugin.Services namespace Nop.Plugin.Misc.AuctionPlugin.Services
@ -13,17 +14,17 @@ namespace Nop.Plugin.Misc.AuctionPlugin.Services
{ {
public Task DeleteAsync(AnnouncementEntity announcement); public Task DeleteAsync(Announcement announcement);
public Task InsertAsync(AnnouncementEntity announcement); public Task InsertAsync(Announcement announcement);
public Task<bool> UpdateAsync(AnnouncementEntity announcement); public Task<bool> UpdateAsync(Announcement announcement);
public Task<IPagedList<AnnouncementEntity>> GetAnnouncementsAsync(int pageIndex = 0, int pageSize = int.MaxValue); public Task<IPagedList<Announcement>> GetAnnouncementsAsync(int pageIndex = 0, int pageSize = int.MaxValue);
public Task<AnnouncementEntity> GetAnnouncementDesignFirstAsync(); public Task<Announcement> GetAnnouncementDesignFirstAsync();
public Task<AnnouncementEntity> GetAnnouncementByIdAsync(int Id); public Task<Announcement> GetAnnouncementByIdAsync(int Id);
} }

View File

@ -1,12 +1,13 @@
using Nop.Core; using Nop.Core;
using Nop.Plugin.Misc.AuctionPlugin.Domains; using Nop.Plugin.Misc.AuctionPlugin.Domains;
using Nop.Plugin.Misc.AuctionPlugin.Domains.Entities;
namespace Nop.Plugin.Misc.AuctionPlugin.Services; namespace Nop.Plugin.Misc.AuctionPlugin.Services;
/// <summary> /// <summary>
/// Store pickup point service interface /// Store pickup point service interface
/// </summary> /// </summary>
public interface IBidService public interface IAuctionService
{ {
/// <summary> /// <summary>
/// Gets all bids /// Gets all bids
@ -18,17 +19,17 @@ public interface IBidService
/// A task that represents the asynchronous operation /// A task that represents the asynchronous operation
/// The task result contains the bids /// The task result contains the bids
/// </returns> /// </returns>
Task<IPagedList<BidEntity>> GetAllBidsAsync(int customerId = 0, int pageIndex = 0, int pageSize = int.MaxValue); Task<IPagedList<AuctionBid>> GetAllBidsAsync(int customerId = 0, int pageIndex = 0, int pageSize = int.MaxValue);
Task<BidEntity> GetBidByIdAsync(int bidId); Task<AuctionBid> GetBidByIdAsync(int bidId);
Task InsertBidAsync(BidEntity bidEntity); Task InsertBidAsync(AuctionBid auctionBid);
Task UpdateBidAsync(BidEntity bid); Task UpdateBidAsync(AuctionBid auctionBid);
Task DeleteBidAsync(BidEntity pickupPoint); Task DeleteBidAsync(AuctionBid pickupPoint);
} }