public ICommandResult Handle(CreateApartmentCommand command) { // Fail Fast Validation command.Validate(); if (command.Invalid) { return(new GenericCommandResult(false, "Ops, erro ao cadastrar apartamento.", command.Notifications)); } try { // Recupera condomínio var condominium = _condominiumRepository.GetById(command.CondominiumId.Value, command.User); if (condominium == null) { return(new GenericCommandResult(false, "Ops, erro ao cadastrar apartamento.", "Condomínio não encontrado")); } // Cria apartamento var apartment = new Apartment(condominium, command.Number, command.Block, command.User); if (command.Residents.Count > 0) { foreach (var resident in command.Residents) { var res = _residentRepository.GetById(resident, command.User); apartment.AddResident(res); } } // Salva morador _repository.Create(apartment); var apartmentResult = new ApartmentCommandResult { Block = apartment.Block, //Condominium = apartment.Condominium.Name, Number = apartment.Number, User = apartment.User }; return(new GenericCommandResult(true, "Apartamento salvo com sucesso!", apartmentResult)); } catch (Exception ex) { return(new GenericCommandResult(false, "Erro inesperado!", ex.Message)); } }