50 lines
1.9 KiB
C#
50 lines
1.9 KiB
C#
namespace Netina.Core.EntityServices.OrderBagHandlers;
|
|
|
|
public class CheckOrderBagCommandHandler(IRepositoryWrapper repositoryWrapper, IMediator mediator)
|
|
: IRequestHandler<CheckOrderBagCommand, List<CheckOrderBagResponseItem>>
|
|
{
|
|
public async Task<List<CheckOrderBagResponseItem>> Handle(CheckOrderBagCommand request, CancellationToken cancellationToken)
|
|
{
|
|
List<CheckOrderBagResponseItem> response = new List<CheckOrderBagResponseItem>();
|
|
|
|
foreach (var item in request.OrderBag)
|
|
{
|
|
var product = await repositoryWrapper.SetRepository<Product>()
|
|
.TableNoTracking
|
|
.Where(p => p.Id == item.ProductId)
|
|
.Select(ProductMapper.ProjectToSDto)
|
|
.FirstOrDefaultAsync(cancellationToken);
|
|
|
|
if (product == null)
|
|
{
|
|
response.Add(new CheckOrderBagResponseItem
|
|
{
|
|
Count = item.Count,
|
|
IsEnable = false,
|
|
IsRemoved = true,
|
|
ProductId = item.ProductId,
|
|
Stock = 0
|
|
});
|
|
}
|
|
else
|
|
{
|
|
await mediator.Send(new CalculateProductDiscountCommand(product), cancellationToken);
|
|
var res = new CheckOrderBagResponseItem
|
|
{
|
|
ProductId = item.ProductId,
|
|
CostWithDiscount = product.CostWithDiscount,
|
|
Cost = product.Cost,
|
|
DiscountPercent = product.DiscountPercent,
|
|
ProductName = product.PersianName,
|
|
Stock = product.Stock,
|
|
Count = item.Count,
|
|
IsEnable = product.IsEnable,
|
|
IsRemoved = false
|
|
};
|
|
response.Add(res);
|
|
}
|
|
}
|
|
|
|
return response;
|
|
}
|
|
} |