public IActionResult Release(string id) { Release existingRelease = _context.Releases.SingleOrDefault(r => r.id_string == id); DisplayRelease release = new DisplayRelease(); if (existingRelease != null) { release.title = existingRelease.title; release.date = existingRelease.date; release.id = id; release.artist = existingRelease.artist; release.arid = existingRelease.artist_id_string; release.avg_rating = -1; release.ratings = 0; release.image = existingRelease.image; } else { JObject releaseJson = new JObject(); ApiCaller.GetReleaseData(id, r => { releaseJson = (JObject)r; }).Wait(); release.title = (string)releaseJson.SelectToken("title"); release.date = (string)releaseJson.SelectToken("first-release-date"); release.id = (string)releaseJson.SelectToken("id"); release.artist = (string)releaseJson.SelectToken("artist-credit").First.SelectToken("name"); release.arid = (string)releaseJson.SelectToken("artist-credit").First.SelectToken("artist").SelectToken("id"); release.avg_rating = -1; release.ratings = 0; JObject art = new JObject(); ApiCaller.GetArt(id, a => { art = (JObject)a; }).Wait(); try { release.image = (string)art.SelectToken("images").First.SelectToken("thumbnails").SelectToken("small"); } catch { release.image = "Not found"; } } ViewBag.logged = false; string placeholder = null; if (HttpContext.Session.GetInt32("id") != null) { placeholder = "0 to 10"; ViewBag.logged = true; int?release_id = null; if (existingRelease != null) { release_id = existingRelease.id; } if (release_id != null) { Rating thisRating = _context.Ratings.Where(r => r.user_id == HttpContext.Session.GetInt32("id")).SingleOrDefault(r => r.release_id == release_id); if (thisRating != null) { placeholder = thisRating.rating.ToString(); } } } if (existingRelease != null) { release.avg_rating = existingRelease.avg_rating; release.ratings = existingRelease.ratings; } ViewBag.placeholder = placeholder; return(View(release)); }
public IActionResult Rate(string id, decimal?rating) { if (rating != null) { Release thisRelease = _context.Releases.SingleOrDefault(r => r.id_string == id); if (thisRelease == null) { Release newRelease = new Release() { id_string = id }; string title = ""; string artist = ""; string date = ""; string ais = ""; ApiCaller.GetReleaseData(id, a => { title = (string)(((JObject)a).SelectToken("title")); artist = (string)((JObject)a).SelectToken("artist-credit").First.SelectToken("artist").SelectToken("name"); date = (string)((JObject)a).SelectToken("first-release-date"); ais = (string)((JObject)a).SelectToken("artist-credit").First.SelectToken("artist").SelectToken("id"); }).Wait(); newRelease.title = title; newRelease.artist = artist; newRelease.date = date; newRelease.artist_id_string = ais; JObject art = new JObject(); ApiCaller.GetArt(id, a => { art = (JObject)a; }).Wait(); try { newRelease.image = (string)art.SelectToken("images").First.SelectToken("thumbnails").SelectToken("large"); } catch { newRelease.image = "Not found"; } _context.Add(newRelease); _context.SaveChanges(); thisRelease = _context.Releases.SingleOrDefault(r => r.id_string == id); } int user_id = (int)HttpContext.Session.GetInt32("id"); Rating thisRating = _context.Ratings.Where(r => r.user_id == user_id).SingleOrDefault(r => r.release_id == thisRelease.id); if (thisRating == null) { Rating newRating = new Rating() { user_id = user_id, release_id = thisRelease.id, rating = (decimal)rating }; _context.Add(newRating); decimal temp = thisRelease.avg_rating * thisRelease.ratings; temp += newRating.rating; thisRelease.ratings++; thisRelease.avg_rating = temp / thisRelease.ratings; } else { decimal temp = thisRelease.avg_rating * thisRelease.ratings; temp -= thisRating.rating; temp += (decimal)rating; thisRating.rating = (decimal)rating; thisRelease.avg_rating = temp / thisRelease.ratings; } _context.Update(thisRelease); _context.SaveChanges(); } return(RedirectToAction("Release", new { id = id })); }