public static HaikuRating MapHaikuRateDtoToHaikuRating(HaikuRatingDto dto) { return new HaikuRating() { Value = dto.Rating, DateCreated = DateTime.Now }; }
public async Task<HaikuRatedDto> RateAsync(int id, HaikuRatingDto dto) { var haiku = await this.unitOfWork.HaikusRepository.GetByIdAsync(id).ConfigureAwait(false); var rating = Mapper.MapHaikuRateDtoToHaikuRating(dto); haiku.Ratings.Add(rating); // updating haiku rating var oldHaikuRating = haiku.Rating; haiku.RatingsCount++; haiku.RatingsSum += rating.Value; haiku.Rating = ((double) haiku.RatingsSum) / haiku.RatingsCount; // updating user rating var user = await this.unitOfWork.UsersRepository.GetByIdAsync(haiku.UserId); if (oldHaikuRating == null) { user.HaikusRatingSum += haiku.Rating.Value; user.HaikusCount++; } else { user.HaikusRatingSum = user.HaikusRatingSum- oldHaikuRating.Value + haiku.Rating.Value; } user.Rating = user.HaikusRatingSum / user.HaikusCount; await this.unitOfWork.CommitAsync().ConfigureAwait(false); return new HaikuRatedDto() { HaikuRating = haiku.Rating.Value }; }