using System.Threading.Tasks;
using Util.Domains.Services;
using Util.Exceptions;
using Util.Samples.Domain.Models;
using Util.Samples.Domain.Repositories;
namespace Util.Samples.Domain.Services {
///
/// 初始化角色服务
///
public class RoleManager : DomainServiceBase, IRoleManager {
///
/// 初始化角色服务
///
/// 角色仓储
public RoleManager( IRoleRepository repository ) {
Repository = repository;
}
///
/// 角色仓储
///
private IRoleRepository Repository { get; }
///
/// 创建角色
///
/// 角色
public virtual async Task CreateAsync( Role role ) {
await ValidateCreate( role );
role.Init();
var parent = await Repository.FindAsync( role.ParentId );
role.InitPath( parent );
role.SortId = await Repository.GenerateSortIdAsync( role.ParentId );
await Repository.AddAsync( role );
}
///
/// 创建角色验证
///
/// 角色
protected virtual async Task ValidateCreate( Role role ) {
role.CheckNull( nameof( role ) );
if( await Repository.ExistsAsync( t => t.Code == role.Code ) )
ThrowDuplicateCodeException( role.Code );
}
///
/// 抛出编码重复异常
///
protected void ThrowDuplicateCodeException( string code ) {
throw new Warning( $"角色编码 {code} 已存在" );
}
///
/// 修改角色
///
public async Task UpdateAsync( Role role ) {
role.CheckNull( nameof( role ) );
role.InitPinYin();
await Repository.UpdatePathAsync( role );
await Repository.UpdateAsync( role );
}
}
}