public async Task <IActionResult> UpdateProcess(int id)
        {
            if (id == null)
            {
                return(RedirectToAction("Home", "Update"));
            }
            var owner = await userManager.GetUserAsync(HttpContext.User);

            var appuser = AppUser.ApplicationUserToAppUser(owner);
            var idea    = IdeaEx.IdeaById(id, owner, context);

            if (idea.Authorized && idea.Idea.Owner.Id == owner.Id)
            {
                var vm = new UpdateViewModel {
                    JsonData = JsonConvert.SerializeObject(idea, Formatting.Indented, new JsonSerializerSettings {
                        ContractResolver = new CamelCasePropertyNamesContractResolver()
                    })
                };
                return(View(vm));
            }
            else
            {
                return(RedirectToAction("Account", "Login"));
            }
        }
        public async Task <IActionResult> PostComment([FromBody] ListViewModel vm)
        {
            if (ModelState.IsValid)
            {
                try {
                    var owner = await userManager.GetUserAsync(HttpContext.User);

                    var idea = context.Ideas.Include(r => r.Stats).Include(r => r.Comments).Include(r => r.Owner).FirstOrDefault(r => r.Id == vm.IdeaId);
                    if (idea.Owner != owner)
                    {
                        Notification.Add(NotificationType.Commented, idea.Owner, owner, idea, context);
                    }
                    Comment.Add(owner, idea, vm.Comment);
                    UserStats.AddComment(owner, context);
                    Stats.AddComments(idea);
                    await context.SaveChangesAsync();

                    var ideaEx   = IdeaEx.IdeaById(vm.IdeaId, owner, context);
                    var JsonData = JsonConvert.SerializeObject(ideaEx, Formatting.Indented, new JsonSerializerSettings {
                        ContractResolver = new CamelCasePropertyNamesContractResolver()
                    });
                    return(Json(JsonData));
                } catch (Exception ex) {
                    ex = ex;
                }
            }
            else
            {
                var JsonDataError = JsonConvert.SerializeObject(ModelState.Values, Formatting.Indented, new JsonSerializerSettings {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                });
                return(Json(JsonDataError));
            }
            return(Json(""));
        }
        public async Task <IActionResult> RemoveComment([FromBody] ListViewModel vm)
        {
            if (ModelState.IsValid)
            {
                try {
                    var owner = await userManager.GetUserAsync(HttpContext.User);

                    var idea = context.Ideas.Include(r => r.Stats).Where(r => r.Comments.Any(x => x.Id == vm.CommentId && x.Owner.Id == owner.Id) && r.Id == vm.IdeaId).FirstOrDefault();
                    if (idea != null && Comment.Remove(vm.CommentId, owner, context))
                    {
                        UserStats.RemoveComment(owner, context);
                        Stats.RemoveComments(idea);
                        await context.SaveChangesAsync();

                        var ideaEx   = IdeaEx.IdeaById(vm.IdeaId, owner, context);
                        var JsonData = JsonConvert.SerializeObject(ideaEx, Formatting.Indented, new JsonSerializerSettings {
                            ContractResolver = new CamelCasePropertyNamesContractResolver()
                        });
                        return(Json(JsonData));
                    }
                } catch (Exception ex) {
                    ex = ex;
                }
            }
            else
            {
                var JsonDataError = JsonConvert.SerializeObject(ModelState.Values, Formatting.Indented, new JsonSerializerSettings {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                });
                return(Json(JsonDataError));
            }
            return(Json(""));
        }
        public async Task <IActionResult> ById([FromBody] ListViewModel vm)
        {
            var owner = await userManager.GetUserAsync(HttpContext.User);

            var idea     = IdeaEx.IdeaById(vm.IdeaId, owner, context);
            var JsonData = JsonConvert.SerializeObject(idea, Formatting.Indented, new JsonSerializerSettings {
                ContractResolver = new CamelCasePropertyNamesContractResolver()
            });

            return(Json(JsonData));
        }
        public async Task <IActionResult> Details(int id)
        {
            var owner = await userManager.GetUserAsync(HttpContext.User);

            var idea = IdeaEx.IdeaById(id, owner, context);

            Stats.AddViews(idea.Idea);
            var json = new DetailsViewModel {
                JsonData = JsonConvert.SerializeObject(idea, Formatting.Indented, new JsonSerializerSettings {
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                })
            };

            return(View(json));
        }