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