Taylohtio/IDP/webapi/webapi.Infrastructure.Common/EventHandlers/RevokeUserAssignmentDomainE...

59 lines
2.7 KiB
C#

using Serilog;
using System.Threading.Tasks;
using Taloyhtio.IDP.SPApi.Model;
using webapi.Application.Services;
using webapi.Domain.Events;
using webapi.Domain.SeedWork;
using webapi.Exceptions;
namespace webapi.Infractructure.Core.EventHandlers
{
public class RevokeUserAssignmentDomainEventHandler : BaseEventHandler<RevokeUserAssignmentDomainEvent>
{
readonly IUserFlatMappingRepository _repository;
readonly IUserAuthRepository _userAuthRepository;
readonly ISPHandlerService _spHandlerService;
readonly ILogger _log;
public RevokeUserAssignmentDomainEventHandler(ILogger log, IUserFlatMappingRepository repository, IUserAuthRepository userAuthRepository,
ISPHandlerService spHandlerService) {
_repository = repository;
_userAuthRepository = userAuthRepository;
_spHandlerService = spHandlerService;
_log = log;
}
public override async Task Handle(RevokeUserAssignmentDomainEvent request)
{
_log.Information("Start Revoke User");
if (request?.Flat == null) throw new WarningException($"The {nameof(request.Flat)} argument is empty");
var mappings = _repository.GetAllUserFlatsMappings(new[] { request.Flat.Id });
foreach (var mapping in mappings)
{
var user = _userAuthRepository.GetUserByTaloyhtioUserId(mapping.UserId);
if ((!mapping.IsAutomatic && string.IsNullOrEmpty(mapping.PMSUserName)) ||
!(user?.IsStronglyAuthenticated ?? false))
continue;
//Revoke when users don't match
if (((!mapping.IsAutomatic && !string.IsNullOrEmpty(mapping.PMSUserName)) && !request.Flat.CompareUsersByPMSUserName(mapping.PMSUserName)) &&
!request.Flat.CompareUsersByPIN(user.PINId, user.FirstName, user.LastName, user.Birthday, out var pmsUserName))
{
//var userName = await _spService.GetUserName(request.UserId);
await _spHandlerService.UserToFlatFoldersAssignment(new UserToFlatFoldersAssignmentRequest()
{
FlatTitle = request.Flat.FlatTitle,
TaloyhtioPMCId = request.Flat.PMCTaloyhtioId,
TaloyhtioCondoId = request.CondoId,
FBACurrentUserName = request.UserName,
Remove = true
});
_log.Information("Delete mapping when user revoking");
await _repository.DeleteEntityAsync(mapping);
continue;
}
}
}
}
}