using System; using System.Globalization; using System.Linq; using System.Threading.Tasks; using webapi.Domain.AggregatesModel.FlatApprovalAggregate; using webapi.Domain.AggregatesModel.UserFlatMappingAggregate; using webapi.Domain.Events; using webapi.Domain.SeedWork; using webapi.Exceptions; using webapi.Infractructure.Core; using webapi.Infractructure.Repositories; namespace webapi.Infractructure.EventHandlers { public class AddUserToFlatMappingDomainEventHandler : BaseEventHandler { readonly IUserFlatMappingRepository _repository; readonly IUserAuthRepository _userAuthRepository; public AddUserToFlatMappingDomainEventHandler(IUserFlatMappingRepository repository, IUserAuthRepository userAuthRepository) { _repository = repository; _userAuthRepository = userAuthRepository; } public override async Task Handle(AddUserToFlatMappingDomainEvent request) { if (request?.Flat == null) throw new WarningException($"The {nameof(request.Flat)} argument is empty"); var user = _userAuthRepository.GetUserByTaloyhtioUserId(request.UserId); if (user == null) throw new WarningException($"The user with Id: {request.UserId} does not exist"); var u2f = _repository.GetUserFlatsMappings(user.TaloyhtioUserId, request.Flat.Id) .FirstOrDefault(); if (user.IsStronglyAuthenticated) // && request.FlatUsers != null) { if (request.Flat.CompareUsersByPIN(user.PINId, user.FirstName, user.LastName, user.Birthday, out var pmsUserName)) { pmsUserName = string.IsNullOrEmpty(request.PMSUserName) ? pmsUserName : request.PMSUserName; if (u2f == null) { u2f = new UserFlatMapping(request.Flat.Id, request.UserId, pmsUserName, Guid.NewGuid()); } else { u2f.PMSUserName = pmsUserName; } u2f.SetAutomatic(); await _repository.SaveChanges(u2f); return; } } if (u2f == null) { await _repository.SaveChanges(new UserFlatMapping(request.Flat.Id, user.TaloyhtioUserId, request.PMSUserName, Guid.NewGuid())); } } //bool CompareUsers(string pmsUserName, DateTime userPINBirthDate, string userFirstName, string userLastName, DateTime? userBirthday) //{ // var result = (userBirthday.HasValue && userPINBirthDate.Date == userBirthday.Value.Date); // if (result) // { // //var userNameParts = userFirstName.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // //foreach (var namePart in userNameParts) // //{ // // if (((pmsUserName == $"{namePart} {userLastName}") || // // (pmsUserName == $"{userLastName} {namePart}"))) // // { // // return true; // // } // //} // var userNameParts = userFirstName.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // var pmsLastName = userNameParts.Last(); // for (var i = 0; i< userNameParts.Count() - 1; i++) // { // var pmsFirstName = userNameParts[i]; // var userDispalyName = $"{userFirstName} {userLastName}"; // if (userDispalyName.Equals($"{pmsFirstName} {pmsLastName}", StringComparison.InvariantCultureIgnoreCase) || // (userDispalyName.Equals($"{pmsLastName} {pmsFirstName}", StringComparison.InvariantCultureIgnoreCase))) // { // return true; // } // } // } // return false; //} } }