public void Editar(long id, string cnpj, string nome, string nomeResponsavel, string telefoneResponsavel, string emailResponsavel)
        {
            try
            {
                ValidarNomeJaExistente(id, nome);
                EmpresaModel empresa = Find(id);
                if (empresa.IsNull())
                {
                    throw new EmpresaInvalidoException($"Empresa {id} não encontrado.");
                }

                empresa.Editar(cnpj, nome, nomeResponsavel, telefoneResponsavel, emailResponsavel);

                _repo.Save(empresa);
            }
            catch (DomainException dEx)
            {
                Logger.Log.Warn(dEx);
                throw;
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex);
                throw;
            }
        }
        public void Cadastrar(string cnpj, string nome, string nomeResponsavel, string telefoneResponsavel, string emailResponsavel)
        {
            try
            {
                ValidarNomeJaExistente(null, nome);
                EmpresaModel Empresa = new EmpresaModel(cnpj,
                                                        nome,
                                                        nomeResponsavel,
                                                        telefoneResponsavel,
                                                        emailResponsavel);

                _repo.Save(Empresa);

                SetupInicial(Empresa.Id);
            }
            catch (DomainException dEx)
            {
                Logger.Log.Warn(dEx);
                throw;
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex);
                throw;
            }
        }
        private void ValidarNomeJaExistente(long?id, string nome)
        {
            if (!nome.LengthValid(false, 2, 50))
            {
                throw new EmpresaInvalidoException("O Nome deve ter entre 2 e 30 caracteres.");
            }

            EmpresaModel Empresa = _report.FindNome(nome);

            if (Empresa.IsNotNull() && Empresa.Id != id)
            {
                throw new EmpresaInvalidoException("Existe outra empresa utilizando este nome.");
            }
        }
        public void Recover(long id)
        {
            try
            {
                EmpresaModel empresa = _repo.Find(id);
                if (empresa.IsNull())
                {
                    throw new EmpresaInvalidoException($"Empresa {id} não encontrado.");
                }

                empresa.Recuperar();
                _repo.Save(empresa);
            }
            catch (DomainException dEx)
            {
                Logger.Log.Warn(dEx);
                throw;
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex);
                throw;
            }
        }
        public void PopularBancoTeste(long idEmpresa)
        {
            EmpresaModel empresa = _repo.Find(idEmpresa);

            _repo.PopularBancoTeste(empresa);
        }