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;
}
}
}