public async Task <Postagem> InserirPostagem(PostagemInput input)
        {
            var usuarioId = _logado.ObterUsuarioLogado();

            var postagem = new Postagem(input.Texto, input.FotoPost, usuarioId);

            if (!postagem.EhValido())
            {
                throw new ArgumentException("Você não pode inserir uma postagem vazia");
            }

            int id = await _postagemRepository
                     .InserirPostagem(postagem)
                     .ConfigureAwait(false);

            postagem.SetId(id);

            return(postagem);
        }
        public async Task <List <AmigosViewModel> > ObterListaDeAmigos()
        {
            var idSeguidor = _logado.ObterUsuarioLogado();

            var amigos = await _amigosRepository
                         .ObterNomeListaDeAmigos(idSeguidor)
                         .ConfigureAwait(false);

            List <AmigosViewModel> listaAmigos = new List <AmigosViewModel>();

            foreach (Amigos amigo in amigos)
            {
                listaAmigos.Add(new AmigosViewModel()
                {
                    IdAmigo   = amigo.IdUsuarioSeguido,
                    NomeAmigo = amigo.NomeAmigo
                });
            }

            return(listaAmigos);
        }
        public async Task <string> Curtir(int postagemId)
        {
            var postagens = await _postagemRepository
                            .ObterPostagens()
                            .ConfigureAwait(false);

            if (!postagens.Contains(postagemId))
            {
                throw new ArgumentException("Não existe publicação com esse ID");
            }

            var usuarioId = _logado.ObterUsuarioLogado();

            var curtida = await _curtidasRepository
                          .GetByUsuarioIdAndPostagemIdAsync(usuarioId, postagemId)
                          .ConfigureAwait(false);

            var usuarioPostagemId = await _postagemRepository
                                    .GetUsuarioIdByPostagemId(postagemId);

            var amigosId = await _amigosRepository
                           .ObterListaDeAmigos(usuarioId)
                           .ConfigureAwait(false);

            if (amigosId.Contains(usuarioPostagemId) || usuarioPostagemId == usuarioId)
            {
                if (curtida != null)
                {
                    var descurtiu = await _curtidasRepository
                                    .Descurtir(curtida.Id)
                                    .ConfigureAwait(false);

                    var resultado = ("Você descurtiu a postagem de número " + postagemId);
                    return(resultado);
                }
                else
                {
                    var novaCurtida = new Curtidas(usuarioId, postagemId);

                    var curtiu = await _curtidasRepository
                                 .Curtir(novaCurtida)
                                 .ConfigureAwait(false);

                    var resultado = ("Você curtiu a postagem de número " + postagemId);
                    return(resultado);
                }
            }
            else
            {
                throw new Exception("Você não pode curtir essa publicação, porque você não segue este usuário");
            }
        }
        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");
            }
        }