public async Task <Rating> SetStarAsync(CmsUser user, string entityType, string entityId, short starCount) { var currentUserRating = await RatingRepository.GetCurrentUserRatingAsync(entityType, entityId, user.Id); if (currentUserRating != null) { currentUserRating.SetStarCount(starCount); return(await RatingRepository.UpdateAsync(currentUserRating)); } if (!await RatingDefinitionStore.IsDefinedAsync(entityType)) { throw new EntityCantHaveRatingException(entityType); } return(await RatingRepository.InsertAsync( new Rating( GuidGenerator.Create(), entityType, entityId, starCount, user.Id, CurrentTenant.Id ) )); }
public virtual async Task <RatingDto> CreateAsync(string entityType, string entityId, CreateUpdateRatingInput input) { var userId = CurrentUser.GetId(); var user = await CmsUserLookupService.GetByIdAsync(userId); var currentUserRating = await RatingRepository.GetCurrentUserRatingAsync(entityType, entityId, userId); if (currentUserRating != null) { currentUserRating.SetStarCount(input.StarCount); var updatedRating = await RatingRepository.UpdateAsync(currentUserRating); return(ObjectMapper.Map <Rating, RatingDto>(updatedRating)); } var rating = await RatingRepository.InsertAsync( new Rating( GuidGenerator.Create(), entityType, entityId, input.StarCount, user.Id, CurrentTenant.Id ) ); return(ObjectMapper.Map <Rating, RatingDto>(rating)); }
public virtual async Task <RatingDto> GetCurrentUserRatingAsync(string entityType, string entityId) { var currentUserId = CurrentUser.GetId(); var rating = await RatingRepository.GetCurrentUserRatingAsync(entityType, entityId, currentUserId); return(ObjectMapper.Map <Rating, RatingDto>(rating)); }
public virtual async Task DeleteAsync(string entityType, string entityId) { var rating = await RatingRepository.GetCurrentUserRatingAsync(entityType, entityId, CurrentUser.GetId()); if (rating.CreatorId != CurrentUser.GetId()) { throw new AbpAuthorizationException(); } await RatingRepository.DeleteAsync(rating.Id); }
public virtual async Task <List <RatingWithStarCountDto> > GetGroupedStarCountsAsync(string entityType, string entityId) { var ratings = await RatingRepository.GetGroupedStarCountsAsync(entityType, entityId); var userRatingOrNull = CurrentUser.IsAuthenticated ? await RatingRepository.GetCurrentUserRatingAsync(entityType, entityId, CurrentUser.GetId()) : null; var ratingWithStarCountDto = new List <RatingWithStarCountDto>(); foreach (var rating in ratings) { ratingWithStarCountDto.Add( new RatingWithStarCountDto { StarCount = rating.StarCount, Count = rating.Count, IsSelectedByCurrentUser = userRatingOrNull != null && userRatingOrNull.StarCount == rating.StarCount }); } return(ratingWithStarCountDto); }