using MediatR; using TakeoutSaaS.Application.App.Coupons.FlashSale.Commands; using TakeoutSaaS.Domain.Coupons.Enums; using TakeoutSaaS.Domain.Coupons.Repositories; using TakeoutSaaS.Shared.Abstractions.Constants; using TakeoutSaaS.Shared.Abstractions.Exceptions; using TakeoutSaaS.Shared.Abstractions.Tenancy; namespace TakeoutSaaS.Application.App.Coupons.FlashSale.Handlers; /// /// 删除限时折扣活动命令处理器。 /// public sealed class DeleteFlashSaleCampaignCommandHandler( IPromotionCampaignRepository promotionCampaignRepository, ITenantProvider tenantProvider) : IRequestHandler { /// public async Task Handle(DeleteFlashSaleCampaignCommand request, CancellationToken cancellationToken) { var tenantId = tenantProvider.GetCurrentTenantId(); var campaign = await promotionCampaignRepository.FindByIdAsync( request.CampaignId, tenantId, PromotionType.FlashSale, cancellationToken) ?? throw new BusinessException(ErrorCodes.NotFound, "活动不存在"); var rules = FlashSaleMapping.DeserializeRules(campaign.RulesJson, campaign.Id); if (!rules.StoreIds.Contains(request.OperationStoreId)) { throw new BusinessException(ErrorCodes.NotFound, "活动不存在"); } await promotionCampaignRepository.DeleteAsync(campaign, cancellationToken); await promotionCampaignRepository.SaveChangesAsync(cancellationToken); return Unit.Value; } }