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