using Netina.Domain.CommandQueries.Commands; using Netina.Domain.Dtos.LargDtos; using Netina.Domain.Entities.Discounts; using Netina.Domain.Enums; using Netina.Repository.Repositories.Base.Contracts; namespace Netina.Repository.Handlers.Discounts; public class CreateDiscountCommandHandler : IRequestHandler { private readonly IRepositoryWrapper _repositoryWrapper; public CreateDiscountCommandHandler(IRepositoryWrapper repositoryWrapper) { _repositoryWrapper = repositoryWrapper; } public async Task Handle(CreateDiscountCommand request, CancellationToken cancellationToken) { switch (request.Type) { case DiscountType.All: var ent = Discount.Create(request.Code,request.Description, request.DiscountPercent, request.DiscountAmount, request.HasCode, request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.IsForInvitation,request.IsForFirstPurchase,request.IsSpecialOffer); _repositoryWrapper.SetRepository().Add(ent); break; case DiscountType.Category: var catDis = CategoryDiscount.Create(request.Code,request.Description, request.DiscountPercent, request.DiscountAmount, request.HasCode, request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.IsForInvitation,request.IsForFirstPurchase,request.IsSpecialOffer, request.CategoryId); _repositoryWrapper.SetRepository().Add(catDis); break; case DiscountType.Product: var productDis = ProductDiscount.Create(request.Code,request.Description, request.DiscountPercent, request.DiscountAmount, request.HasCode, request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.IsForInvitation,request.IsForFirstPurchase, request.IsSpecialOffer,request.ProductId); _repositoryWrapper.SetRepository().Add(productDis); break; default: var def = Discount.Create(request.Code,request.Description, request.DiscountPercent, request.DiscountAmount, request.HasCode, request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.IsForInvitation, request.IsForFirstPurchase,request.IsSpecialOffer); _repositoryWrapper.SetRepository().Add(def); break; } await _repositoryWrapper.SaveChangesAsync(cancellationToken); return request.Adapt(); } }