using MediatR; using TakeoutSaaS.Application.App.Tenants.Commands; using TakeoutSaaS.Application.App.Tenants.Dto; using TakeoutSaaS.Domain.Tenants.Repositories; using TakeoutSaaS.Shared.Abstractions.Constants; using TakeoutSaaS.Shared.Abstractions.Exceptions; namespace TakeoutSaaS.Application.App.Tenants.Handlers; /// /// 更新租户套餐处理器。 /// public sealed class UpdateTenantPackageCommandHandler(ITenantPackageRepository packageRepository) : IRequestHandler { /// public async Task Handle(UpdateTenantPackageCommand request, CancellationToken cancellationToken) { if (string.IsNullOrWhiteSpace(request.Name)) { throw new BusinessException(ErrorCodes.BadRequest, "套餐名称不能为空"); } var package = await packageRepository.FindByIdAsync(request.TenantPackageId, cancellationToken); if (package == null) { return null; } package.Name = request.Name.Trim(); package.Description = request.Description; package.PackageType = request.PackageType; package.MonthlyPrice = request.MonthlyPrice; package.YearlyPrice = request.YearlyPrice; package.MaxStoreCount = request.MaxStoreCount; package.MaxAccountCount = request.MaxAccountCount; package.MaxStorageGb = request.MaxStorageGb; package.MaxSmsCredits = request.MaxSmsCredits; package.MaxDeliveryOrders = request.MaxDeliveryOrders; package.FeaturePoliciesJson = request.FeaturePoliciesJson; package.IsActive = request.IsActive; await packageRepository.UpdateAsync(package, cancellationToken); await packageRepository.SaveChangesAsync(cancellationToken); return package.ToDto(); } }