public JsonResult SalvarPublicacaoAntesDepois()
        {
            DAOPublicacaoAntesDepois daoPublicacaoAntesDepois = null;
            Usuario usuario     = null;
            string  pathImagem1 = null;
            string  pathImagem2 = null;
            PublicacaoAntesDepois novaPublicacaoAntesDepois = null;

            try
            {
                usuario = (Usuario)Session["Usuario"];

                if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
                {
                    HttpPostedFile postedFile1 = System.Web.HttpContext.Current.Request.Files["imagemAntes"];
                    Image          imagem1     = Bitmap.FromStream(postedFile1.InputStream);
                    pathImagem1 = @"\ImagensPublicacoes\" + postedFile1.FileName;
                    imagem1.Save(System.Web.HttpContext.Current.Server.MapPath("~") + @"\ImagensPublicacoes\" + postedFile1.FileName);

                    HttpPostedFile postedFile2 = System.Web.HttpContext.Current.Request.Files["imagemDepois"];
                    Image          imagem2     = Bitmap.FromStream(postedFile2.InputStream);
                    pathImagem2 = @"\ImagensPublicacoes\" + postedFile2.FileName;
                    imagem2.Save(System.Web.HttpContext.Current.Server.MapPath("~") + @"\ImagensPublicacoes\" + postedFile2.FileName);
                }
                else
                {
                    throw new Exception();
                }

                novaPublicacaoAntesDepois                  = new PublicacaoAntesDepois();
                novaPublicacaoAntesDepois.Autor            = usuario;
                novaPublicacaoAntesDepois.PathImagemAntes  = pathImagem1;
                novaPublicacaoAntesDepois.PathImagemDepois = pathImagem2;
                novaPublicacaoAntesDepois.Titulo           = System.Web.HttpContext.Current.Request.Form["txtTitulo"];
                novaPublicacaoAntesDepois.Texto            = System.Web.HttpContext.Current.Request.Form["txtTexto"];
                //novaPublicacaoAntesDepois.Etiquetas.AddRange(System.Web.HttpContext.Current.Request.Form["tags"].ToString().Split(','));

                daoPublicacaoAntesDepois = new DAOPublicacaoAntesDepois();
                if (daoPublicacaoAntesDepois.IncluirPublicacaoAntesDepois(novaPublicacaoAntesDepois))
                {
                    return(Json("Aew salvou!"));
                }
                else
                {
                    return(Json("Deu ruim pra salvar a imagem hein..."));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public bool IncluirPublicacaoAntesDepois(PublicacaoAntesDepois novaPublicacaoAntesDepois)
        {
            SqlConnection connection = null;
            StringBuilder query      = null;
            SqlCommand    command    = null;
            DateTime      dataHoraRegistrada;

            try
            {
                dataHoraRegistrada = DateTime.Now;

                query = new StringBuilder();
                query.Append("BEGIN TRANSACTION ");
                query.Append("INSERT INTO Publicacoes ( ");
                query.Append("	IdTipo, ");
                query.Append("	DataHoraPublicado, ");
                query.Append("	IdUsuario ");
                query.Append(") VALUES ( ");
                query.Append("	@IdTipo, ");
                query.Append("	@DataHoraPublicado, ");
                query.Append("	@IdUsuario); ");
                query.Append("SET @IdPublicacao = SCOPE_IDENTITY(); ");
                query.Append("INSERT INTO PublicacoesAntesDepois ( ");
                query.Append("	Id, ");
                query.Append("	PathImagemAntes, ");
                query.Append("	PathImagemDepois, ");
                query.Append("	Titulo, ");
                query.Append("	Etiquetas, ");
                query.Append("	Texto ");
                query.Append(") VALUES ( ");
                query.Append("	@IdPublicacao, ");
                query.Append("	@PathImagemAntes, ");
                query.Append("	@PathImagemDepois, ");
                query.Append("	@Titulo, ");
                query.Append("	@Etiquetas, ");
                query.Append("	@Texto); ");
                query.Append("COMMIT");

                connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["ConnectionEstudo"].ConnectionString);
                connection.Open();

                command             = connection.CreateCommand();
                command.CommandType = CommandType.Text;
                command.CommandText = query.ToString();

                command.Parameters.AddWithValue("@IdTipo", (int)novaPublicacaoAntesDepois.Tipo);
                command.Parameters.AddWithValue("@DataHoraPublicado", dataHoraRegistrada);
                command.Parameters.AddWithValue("@IdUsuario", novaPublicacaoAntesDepois.Autor.Id);
                command.Parameters.AddWithValue("@PathImagemAntes", novaPublicacaoAntesDepois.PathImagemAntes);
                command.Parameters.AddWithValue("@PathImagemDepois", novaPublicacaoAntesDepois.PathImagemDepois);
                command.Parameters.AddWithValue("@Titulo", novaPublicacaoAntesDepois.Titulo);
                command.Parameters.AddWithValue("@Texto", novaPublicacaoAntesDepois.Texto);
                command.Parameters.AddWithValue("@Etiquetas", String.Join(",", novaPublicacaoAntesDepois.Etiquetas));
                command.Parameters.Add("@IdPublicacao", SqlDbType.Int).Direction = ParameterDirection.Output;

                if (command.ExecuteNonQuery() > 0)
                {
                    novaPublicacaoAntesDepois.Id = (int)command.Parameters["@IdPublicacao"].Value;
                    novaPublicacaoAntesDepois.DataHoraPublicado = dataHoraRegistrada;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List <Publicacao> ObterPublicacoes()
        {
            string                connectionString;
            StringBuilder         query                 = null;
            SqlConnection         connection            = null;
            SqlCommand            command               = null;
            SqlDataReader         dataReader            = null;
            Usuario               autor                 = null;
            Imagem                imagem                = null;
            PublicacaoImagem      publicacaoImagem      = null;
            PublicacaoProjeto     publicacaoProjeto     = null;
            PublicacaoAntesDepois publicacaoAntesDepois = null;
            List <Publicacao>     listaPublicacoes      = null;

            try
            {
                listaPublicacoes = new List <Publicacao>();

                query = new StringBuilder();
                query.Append("SELECT ");
                query.Append("    P.Id, ");
                query.Append("    P.IdTipo, ");
                query.Append("    P.DataHoraPublicado, ");
                query.Append("    P.IdUsuario AS IdAutorPublicacao, ");
                query.Append("    U.Nome AS NomeAutor, ");
                query.Append("    U.Email AS EmailAutor, ");
                query.Append("    PI.IdImagem, ");
                query.Append("    I.Legenda AS LegendaImagem, ");
                query.Append("    I.DataHoraInclusao, ");
                query.Append("    I.PathImagem, ");
                query.Append("    PP.Titulo AS TituloProjeto, ");
                query.Append("    PP.Conteudo AS ConteudoPublicacaoProjeto, ");
                query.Append("    PAD.PathImagemAntes, ");
                query.Append("    PAD.PathImagemDepois, ");
                query.Append("    PAD.Titulo AS TituloAntesDepois, ");
                query.Append("    PAD.Texto AS TextoAntesDepois ");
                query.Append("FROM Publicacoes P ");
                query.Append("    LEFT JOIN Usuarios U ON P.Id = U.Id ");
                query.Append("    LEFT JOIN PublicacoesImagem PI ON P.Id = PI.Id ");
                query.Append("    LEFT JOIN Imagens I ON PI.IdImagem = I.Id ");
                query.Append("    LEFT JOIN PublicacoesProjeto PP ON P.Id = PP.Id ");
                query.Append("    LEFT JOIN PublicacoesAntesDepois PAD ON P.Id = PAD.Id");

                connectionString = WebConfigurationManager.ConnectionStrings["ConnectionEstudo"].ConnectionString;
                using (connection = new SqlConnection(connectionString))
                {
                    using (command = connection.CreateCommand())
                    {
                        command.CommandType = CommandType.Text;
                        command.CommandText = query.ToString();

                        connection.Open();
                        using (dataReader = command.ExecuteReader())
                        {
                            listaPublicacoes = new List <Publicacao>();
                            while (dataReader.Read())
                            {
                                switch ((int)dataReader["IdTipo"])
                                {
                                case (int)Publicacao.TipoPublicacao.PublicacaoImagem:
                                    autor       = new Usuario();
                                    autor.Id    = (int)dataReader["IdAutorPublicacao"];
                                    autor.Nome  = dataReader["NomeAutor"].ToString();
                                    autor.Email = dataReader["EmailAutor"].ToString();

                                    imagem                  = new Imagem();
                                    imagem.Id               = (int)dataReader["IdImagem"];
                                    imagem.Legenda          = dataReader["LegendaImagem"].ToString();
                                    imagem.DataHoraInclusao = (DateTime)dataReader["DataHoraInclusao"];
                                    imagem.PathImagem       = dataReader["PathImagem"].ToString();
                                    imagem.Dono             = autor;

                                    publicacaoImagem                   = new PublicacaoImagem();
                                    publicacaoImagem.Id                = (int)dataReader["Id"];
                                    publicacaoImagem.Autor             = autor;
                                    publicacaoImagem.DataHoraPublicado = (DateTime)dataReader["DataHoraPublicado"];
                                    publicacaoImagem.Imagem            = imagem;

                                    listaPublicacoes.Add(publicacaoImagem);
                                    break;

                                case (int)Publicacao.TipoPublicacao.PublicacaoProjeto:
                                    autor       = new Usuario();
                                    autor.Id    = (int)dataReader["IdAutorPublicacao"];
                                    autor.Nome  = dataReader["NomeAutor"].ToString();
                                    autor.Email = dataReader["EmailAutor"].ToString();

                                    publicacaoProjeto                   = new PublicacaoProjeto();
                                    publicacaoProjeto.Id                = (int)dataReader["Id"];
                                    publicacaoProjeto.Autor             = autor;
                                    publicacaoProjeto.DataHoraPublicado = (DateTime)dataReader["DataHoraPublicado"];
                                    publicacaoProjeto.Titulo            = dataReader["TituloProjeto"].ToString();
                                    publicacaoProjeto.Conteudo          = JsonConvert.DeserializeObject <List <ItemPublicacao> >(dataReader["ConteudoPublicacaoProjeto"].ToString());

                                    listaPublicacoes.Add(publicacaoProjeto);
                                    break;

                                case (int)Publicacao.TipoPublicacao.PublicacaoAntesDepois:
                                    autor       = new Usuario();
                                    autor.Id    = (int)dataReader["IdAutorPublicacao"];
                                    autor.Nome  = dataReader["NomeAutor"].ToString();
                                    autor.Email = dataReader["EmailAutor"].ToString();

                                    publicacaoAntesDepois                   = new PublicacaoAntesDepois();
                                    publicacaoAntesDepois.Id                = (int)dataReader["Id"];
                                    publicacaoAntesDepois.Autor             = autor;
                                    publicacaoAntesDepois.DataHoraPublicado = (DateTime)dataReader["DataHoraPublicado"];
                                    publicacaoAntesDepois.PathImagemAntes   = dataReader["PathImagemAntes"].ToString();
                                    publicacaoAntesDepois.PathImagemDepois  = dataReader["PathImagemDepois"].ToString();
                                    publicacaoAntesDepois.Titulo            = dataReader["TituloAntesDepois"].ToString();
                                    publicacaoAntesDepois.Texto             = dataReader["TextoAntesDepois"].ToString();

                                    listaPublicacoes.Add(publicacaoAntesDepois);
                                    break;
                                }
                            }
                        }
                    }
                }

                return(listaPublicacoes);
            }
            finally
            {
                if (query != null)
                {
                    query = null;
                }
            }
        }
        public void PopularPublicacoes(UsuarioProfissional autor)
        {
            string                connectionString;
            StringBuilder         query                 = null;
            SqlConnection         connection            = null;
            SqlCommand            command               = null;
            SqlDataReader         dataReader            = null;
            PublicacaoImagem      publicacaoImagem      = null;
            PublicacaoProjeto     publicacaoProjeto     = null;
            PublicacaoAntesDepois publicacaoAntesDepois = null;
            Imagem                imagem                = null;

            try
            {
                autor.Publicacoes = new List <Publicacao>();

                query = new StringBuilder();
                query.Append("SELECT ");
                query.Append("    P.Id, ");
                query.Append("    P.IdTipo, ");
                query.Append("    P.DataHoraPublicado, ");
                query.Append("    P.IdUsuario, ");
                query.Append("    PP.Titulo AS TituloProjeto, ");
                query.Append("    PP.Conteudo AS ConteudoPublicacaoProjeto, ");
                query.Append("    PAD.Titulo AS TituloAntesDepois, ");
                query.Append("    PAD.Texto AS TextoAntesDepois, ");
                query.Append("    PAD.PathImagemAntes, ");
                query.Append("    PAD.PathImagemDepois, ");
                query.Append("    PIM.IdImagem, ");
                query.Append("    IM.Legenda AS LegendaImagem, ");
                query.Append("    IM.DataHoraInclusao AS DataHoraInclusaoImagem, ");
                query.Append("    IM.PathImagem ");
                query.Append("FROM Publicacoes P ");
                query.Append("    LEFT JOIN PublicacoesProjeto PP ON P.Id = PP.Id ");
                query.Append("    LEFT JOIN PublicacoesAntesDepois PAD ON P.Id = PAD.Id ");
                query.Append("    LEFT JOIN PublicacoesImagem PIM ON P.Id = PIM.Id ");
                query.Append("    LEFT JOIN Imagens IM ON PIM.IdImagem = IM.Id ");
                query.Append("WHERE P.IdUsuario = @IdUsuario");

                connectionString = WebConfigurationManager.ConnectionStrings["ConnectionEstudo"].ConnectionString;
                using (connection = new SqlConnection(connectionString))
                {
                    using (command = connection.CreateCommand())
                    {
                        command.CommandType = CommandType.Text;
                        command.CommandText = query.ToString();
                        command.Parameters.AddWithValue("@IdUsuario", autor.Id);

                        connection.Open();
                        using (dataReader = command.ExecuteReader())
                        {
                            if (dataReader.HasRows)
                            {
                                while (dataReader.Read())
                                {
                                    switch ((Publicacao.TipoPublicacao)dataReader["IdTipo"])
                                    {
                                    case Publicacao.TipoPublicacao.PublicacaoImagem:
                                        publicacaoImagem                   = new PublicacaoImagem();
                                        publicacaoImagem.Id                = (int)dataReader["Id"];
                                        publicacaoImagem.Autor             = autor;
                                        publicacaoImagem.DataHoraPublicado = (DateTime)dataReader["DataHoraPublicado"];

                                        imagem                  = new Imagem();
                                        imagem.Id               = (int)dataReader["IdImagem"];
                                        imagem.Legenda          = dataReader["LegendaImagem"].ToString();
                                        imagem.PathImagem       = dataReader["PathImagem"].ToString();
                                        imagem.DataHoraInclusao = (DateTime)dataReader["DataHoraInclusaoImagem"];
                                        publicacaoImagem.Imagem = imagem;

                                        autor.Publicacoes.Add(publicacaoImagem);
                                        break;

                                    case Publicacao.TipoPublicacao.PublicacaoProjeto:
                                        publicacaoProjeto                   = new PublicacaoProjeto();
                                        publicacaoProjeto.Id                = (int)dataReader["Id"];
                                        publicacaoProjeto.Autor             = autor;
                                        publicacaoProjeto.DataHoraPublicado = (DateTime)dataReader["DataHoraPublicado"];
                                        publicacaoProjeto.Titulo            = dataReader["TituloProjeto"].ToString();
                                        publicacaoProjeto.Conteudo          = JsonConvert.DeserializeObject <List <ItemPublicacao> >(dataReader["ConteudoPublicacaoProjeto"].ToString());

                                        autor.Publicacoes.Add(publicacaoProjeto);
                                        break;

                                    case Publicacao.TipoPublicacao.PublicacaoAntesDepois:
                                        publicacaoAntesDepois                   = new PublicacaoAntesDepois();
                                        publicacaoAntesDepois.Id                = (int)dataReader["Id"];
                                        publicacaoAntesDepois.Autor             = autor;
                                        publicacaoAntesDepois.DataHoraPublicado = (DateTime)dataReader["DataHoraPublicado"];
                                        publicacaoAntesDepois.Titulo            = dataReader["TituloAntesDepois"].ToString();
                                        publicacaoAntesDepois.Texto             = dataReader["TextoAntesDepois"].ToString();
                                        publicacaoAntesDepois.PathImagemAntes   = dataReader["PathImagemAntes"].ToString();
                                        publicacaoAntesDepois.PathImagemDepois  = dataReader["PathImagemDepois"].ToString();

                                        autor.Publicacoes.Add(publicacaoAntesDepois);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
        }