public JsonResult PostRant(PostRequest Rant) { try { var rant = new Rant { UserId = CurrentUser.UserId(), Timestamp = DateTime.Now, Text = Rant.Text.ToUpper() }; if (Rant.Tags == null) { return(Json(new ApiResponse(false, "At least one tag is required."))); } if (Rant.Tags.Any(t => string.IsNullOrWhiteSpace(t))) { return(Json(new ApiResponse(false, "You cannot submit an empty tag."))); } if (string.IsNullOrWhiteSpace(Rant.Text)) { return(Json(new ApiResponse(false, "You cannot submit an empty rant."))); } using (var context = new EnrampageEntities()) { context.Tags.AddRange( Rant.Tags.Except(context.Tags.Where(t => !t.User.Banned).Select(t => t.Text)) .Select(t => new Tag { UserId = rant.UserId, Text = t })); context.SaveChanges(); foreach (var tag in Rant.Tags) { rant.Tags.Add(context.Tags.First(t => !t.User.Banned && t.Text == tag)); } context.Rants.Add(rant); context.SaveChanges(); } return(Json(new ApiResponse(true, "Posted rant successfully.", RantResponse.FromRant(rant, ReportState.Removable)))); } catch (Exception Ex) { LogHelper.Log(Ex); return(Json(new ApiResponse(false, "Failed to post rant."))); } }
public JsonResult GetRants(PageRequest Page) { try { var rantResponses = new List <RantResponse>(); using (var context = new EnrampageEntities()) { IQueryable <Rant> rants = context.Rants; if (Page.Tags != null) { rants = rants.Where(r => r.Tags.Select(t => t.Text).Intersect(Page.Tags).Any()); } foreach (var rant in rants.OrderByDescending(r => r.Timestamp).Skip(Page.Number * 10).Take(10)) { var reportState = ReportState.Reportable; if (!Request.IsAuthenticated) { reportState = ReportState.None; } else if (rant.UserId == CurrentUser.UserId() || CurrentUser.Admin()) { reportState = ReportState.Removable; } else if (rant.Reports.Any(r => r.UserId == CurrentUser.UserId())) { reportState = ReportState.AlreadyReported; } rantResponses.Add(RantResponse.FromRant(rant, reportState)); } } return(Json(new ApiResponse(true, "Rant listing successful.", rantResponses))); } catch (Exception Ex) { LogHelper.Log(Ex); return(Json(new ApiResponse(false, "Failed to list rants."))); } }