예제 #1
0
        public async Task <Contato> EditarAsync(Contato contato)
        {
            var idade = CalcularIdade(contato.DataNascimento);

            if (!ValidarIdadeContato(idade))
            {
                throw new NegocioException($"Contato {contato.Nome} não tem permissão para ser editado, pois tem idade inferior a 5 anos");
            }

            var contatoBase = _contatoRepositorio.ObterPorId(contato.Id);

            if (contatoBase == null)
            {
                throw new NegocioException($"Contato não encontrado para o id: {contato.Id}");
            }

            if (ExisteContatoCadastrado(contato.Nome) && contato.Id != contatoBase.Id)
            {
                throw new NegocioException($"Já existe registro do contato {contato.Nome} na base de dados.");
            }

            var contatoOld = new Contato(contatoBase);

            contatoBase.Nome           = contato.Nome;
            contatoBase.Sexo           = contato.Sexo;
            contatoBase.DataNascimento = contato.DataNascimento;
            contatoBase.Idade          = idade;

            return(await Task.FromResult(_contatoRepositorio.Editar(contatoOld, contatoBase)));
        }