| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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
- {
- /// <summary>
- /// Synchronizes a user's information to user account.
- /// </summary>
- public class UserAccountSynchronizer :
- IEventHandler<EntityCreatedEventData<UserBase>>,
- IEventHandler<EntityDeletedEventData<UserBase>>,
- IEventHandler<EntityUpdatedEventData<UserBase>>,
- ITransientDependency
- {
- private readonly IRepository<UserAccount, long> _userAccountRepository;
- private readonly IUnitOfWorkManager _unitOfWorkManager;
- /// <summary>
- /// Constructor
- /// </summary>
- public UserAccountSynchronizer(
- IRepository<UserAccount, long> userAccountRepository,
- IUnitOfWorkManager unitOfWorkManager)
- {
- _userAccountRepository = userAccountRepository;
- _unitOfWorkManager = unitOfWorkManager;
- }
- /// <summary>
- /// Handles creation event of user
- /// </summary>
- [UnitOfWork]
- public virtual void HandleEvent(EntityCreatedEventData<UserBase> 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
- });
- }
- }
- /// <summary>
- /// Handles deletion event of user
- /// </summary>
- /// <param name="eventData"></param>
- [UnitOfWork]
- public virtual void HandleEvent(EntityDeletedEventData<UserBase> 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);
- }
- }
- }
- /// <summary>
- /// Handles update event of user
- /// </summary>
- /// <param name="eventData"></param>
- [UnitOfWork]
- public virtual void HandleEvent(EntityUpdatedEventData<UserBase> 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);
- }
- }
- }
- }
- }
|