public async Task <Comentario> InserirComentario(int idPostagem, ComentarioInput input) { var postagens = await _postagemRepository .ObterPostagens() .ConfigureAwait(false); if (!postagens.Contains(idPostagem)) { throw new Exception("Não existe publicação com esse ID"); } var usuarioId = _logado.ObterUsuarioLogado(); var usuarioPostagemId = await _postagemRepository .GetUsuarioIdByPostagemId(idPostagem); var amigosId = await _amigosRepository .ObterListaDeAmigos(usuarioId) .ConfigureAwait(false); if (amigosId.Contains(usuarioPostagemId) || usuarioPostagemId == usuarioId) { var comentario = new Comentario(idPostagem, usuarioId, input.Texto); if (!comentario.EhValido()) { throw new ArgumentException("Você não pode inserir um comentário vazio"); } var id = await _comentarioRepository .InserirComentario(comentario) .ConfigureAwait(false); comentario.SetId(id); return(comentario); } else { throw new Exception("Você não pode comentar essa publicação, porque você não segue este usuário"); } }