using Abp.Dependency; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.Events.Bus.Entities; using Abp.Events.Bus.Handlers; namespace IwbZero.Authorization.Base.Users { /// /// Synchronizes a user's information to user account. /// public class UserAccountSynchronizer : IEventHandler>, IEventHandler>, IEventHandler>, ITransientDependency { private readonly IRepository _userAccountRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; /// /// Constructor /// public UserAccountSynchronizer( IRepository userAccountRepository, IUnitOfWorkManager unitOfWorkManager) { _userAccountRepository = userAccountRepository; _unitOfWorkManager = unitOfWorkManager; } /// /// Handles creation event of user /// [UnitOfWork] public virtual void HandleEvent(EntityCreatedEventData eventData) { using (_unitOfWorkManager.Current.SetTenantId(null)) { _userAccountRepository.Insert(new UserAccount { TenantId = eventData.Entity.TenantId, UserName = eventData.Entity.UserName, UserId = eventData.Entity.Id, EmailAddress = eventData.Entity.EmailAddress }); } } /// /// Handles deletion event of user /// /// [UnitOfWork] public virtual void HandleEvent(EntityDeletedEventData eventData) { using (_unitOfWorkManager.Current.SetTenantId(null)) { var userAccount = _userAccountRepository.FirstOrDefault( ua => ua.TenantId == eventData.Entity.TenantId && ua.UserId == eventData.Entity.Id); if (userAccount != null) { _userAccountRepository.Delete(userAccount); } } } /// /// Handles update event of user /// /// [UnitOfWork] public virtual void HandleEvent(EntityUpdatedEventData eventData) { using (_unitOfWorkManager.Current.SetTenantId(null)) { var userAccount = _userAccountRepository.FirstOrDefault(ua => ua.TenantId == eventData.Entity.TenantId && ua.UserId == eventData.Entity.Id); if (userAccount != null) { userAccount.UserName = eventData.Entity.UserName; userAccount.EmailAddress = eventData.Entity.EmailAddress; _userAccountRepository.Update(userAccount); } } } } }