using CMSMicroservice.Domain.Events; namespace CMSMicroservice.Application.UserCartsCQ.Commands.ClearCart; public class ClearCartCommandHandler : IRequestHandler { private readonly IApplicationDbContext _context; public ClearCartCommandHandler(IApplicationDbContext context) { _context = context; } public async Task Handle(ClearCartCommand request, CancellationToken cancellationToken) { // پیدا کردن تمام آیتم‌های سبد خرید کاربر var cartItems = await _context.UserCarts .Where(c => c.UserId == request.UserId) .ToListAsync(cancellationToken); if (!cartItems.Any()) { return new ClearCartResponseDto { UserId = request.UserId, RemovedItemsCount = 0, Message = "سبد خرید خالی است" }; } var itemsCount = cartItems.Count; // حذف تمام آیتم‌ها _context.UserCarts.RemoveRange(cartItems); // ثبت Event // می‌تونیم یک Event برای هر آیتم یا یک Event کلی بفرستیم foreach (var item in cartItems) { item.AddDomainEvent(new ClearCartEvent(item)); } await _context.SaveChangesAsync(cancellationToken); return new ClearCartResponseDto { UserId = request.UserId, RemovedItemsCount = itemsCount, Message = $"{itemsCount} آیتم از سبد خرید حذف شد" }; } }