Skip to content

Commit

Permalink
Merge pull request #143 from LionnoiL/211-make-rating-connected-to-us…
Browse files Browse the repository at this point in the history
…er-reviews

fixing rating in advertisement
  • Loading branch information
KovalBohdan-0 authored Jun 7, 2024
2 parents 38036a7 + 72dd242 commit 809ac01
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import org.petmarket.review.entity.ReviewType;
import org.petmarket.review.mapper.ReviewMapper;
import org.petmarket.review.repository.ReviewRepository;
import org.petmarket.review.service.ReviewService;
import org.petmarket.translate.TranslateException;
import org.petmarket.users.entity.User;
import org.petmarket.users.entity.UserStatus;
Expand Down Expand Up @@ -88,6 +89,7 @@ public class AdvertisementService {
private final OptionsService optionsService;
private final TransliterateUtils transliterateUtils;
private final EntityManager entityManager;
private final ReviewService reviewService;

public Page<Advertisement> getByCategoryTypeCitiesAttributes(
AdvertisementCategory category, List<Attribute> attributes, List<City> cities,
Expand Down Expand Up @@ -284,6 +286,10 @@ public AdvertisementReviewResponseDto addReview(Long id, AdvertisementReviewRequ
User author = getUserByEmail(authentication.getName());
Advertisement advertisement = getAdvertisement(id);

if (reviewService.existsByAuthorIdAndUserId(author.getId(), advertisement.getAuthor().getId())) {
throw new ItemNotCreatedException(REVIEW_ALREADY_EXISTS);
}

Review review = Review.builder()
.author(author)
.user(advertisement.getAuthor())
Expand Down Expand Up @@ -312,6 +318,7 @@ public Advertisement getAdvertisement(Long id) {
throw new ItemNotFoundException(ADVERTISEMENT_NOT_FOUND);
}

advertisement.setRating(reviewRepository.findAverageRatingByUserID(id).orElse(0));
return advertisement;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Optional;

public interface ReviewRepository extends ReviewRepositoryBasic {

Expand Down Expand Up @@ -46,4 +47,17 @@ public interface ReviewRepository extends ReviewRepositoryBasic {
@Modifying
@Query(value = "DELETE FROM reviews r where r.order_id = :id", nativeQuery = true)
void deleteAllReviewsByOrderId(@Param("id") Long id);

@Query(value = """
SELECT ROUND(CAST(AVG(rewiew_value) AS DECIMAL)) FROM reviews
WHERE user_id = :id
AND review_type = 'BUYER_TO_SELLER' OR review_type = 'SELLER_TO_BUYER'
""", nativeQuery = true)
Optional<Integer> findAverageRatingByUserID(@Param("id") Long id);

@Query(value = """
SELECT r.* FROM reviews r
WHERE r.author_id = :authorId AND r.user_id = :userId
""", nativeQuery = true)
List<Review> findReviewByAuthorIdAndUserId(@Param("authorId") Long authorId, @Param("userId") Long userId);
}
12 changes: 12 additions & 0 deletions src/main/java/org/petmarket/review/service/ReviewService.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,14 @@ public RatingList findRatingsByUser(User user) {
return new RatingList(ratings);
}

public int findAverageRatingByUser(User user) {
if (user == null) {
return 0;
}

return reviewRepository.findAverageRatingByUserID(user.getId()).orElse(0);
}

@Transactional
public void deleteReview(Long id) {
Review review = getReview(id);
Expand Down Expand Up @@ -78,4 +86,8 @@ private Review getReview(Long id) {
throw new ItemNotFoundException(REVIEW_NOT_FOUND);
});
}

public boolean existsByAuthorIdAndUserId(Long authorId, Long userId) {
return !reviewRepository.findReviewByAuthorIdAndUserId(authorId, userId).isEmpty();
}
}
4 changes: 1 addition & 3 deletions src/main/java/org/petmarket/users/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,7 @@ public UserReviewListResponseDto getReviewsByUser(User user, int size) {

return UserReviewListResponseDto.builder()
.reviewsCount(user.getReviewsCount())
.rating((int) Math.ceil((double) (ratingList.getRating1() + ratingList.getRating2() * 2
+ ratingList.getRating3() * 3 + ratingList.getRating4() * 4 + ratingList.getRating5() * 5)
/ user.getReviewsCount()))
.rating(reviewService.findAverageRatingByUser(user))
.ratingList(ratingList)
.reviews(reviewMapper.mapEntityToUserReviewDto(reviews))
.build();
Expand Down
1 change: 1 addition & 0 deletions src/main/java/org/petmarket/utils/MessageUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,5 @@ public final class MessageUtils {
public static final String PARENT_CATEGORY_CANNOT_IN_LIST = "The parent category id cannot be in the list " +
"of identifiers";
public static final String ACCESS_DENIED = "Access denied to %s with id %d";
public static final String REVIEW_ALREADY_EXISTS = "Review of this user already exists";
}

0 comments on commit 809ac01

Please sign in to comment.