-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
updated top adv algorithm and made listeners for update rating and to…
…p rating
- Loading branch information
1 parent
3c16b71
commit 0d07d7d
Showing
7 changed files
with
131 additions
and
79 deletions.
There are no files selected for viewing
26 changes: 11 additions & 15 deletions
26
src/main/java/org/petmarket/advertisements/advertisement/listener/AdvertisementListener.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,17 @@ | ||
package org.petmarket.advertisements.advertisement.listener; | ||
|
||
import jakarta.persistence.PostPersist; | ||
import jakarta.persistence.PostUpdate; | ||
import jakarta.persistence.PrePersist; | ||
import jakarta.persistence.PreUpdate; | ||
import jakarta.transaction.Transactional; | ||
import org.petmarket.advertisements.advertisement.entity.Advertisement; | ||
import org.petmarket.advertisements.advertisement.service.AdvertisementService; | ||
import org.springframework.context.annotation.Lazy; | ||
|
||
import static org.petmarket.advertisements.advertisement.service.AdvertisementService.calculateRating; | ||
|
||
@Transactional | ||
public class AdvertisementListener { | ||
// private final AdvertisementService advertisementService; | ||
// | ||
// public AdvertisementListener(@Lazy AdvertisementService advertisementService) { | ||
// this.advertisementService = advertisementService; | ||
// } | ||
// | ||
// @PostPersist | ||
// @PostUpdate | ||
// public void updateTopRating(Advertisement advertisement) { | ||
// advertisementService.updateTopRating(advertisement); | ||
// } | ||
@PrePersist | ||
@PreUpdate | ||
public void updateTopRating(Advertisement advertisement) { | ||
advertisement.setTopRating(calculateRating(advertisement)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package org.petmarket.review.dto; | ||
|
||
public interface AverageReview { | ||
Integer getCount(); | ||
|
||
Integer getSum(); | ||
} |
63 changes: 52 additions & 11 deletions
63
src/main/java/org/petmarket/review/listener/ReviewListener.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,63 @@ | ||
package org.petmarket.review.listener; | ||
|
||
import jakarta.persistence.*; | ||
import org.petmarket.advertisements.advertisement.service.AdvertisementService; | ||
import org.petmarket.advertisements.advertisement.entity.Advertisement; | ||
import org.petmarket.advertisements.advertisement.repository.AdvertisementRepository; | ||
import org.petmarket.review.dto.AverageReview; | ||
import org.petmarket.review.entity.Review; | ||
import org.springframework.context.annotation.Lazy; | ||
import org.petmarket.review.repository.ReviewRepository; | ||
import org.petmarket.users.entity.User; | ||
import org.petmarket.users.repository.UserRepository; | ||
import org.petmarket.utils.BeanUtils; | ||
|
||
public class ReviewListener { | ||
private final AdvertisementService advertisementService; | ||
@PrePersist | ||
public void updateRatingForNewReview(Review review) { | ||
ReviewRepository reviewRepository = BeanUtils.getBean(ReviewRepository.class); | ||
AdvertisementRepository advertisementRepository = BeanUtils.getBean(AdvertisementRepository.class); | ||
UserRepository userRepository = BeanUtils.getBean(UserRepository.class); | ||
|
||
public ReviewListener(@Lazy AdvertisementService advertisementService) { | ||
this.advertisementService = advertisementService; | ||
Advertisement advertisement = review.getAdvertisement(); | ||
User user = review.getUser(); | ||
AverageReview advertisementAverageReview = reviewRepository | ||
.findAverageReviewByAdvertisementId(advertisement.getId()); | ||
AverageReview userAverageReview = reviewRepository | ||
.findAverageReviewByUserId(review.getUser().getId()); | ||
advertisement.setRating((advertisementAverageReview.getSum() + review.getValue()) | ||
/ (advertisementAverageReview.getCount() + 1)); | ||
user.setRating((userAverageReview.getSum() + review.getValue()) / (userAverageReview.getCount() + 1)); | ||
|
||
advertisementRepository.save(advertisement); | ||
userRepository.save(user); | ||
} | ||
|
||
@PostPersist | ||
@PostUpdate | ||
@PostRemove | ||
public void updateRating(Review review) { | ||
advertisementService.updateRating(review); | ||
advertisementService.updateTopRating(review.getAdvertisement()); | ||
@PreRemove | ||
public void updateRatingForReviewRemoval(Review review) { | ||
ReviewRepository reviewRepository = BeanUtils.getBean(ReviewRepository.class); | ||
AdvertisementRepository advertisementRepository = BeanUtils.getBean(AdvertisementRepository.class); | ||
UserRepository userRepository = BeanUtils.getBean(UserRepository.class); | ||
|
||
Advertisement advertisement = review.getAdvertisement(); | ||
User user = review.getUser(); | ||
AverageReview advertisementAverageReview = reviewRepository | ||
.findAverageReviewByAdvertisementId(advertisement.getId()); | ||
AverageReview userAverageReview = reviewRepository | ||
.findAverageReviewByUserId(review.getUser().getId()); | ||
|
||
if (advertisementAverageReview.getCount() == 1) { | ||
advertisement.setRating(0); | ||
} else { | ||
advertisement.setRating((advertisementAverageReview.getSum() - review.getValue()) | ||
/ (advertisementAverageReview.getCount() - 1)); | ||
} | ||
|
||
if (userAverageReview.getCount() == 1) { | ||
user.setRating(0); | ||
} else { | ||
user.setRating((userAverageReview.getSum() - review.getValue()) / (userAverageReview.getCount() - 1)); | ||
} | ||
|
||
advertisementRepository.save(advertisement); | ||
userRepository.save(user); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package org.petmarket.utils; | ||
|
||
import org.springframework.beans.BeansException; | ||
import org.springframework.context.ApplicationContext; | ||
import org.springframework.context.ApplicationContextAware; | ||
import org.springframework.stereotype.Component; | ||
|
||
@Component | ||
public class BeanUtils implements ApplicationContextAware { | ||
private static ApplicationContext applicationContext; | ||
|
||
@Override | ||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { | ||
BeanUtils.applicationContext = applicationContext; | ||
} | ||
|
||
public static <T> T getBean(Class<T> clazz) { | ||
return applicationContext.getBean(clazz); | ||
} | ||
} |