using MediatR; using Microsoft.Extensions.Logging; using TakeoutSaaS.Application.App.Stores.Commands; using TakeoutSaaS.Application.App.Stores.Dto; using TakeoutSaaS.Domain.Merchants.Repositories; using TakeoutSaaS.Domain.Stores.Repositories; using TakeoutSaaS.Shared.Abstractions.Constants; using TakeoutSaaS.Shared.Abstractions.Exceptions; namespace TakeoutSaaS.Application.App.Stores.Handlers; /// /// 更新门店员工处理器。 /// public sealed class UpdateStoreStaffCommandHandler( IMerchantRepository merchantRepository, IStoreRepository storeRepository, ILogger logger) : IRequestHandler { /// public async Task Handle(UpdateStoreStaffCommand request, CancellationToken cancellationToken) { // 1. 校验门店 var store = await storeRepository.FindByIdAsync(request.StoreId, tenantId: null, cancellationToken); if (store is null) { return null; } var tenantId = store.TenantId; // 2. (空行后) 读取员工 var staff = await merchantRepository.FindStaffByIdAsync(request.StaffId, tenantId, cancellationToken); if (staff is null || staff.StoreId != request.StoreId) { return null; } // 3. (空行后) 更新字段 staff.Name = request.Name.Trim(); staff.Phone = request.Phone.Trim(); staff.Email = request.Email?.Trim(); staff.RoleType = request.RoleType; staff.Status = request.Status; // 4. (空行后) 持久化 await merchantRepository.SaveChangesAsync(cancellationToken); logger.LogInformation("更新门店员工 {StaffId} 门店 {StoreId}", staff.Id, staff.StoreId); // 5. (空行后) 返回 DTO return StoreMapping.ToDto(staff); } }