Example #1
0
        public async Task <JsonResult> Comment(CommentModel Model) //main comment & reply a comment
        {
            //  flood ihtimalleri:
            //  aynı veya benzer comment içeriğini girme,
            //  çok fazla ard arda giriş yapma.

            if (!ModelState.IsValid)
            {
                return(Json(null));
            }

            AuthUser = await GetAuthenticatedUserFromDatabaseAsync();

            if (Model.NeedId != null)
            {
                var CommentedNeed = await Context.Need.FirstOrDefaultAsync(x => x.Id == Model.NeedId && !x.IsRemoved && x.IsConfirmed);

                if (CommentedNeed != null)
                {
                    var NewComment = new NeedComment()
                    {
                        Comment = Model.Comment,
                        UserId  = AuthUser.Id,
                        NeedId  = (long)Model.NeedId
                    };
                    await Context.AddAsync(NewComment);

                    await Context.SaveChangesAsync();

                    return(Json(new { id = NewComment.Id })); //returning comment id for sliding page to the new comment
                }
                else
                {
                    return(Json(new { infoMessage = "Tartışma başlatılacak kampanyaya ulaşamadık" }));
                }
            }
            else if (Model.RelatedCommentId != null)
            {
                var RepliedComment = await Context.NeedComment.Include(x => x.Need).
                                     FirstOrDefaultAsync(x => x.Id == Model.RelatedCommentId && !x.IsRemoved && !x.Need.IsRemoved && x.Need.IsConfirmed);

                if (RepliedComment != null)
                {
                    var NewReply = new NeedComment()
                    {
                        Comment          = Model.Comment,
                        UserId           = AuthUser.Id,
                        NeedId           = RepliedComment.NeedId,
                        RelatedCommentId = RepliedComment.Id
                    };

                    await Context.AddAsync(NewReply);

                    await Context.SaveChangesAsync();

                    return(Json(new { id = NewReply.Id })); //returning comment id for sliding page to the new comment
                }
                else
                {
                    return(Json(new { infoMessage = "Cevaplanacak yoruma ulaşamadık" }));
                }
            }

            return(Json(null));
        }
        public async Task <IActionResult> PostAdd(CommentModel model) //doing comment or reply
        {
            if (model.NeedId == null && model.RelatedCommentId == null || model.NeedId == Guid.Empty && model.RelatedCommentId == Guid.Empty)
            {
                return(Error("Yorum yapmak istediğiniz kampanyayı veya cevaplamak istedğiniz yorumu kontrol edin"));
            }
            if (!ModelState.IsValid)
            {
                return(Error(ModelState.Values.SelectMany(v => v.Errors).FirstOrDefault().ErrorMessage));
            }

            if (model.NeedId != Guid.Empty && model.NeedId != null) // add new comment
            {
                var commentedNeed = await Context.Need.FirstOrDefaultAsync(x => x.Id == model.NeedId && !x.IsRemoved);

                if (commentedNeed != null)
                {
                    if (commentedNeed.Stage != 3)
                    {
                        return(Error("Burada tartışma başlatılamaz"));
                    }

                    var NewComment = new NeedComment
                    {
                        Comment = model.Comment.RemoveLessGreaterSigns(),
                        NeedId  = (Guid)model.NeedId,
                        UserId  = Guid.Parse(User.Identity.GetUserId())
                    };

                    await Context.AddAsync(NewComment);

                    await Context.SaveChangesAsync();

                    return(Succes(null, NewComment.Id, 201));
                }

                return(Error("Tartışmanın başlatılacağı kampanya yok", null, null, 404));
            }
            else  //[reply] add relational comment
            {
                var repliedComment = await Context.NeedComment.Include(comment => comment.Need).FirstOrDefaultAsync(x => x.Id == model.RelatedCommentId && !x.IsRemoved && !x.Need.IsRemoved);

                if (repliedComment != null)
                {
                    if (repliedComment.Need.Stage != 3)
                    {
                        return(Error("Burada cevap yazılamaz"));
                    }

                    var NewReply = new NeedComment
                    {
                        Comment          = model.Comment.RemoveLessGreaterSigns(),
                        UserId           = Guid.Parse(User.Identity.GetUserId()),
                        NeedId           = repliedComment.NeedId,
                        RelatedCommentId = repliedComment.Id
                    };

                    await Context.AddAsync(NewReply);

                    await Context.SaveChangesAsync();

                    return(Succes(null, NewReply.Id, 201));
                }

                return(Error("Cevaplanacak yorum yok", null, null, 404));
            }
        }