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