Exemple #1
0
        public ActionResult Criar(Postagem postagem, string Tags_nome, string Post, string[] Hiddens)
        {
            if (ModelState.IsValid)
            {
                if(WebSecurity.CurrentUserId == -1)
                    return View("NaoLogado");

                List<Imagem> lstImagens = new List<Imagem>();
                foreach (string strImg in Hiddens)
                {
                    if (strImg != string.Empty)
                    {
                        var imagem = new Imagem
                        {
                            imagemString = strImg
                        };
                        lstImagens.Add(imagem);
                    }
                }
                postagem.Imagens = lstImagens;
                //primeiro criar as tags, dpx criar a postagem, tudo separado e por ultimo criar a tagpostagem linkando ambos
                string[] tags = Tags_nome.Split(',');

                foreach (var tag in tags)
                {
                    Tag _novatag = new Tag();
                    _novatag = storeDB.Tags.SingleOrDefault(x => x.nome == tag);
                    if (_novatag == null)
                    {
                        _novatag = new Tag();
                        _novatag.nome = tag;
                        storeDB.Tags.Add(_novatag);
                    }
                }
                postagem.texto = Post;
                postagem.DataCriacao = DateTime.Now;
                postagem.userID = WebSecurity.CurrentUserId;
                postagem.Titulo.DataCriacao = DateTime.Now;

                storeDB.Postagens.Add(postagem);
                storeDB.SaveChanges();

                Postagem postagemAux = new Postagem();
                postagemAux = storeDB.Postagens.SingleOrDefault(a => a.texto == postagem.texto);
                foreach (var tag in tags)
                {
                    Tag _novatag = new Tag();
                    _novatag = storeDB.Tags.SingleOrDefault(x => x.nome == tag);
                    var _novoPostTag = new TagPostagem
                    {
                        Postagens = postagemAux,
                        Tags = _novatag
                    };
                    storeDB.TagPostagens.Add(_novoPostTag);
                }
                storeDB.SaveChanges();
                return RedirectToAction("Index", "Home");
            }
            return View(postagem);
        }
        private static Tag GetOrCreateTag(BlogDbContext context, string name)
        {
            var nameToLower = name.ToLower();
            var tagEntity = context.Tags
                .FirstOrDefault(tag => tag.Name == nameToLower);

            // If entity already exists
            if (tagEntity != null)
            {
                return tagEntity;
            }

            var newTagEntity = new Tag()
            {
                Name = nameToLower
            };

            context.Tags.Add(newTagEntity);
            context.SaveChanges();

            return newTagEntity;
        }
        // POST api/Posts
        public HttpResponseMessage PostPost([FromUri] string sessionKey, [FromBody] PostModel post)
        {
            return this.PerformOperationAndHandleExceptions(() =>
            {
                if (!ModelState.IsValid)
                {
                    throw new ArgumentException("Invalid model binding state");
                    // return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
                }

                int userId = this.ValidateSessionKey(sessionKey);

                if (post.Title.Length == 0 || post.Text.Length == 0)
                {
                    throw new ArgumentException("Post Title and Text should not be empty");
                }

                // Add title tags to the existing list of tags
                string[] titleTags = post.Title.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var tag in titleTags)
                {
                    if (!post.Tags.Contains(tag))
                    {
                        post.Tags.Add(tag);
                    }
                }

                using (var context = new BlogEntities())
                {
                    if (context.Users.Find(userId) == null)
                    {
                        throw new ArgumentException("Invalid session key - user not exists");
                    }

                    using (var scope = new System.Transactions.TransactionScope())
                    {
                        var newPost = new Post()
                        {
                            Title = post.Title,
                            Text = post.Text,
                            User = context.Users.Find(userId),
                            PostDate = DateTime.Now
                        };

                        foreach (var tag in post.Tags)
                        {
                            var tagToLower = tag.ToLower();
                            var newTag = context.Tags.FirstOrDefault(t => t.TagName == tagToLower);
                            if (newTag == null)
                            {
                                newTag = new Tag() { TagName = tagToLower };
                                context.Tags.Add(newTag);
                            }

                            newPost.Tags.Add(newTag);
                        }

                        context.Posts.Add(newPost);
                        context.SaveChanges();
                        scope.Complete();

                        return Request.CreateResponse(HttpStatusCode.Created, new
                        {
                            Title = newPost.Title,
                            Id = newPost.PostId
                        });
                    }
                }
            });
        }