public DomainOperationVo <UserContentRating> Rate(Guid userId, Guid id, decimal scoreDecimal) { UserContentRating rating; IQueryable <UserContentRating> existing = repository.GetRatings(id); bool exists = existing.Any(x => x.UserId == userId); if (exists) { rating = existing.First(x => x.UserId == userId); rating.Score = scoreDecimal; repository.UpdateRating(id, rating); return(new DomainOperationVo <UserContentRating>(DomainActionPerformed.Update, rating)); } else { rating = new UserContentRating { UserId = userId, Score = scoreDecimal }; repository.AddRating(id, rating); return(new DomainOperationVo <UserContentRating>(DomainActionPerformed.Create, rating)); } }
public void AddRating(Guid id, UserContentRating rating) { rating.Id = Guid.NewGuid(); FilterDefinition <UserContent> filter = Builders <UserContent> .Filter.Where(x => x.Id == id); UpdateDefinition <UserContent> add = Builders <UserContent> .Update.AddToSet(c => c.Ratings, rating); Context.AddCommand(() => DbSet.UpdateOneAsync(filter, add)); }
public void UpdateRating(Guid id, UserContentRating rating) { FilterDefinition <UserContent> filter = Builders <UserContent> .Filter.And( Builders <UserContent> .Filter.Eq(x => x.Id, id), Builders <UserContent> .Filter.ElemMatch(x => x.Ratings, x => x.UserId == rating.UserId)); UpdateDefinition <UserContent> update = Builders <UserContent> .Update .Set(c => c.Ratings[-1].Score, rating.Score); Context.AddCommand(() => DbSet.UpdateOneAsync(filter, update)); }
public OperationResultVo GetForDetails(Guid currentUserId, Guid id) { try { UserContent existing = userContentDomainService.GetById(id); ComicStripViewModel vm = mapper.Map <ComicStripViewModel>(existing); UserContentRating currentUserRate = existing.Ratings.FirstOrDefault(x => x.UserId == currentUserId); if (currentUserRate != null) { vm.CurrentUserRating = currentUserRate.Score; } int ratingCounts = existing.Ratings.Count > 0 ? existing.Ratings.Count : 1; vm.RatingCount = existing.Ratings.Count; vm.TotalRating = existing.Ratings.Sum(x => x.Score) / ratingCounts; vm.LikeCount = vm.Likes.Count; vm.CommentCount = vm.Comments.Count; SetAuthorDetails(vm); LoadAuthenticatedData(currentUserId, vm); SetImagesToShow(vm, false); return(new OperationResultVo <ComicStripViewModel>(vm)); } catch (Exception ex) { return(new OperationResultVo(ex.Message)); } }