using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using Util.Datas.Ef.Core; using Util.Samples.Domain.Models; using Util.Samples.Domain.Repositories; namespace Util.Samples.Data.Repositories.Systems { /// /// 角色仓储 /// public class RoleRepository : TreeRepositoryBase, IRoleRepository, IRoleStore { /// /// 初始化角色仓储 /// /// 工作单元 public RoleRepository( ISampleUnitOfWork unitOfWork ) : base( unitOfWork ) { } /// /// 清理 /// public void Dispose() { UnitOfWork.Dispose(); } /// /// 创建角色 /// /// 角色 /// 取消令牌 public async Task CreateAsync( Role role, CancellationToken cancellationToken ) { ValidateRole( role, cancellationToken ); await AddAsync( role, cancellationToken ); return IdentityResult.Success; } /// /// 验证用户 /// private void ValidateRole( Role role, CancellationToken cancellationToken ) { role.CheckNull( nameof( role ) ); cancellationToken.ThrowIfCancellationRequested(); } /// /// 更新角色 /// /// 角色 /// 取消令牌 public async Task UpdateAsync( Role role, CancellationToken cancellationToken ) { ValidateRole( role, cancellationToken ); await UpdateAsync( role ); return IdentityResult.Success; } /// /// 删除角色 /// /// 角色 /// 取消令牌 public async Task DeleteAsync( Role role, CancellationToken cancellationToken ) { ValidateRole( role, cancellationToken ); await RemoveAsync( role, cancellationToken ); return IdentityResult.Success; } /// /// 获取角色编号 /// /// 角色 /// 取消令牌 public Task GetRoleIdAsync( Role role, CancellationToken cancellationToken ) { ValidateRole( role, cancellationToken ); return Task.FromResult( role.Id.SafeString() ); } /// /// 获取角色名称 /// /// 角色 /// 取消令牌 public Task GetRoleNameAsync( Role role, CancellationToken cancellationToken ) { ValidateRole( role, cancellationToken ); return Task.FromResult( role.Name ); } /// /// 设置角色名称 /// /// 角色 /// 角色名 /// 取消令牌 public Task SetRoleNameAsync( Role role, string roleName, CancellationToken cancellationToken ) { ValidateRole( role, cancellationToken ); role.Name = roleName; return Task.CompletedTask; } /// /// 获取标准化角色名称 /// /// 角色 /// 取消令牌 public Task GetNormalizedRoleNameAsync( Role role, CancellationToken cancellationToken ) { ValidateRole( role, cancellationToken ); return Task.FromResult( role.NormalizedName ); } /// /// 设置标准化角色名称 /// /// 角色 /// 标准化角色名称 /// 取消令牌 public Task SetNormalizedRoleNameAsync( Role role, string normalizedName, CancellationToken cancellationToken ) { ValidateRole( role, cancellationToken ); role.NormalizedName = normalizedName; return Task.CompletedTask; } /// /// 通过编号获取角色 /// /// 角色编号 /// 取消令牌 public async Task FindByIdAsync( string roleId, CancellationToken cancellationToken ) { cancellationToken.ThrowIfCancellationRequested(); return await FindAsync( roleId.ToGuid(), cancellationToken ); } /// /// 通过名称获取角色 /// /// 标准化角色名称 /// 取消令牌 public async Task FindByNameAsync( string normalizedRoleName, CancellationToken cancellationToken ) { cancellationToken.ThrowIfCancellationRequested(); return await SingleAsync( r => r.NormalizedName == normalizedRoleName, cancellationToken ); } /// /// 获取最大排序号 /// /// 角色 public async Task GetMaxSortIdAsync( Role role ) { var maxSortId = await Find( t => t.ParentId == role.ParentId ).MaxAsync( t => t.SortId ); return maxSortId.SafeValue() + 1; } } }