using MediatR; using TakeoutSaaS.Application.App.TenantPackages.Commands; using TakeoutSaaS.Application.App.TenantPackages.Contracts; using TakeoutSaaS.Domain.Tenants.Repositories; namespace TakeoutSaaS.Application.App.TenantPackages.Handlers; /// /// 更新租户套餐命令处理器。 /// public sealed class UpdateTenantPackageCommandHandler(ITenantPackageRepository tenantPackageRepository) : IRequestHandler { /// public async Task Handle( UpdateTenantPackageCommand request, CancellationToken cancellationToken) { // 1. 查询套餐(带跟踪用于更新) var package = await tenantPackageRepository.GetByIdForUpdateAsync(request.TenantPackageId, cancellationToken); // 2. 如果不存在,返回 null if (package is null) { return null; } // 3. 更新套餐属性 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; package.IsPublicVisible = request.IsPublicVisible; package.IsAllowNewTenantPurchase = request.IsAllowNewTenantPurchase; package.PublishStatus = request.PublishStatus; package.IsRecommended = request.IsRecommended; package.Tags = request.Tags; package.SortOrder = request.SortOrder; // 4. 保存变更 await tenantPackageRepository.SaveChangesAsync(cancellationToken); // 5. 返回 DTO return new TenantPackageListDto { Id = package.Id, Name = package.Name, Description = package.Description, PackageType = package.PackageType, MonthlyPrice = package.MonthlyPrice, YearlyPrice = package.YearlyPrice, MaxStoreCount = package.MaxStoreCount, MaxAccountCount = package.MaxAccountCount, MaxStorageGb = package.MaxStorageGb, MaxSmsCredits = package.MaxSmsCredits, MaxDeliveryOrders = package.MaxDeliveryOrders, FeaturePoliciesJson = package.FeaturePoliciesJson, IsActive = package.IsActive, IsPublicVisible = package.IsPublicVisible, IsAllowNewTenantPurchase = package.IsAllowNewTenantPurchase, PublishStatus = package.PublishStatus, IsRecommended = package.IsRecommended, Tags = package.Tags, SortOrder = package.SortOrder }; } }