public Task <bool> Handle(RegisterApartment request, CancellationToken cancellationToken) { var found = _apartmentRepository.Any(c => c.Number == request.Number && c.Roof == request.Roof && c.Block == request.Block && c.CondominiumId == request.CondominiumId); if (found) { Mediator.RaiseNotification(new DomainNotification(nameof(Apartment), "Apartamento já existe neste condomínio", NotificationType.Error)); return(Task.FromResult(false)); } var residents = new List <Resident>(); var apartmentId = Guid.NewGuid(); foreach (var residentCommand in request.Residents) { var contact = new ContactInfo(residentCommand.PhoneNumber, residentCommand.Email); var document = new DocumentInfo(residentCommand.DocumentNumber); var newResident = Resident.ResidentFactory.NewResident(User.GetUserId(), residentCommand.Name, residentCommand.Birthday, contact, document, apartmentId); if (!newResident.IsValid()) { Mediator.RaiseNotification(new DomainNotification(nameof(Apartment), $"Informação do residente {newResident.Name} inválida", NotificationType.Error)); return(Task.FromResult(false)); } residents.Add(newResident); } var apartment = Apartment.ApartmentFactory.NewApartment(apartmentId, User.GetUserId(), request.Number, request.Block, request.Roof, request.CondominiumId, residents); if (!IsAValidApartment(apartment)) { return(Task.FromResult(false)); } _apartmentRepository.Insert(apartment); if (Commit()) { Mediator.RaiseNotification(new DomainNotification(nameof(Apartment), "Operação realizada com sucesso", NotificationType.Info)); return(Task.FromResult(true)); } Mediator.RaiseNotification(new DomainNotification(nameof(Apartment), "Erro ao realizar a operação", NotificationType.Error)); return(Task.FromResult(false)); }