diff --git a/src/Controllers/Common/RatingController.cs b/src/Controllers/Common/RatingController.cs index 10cae4f..5f70660 100644 --- a/src/Controllers/Common/RatingController.cs +++ b/src/Controllers/Common/RatingController.cs @@ -111,7 +111,7 @@ public class RatingController : Controller } // This method is the only thing that adds ratings. - public RatingInfo SubmitRating(Viking viking, int category, int? eID, string? uID, int value) { + private RatingInfo SetRating(Viking viking, int category, int? eID, string? uID, int value) { RatingRank? rank; Rating? rating = viking.Ratings.FirstOrDefault( r => category == r.CategoryID && r.RatedEntityID == eID && r.RatedUserID == uID @@ -138,18 +138,13 @@ public class RatingController : Controller }; ctx.RatingRanks.Add(rank); } - rank.TotalVotes = rank.Ratings?.Count??1; - if (newRating) { - rating.Rank = rank; - rank.TotalVotes++; - } + if (newRating) rating.Rank = rank; + rating.Value = value; if (rank.Ratings != null) { rank.RatingAverage = 0; foreach (Rating r in rank.Ratings) { - if (r == rating) continue; - rank.RatingAverage += (float)((decimal)r.Value / (decimal)rank.TotalVotes); + rank.RatingAverage += (float)((decimal)r.Value / (decimal)rank.Ratings.Count); } - rank.RatingAverage += (float)((decimal)value / (decimal)rank.TotalVotes); } else { rank.RatingAverage = value; } @@ -170,11 +165,10 @@ public class RatingController : Controller } if (!resortOthers) rank.Rank = ranks.Length+1; } - rating.Value = value; rating.Date = DateTime.UtcNow; rank.UpdateDate = rating.Date; ctx.SaveChanges(); - RatingInfo info = new() { + return new RatingInfo() { Id = rating.Id, OwnerUid = viking.Uid, CategoryID = category, @@ -182,29 +176,28 @@ public class RatingController : Controller Value = value, Date = rating.Date }; - return info; } [HttpPost] [Produces("application/xml")] [Route("RatingWebService.asmx/SetRating")] [VikingSession] - public IActionResult SubmitRating(Viking viking, [FromForm] int categoryID, [FromForm] int ratedEntityID, [FromForm] int ratedValue) { - return Ok(SubmitRating(viking, categoryID, ratedEntityID, null, ratedValue)); + public IActionResult SetRating(Viking viking, [FromForm] int categoryID, [FromForm] int ratedEntityID, [FromForm] int ratedValue) { + return Ok(SetRating(viking, categoryID, ratedEntityID, null, ratedValue)); } [HttpPost] [Produces("application/xml")] [Route("RatingWebService.asmx/SetUserRating")] [VikingSession] - public IActionResult SubmitUserRating(Viking viking, [FromForm] int categoryID, [FromForm] string ratedUserID, [FromForm] int ratedValue) { - return Ok(SubmitRating(viking, categoryID, null, ratedUserID, ratedValue)); + public IActionResult SetUserRating(Viking viking, [FromForm] int categoryID, [FromForm] string ratedUserID, [FromForm] int ratedValue) { + return Ok(SetRating(viking, categoryID, null, ratedUserID, ratedValue)); } [HttpPost] [Produces("application/xml")] [Route("RatingWebService.asmx/GetRatingByRatedEntity")] - public RatingInfo[] GetAllRatings([FromForm] int categoryID, [FromForm] int ratedEntityID) { + public RatingInfo[] GetRatingByRatedEntity([FromForm] int categoryID, [FromForm] int ratedEntityID) { return ctx.Ratings .Where(r => r.CategoryID == categoryID && r.RatedEntityID == ratedEntityID && r.RatedUserID == null) .Select(r => new RatingInfo { @@ -218,24 +211,10 @@ public class RatingController : Controller ).ToArray(); } - // TODO: Implement for shipwreck tracks, maybe. - // Looking at the code, we actually want to delete all ratings for the entity. - // This current implementation only deletes the user's ranking, and not thoroughly. - //[HttpPost] - //[Route("RatingWebService.asmx/DeleteEntityRating")] - //[VikingSession] - public IActionResult ClearRating(Viking viking, [FromForm] int categoryID, [FromForm] int ratedEntityID) { - Rating? rating = viking.Ratings.FirstOrDefault( - r => categoryID == r.CategoryID && r.RatedEntityID == ratedEntityID && r.RatedUserID == null - ); - if (rating != null) ctx.Ratings.Remove(rating); - return Ok(); - } - [HttpPost] [Produces("application/xml")] [Route("RatingWebService.asmx/GetTopRatedByCategoryID")] - public RatingRankInfo[] GetRanks([FromForm] int categoryID, [FromForm] int numberOfRecord) { + public RatingRankInfo[] GetTopRatedByCategoryID([FromForm] int categoryID, [FromForm] int numberOfRecord) { return ctx.RatingRanks .Where(rr => categoryID == rr.CategoryID) .Take(numberOfRecord) @@ -246,7 +225,7 @@ public class RatingController : Controller [HttpPost] [Produces("application/xml")] [Route("RatingWebService.asmx/GetTopRatedUserByCategoryID")] - public IActionResult GetUserRanks([FromForm] int categoryID, [FromForm] int numberOfRecord) { + public IActionResult GetTopRatedUserByCategoryID([FromForm] int categoryID, [FromForm] int numberOfRecord) { return Ok(new ArrayOfUserRatingRankInfo { UserRatingRankInfo = ctx.RatingRanks .Where(rr => rr.RatedUserID != null && (categoryID == rr.CategoryID @@ -262,7 +241,7 @@ public class RatingController : Controller [HttpPost] [Produces("application/xml")] [Route("RatingWebService.asmx/GetEntityRatedRank")] - public IActionResult GetRank([FromForm] int categoryID, [FromForm] int ratedEntityID) { + public IActionResult GetEntityRatedRank([FromForm] int categoryID, [FromForm] int ratedEntityID) { // TODO: Add a shortcut here for shipwreck lagoon tracks. RatingRank? rank = ctx.RatingRanks.FirstOrDefault(rr => categoryID == rr.CategoryID && rr.RatedEntityID == ratedEntityID); if (rank == null) return Ok(); @@ -272,7 +251,7 @@ public class RatingController : Controller [HttpPost] [Produces("application/xml")] [Route("RatingWebService.asmx/GetRatingForRatedUser")] - public IActionResult GetUserRating([FromForm] int categoryID, [FromForm] string ratedUserID) { + public IActionResult GetRatingForRatedUser([FromForm] int categoryID, [FromForm] string ratedUserID) { Rating? rating = ctx.Ratings.FirstOrDefault( r => categoryID == r.CategoryID && r.RatedEntityID == null && r.RatedUserID == ratedUserID ); @@ -282,7 +261,7 @@ public class RatingController : Controller [HttpPost] [Produces("application/xml")] [Route("RatingWebService.asmx/GetRatingForRatedEntity")] - public IActionResult GetRating([FromForm] int categoryID, [FromForm] int ratedEntityID) { + public IActionResult GetRatingForRatedEntity([FromForm] int categoryID, [FromForm] int ratedEntityID) { Rating? rating = ctx.Ratings.FirstOrDefault( r => categoryID == r.CategoryID && r.RatedEntityID == ratedEntityID && r.RatedUserID == null ); diff --git a/src/Model/Rating.cs b/src/Model/Rating.cs index 3f1ad59..5b3bd62 100644 --- a/src/Model/Rating.cs +++ b/src/Model/Rating.cs @@ -6,14 +6,9 @@ public class Rating { [Key] public int Id { get; set; } - /// Viking that controls this data. - public virtual Viking? Viking { get; set; } - - public virtual RatingRank? Rank { get; set; } - public int VikingId { get; set; } - public int RankId { get; set; } // Done this to prevent it from generating an unnecessary pairs table. + public int RankId { get; set; } public int CategoryID { get; set; } @@ -23,4 +18,9 @@ public class Rating { public int Value { get; set; } public DateTime Date { get; set; } + + + public virtual Viking? Viking { get; set; } + + public virtual RatingRank? Rank { get; set; } } diff --git a/src/Model/RatingRank.cs b/src/Model/RatingRank.cs index 04a759e..13fc5e6 100644 --- a/src/Model/RatingRank.cs +++ b/src/Model/RatingRank.cs @@ -16,8 +16,6 @@ public class RatingRank { /// On a scale of 1-5 public float RatingAverage { get; set; } - public int TotalVotes { get; set; } - public DateTime UpdateDate { get; set; } public virtual ICollection Ratings { get; set; } = null!; diff --git a/src/Schema/RatingRankInfo.cs b/src/Schema/RatingRankInfo.cs index f5e7cb1..65fcd09 100644 --- a/src/Schema/RatingRankInfo.cs +++ b/src/Schema/RatingRankInfo.cs @@ -14,7 +14,7 @@ public class RatingRankInfo { RatedEntityID = rank.RatedEntityID??0; Rank = rank.Rank; RatingAverage = rank.RatingAverage; - TotalVotes = rank.TotalVotes; + TotalVotes = rank.Ratings.Count; UpdateDate = rank.UpdateDate; }