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));
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
            }
        }