using AutoMapper; using Easy.DDD.Domain.Repositories; using Easy.Guids; using Easy.Result; using Identity.Api.Clean.Contracts.Inputs; using Identity.Api.Clean.Contracts.Models; using Identity.Api.Clean.Domain.Entites; using Identity.Api.Clean.Shared.IServices; namespace Identity.Api.Clean.Application; public class OrganizationUnitAppService { protected IRepository OrganizationUnitRepository { get; } protected IRepository IdentityUserOrganizationUnitRepository { get; } protected IOrganizationUnitManager OrganizationUnitManager { get; } protected IMapper Mapper { get; } protected IGuidGenerator GuidGenerator { get; } protected IHttpContextAccessor HttpContextAccessor { get; } public virtual async Task> CreateAsync(OrganizationUnitCreateInput input) { var orgEntity = new OrganizationUnit(GuidGenerator.Create(), input.DisplayName, input.ParentId, input.TenantId); await OrganizationUnitManager.CreateAsync(orgEntity); await OrganizationUnitRepository.AddAsync(orgEntity, true); // 在token中获取sub var sub = HttpContextAccessor.HttpContext.User.FindFirst("sub"); if (sub != null && Guid.TryParse(sub.Value, out Guid userId)) { await IdentityUserOrganizationUnitRepository .AddAsync(new IdentityUserOrganizationUnit(GuidGenerator.Create(), userId, orgEntity.Id, input.TenantId), true); } var value = Mapper.Map(orgEntity); return ApiResult.ValueSuccess(value); } public virtual async Task> UpdateAsync(Guid id, OrganizationUnitUpdateInput organizationUnit) { var orgEntity = Mapper.Map(organizationUnit); await OrganizationUnitManager.ValidateOrganizationUnitAsync(orgEntity); await OrganizationUnitRepository.UpdateAsync(orgEntity, true); var value = Mapper.Map(orgEntity); return ApiResult.ValueSuccess(value); } public virtual async Task DeleteAsync(Guid id) { await OrganizationUnitManager.DeleteAsync(id); return ApiResult.Success(); } public virtual async Task> GetDescriptionAsync(Guid id) { var org = await OrganizationUnitRepository.FirstOrDefaultAsync(o => o.Id == id); var units = await OrganizationUnitRepository.ToListAsync(o => o.ParentId == id); var value = Mapper.Map(org); value.OrganizationUnitDescriptions = Mapper.Map>(units); return ApiResult.ValueSuccess(value); } public virtual async Task AddRoleAsync(OrganizationUnitRoleCreateInput input) { await OrganizationUnitManager.AddRoleToOrganizationUnitAsync(input.RoleId, input.Id); return ApiResult.Success(); } public virtual async Task RemoveRoleAsync(Guid id, OrganizationUnitRoleDeleteInput input) { await OrganizationUnitManager.RemoveRoleFromOrganizationUnitAsync(input.RoleId, id); return ApiResult.Success(); } }