Skip to content

Commit eb39c42

Browse files
committed
refactor: 리뷰 작성 시 user rating 업데이트 및 유저 프로필 조회 수정
1 parent 0da7350 commit eb39c42

6 files changed

Lines changed: 45 additions & 8 deletions

File tree

src/main/kotlin/gat_be/dev/domain/review/facade/ReviewCreateFacade.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ import gat_be.dev.domain.review.service.ReviewService
77
import gat_be.dev.domain.team.entity.Team
88
import gat_be.dev.domain.team.entity.TeamMember
99
import gat_be.dev.domain.team.service.TeamService
10+
import gat_be.dev.domain.user.service.UserService
1011
import jakarta.transaction.Transactional
1112
import org.springframework.stereotype.Service
1213

1314
@Service
1415
class ReviewCreateFacade(
1516
private val reviewService: ReviewService,
16-
private val teamService: TeamService
17+
private val teamService: TeamService,
18+
private val userService: UserService
1719
) {
1820
// 리뷰 작성하기
1921
@Transactional
@@ -27,6 +29,10 @@ class ReviewCreateFacade(
2729
reviewService.validateDuplicateReview(reviewer.userId, reviewee.teamMemberId)
2830

2931
reviewService.createReview(userId, request)
32+
33+
val reviewListForReviewee = reviewService.findReviewListByTeamMemberId(reviewee.teamMemberId)
34+
val newRating = reviewListForReviewee.map { it.rating }.average()
35+
userService.updateRating(reviewee.userId, newRating)
3036
}
3137

3238
private fun validateIsTeamDone(targetTeam: Team) {

src/main/kotlin/gat_be/dev/domain/review/repository/ReviewRepository.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,16 @@ import org.springframework.data.jpa.repository.Query
99
import org.springframework.data.repository.query.Param
1010

1111
interface ReviewRepository: JpaRepository<Review, Long> {
12-
@Query("SELECT r FROM Review r JOIN FETCH r.categories WHERE r.teamMemberId = :teamMemberId")
12+
@Query("SELECT r FROM Review r " +
13+
"JOIN FETCH r.categories " +
14+
"WHERE r.teamMemberId = :teamMemberId")
1315
fun findAllWithCategoriesByTeamMemberId(@Param("teamMemberId") teamMemberId: Long): List<Review>
1416

17+
@Query("SELECT r FROM Review r " +
18+
"JOIN FETCH r.categories " +
19+
"WHERE r.teamMemberId IN :teamMemberIdList")
20+
fun findAllWithCategoriesByTeamMemberIdList(@Param("teamMemberIdList") teamMemberIdList: List<Long>): List<Review>
21+
1522
@Modifying
1623
@Query("DELETE FROM Review r " +
1724
"WHERE r.teamMemberId = :teamMemberId")

src/main/kotlin/gat_be/dev/domain/review/service/ReviewService.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class ReviewService(
7373

7474
reviewCategoryRepository.deleteAllByReviewId(review.reviewId)
7575
reviewRepository.deleteByReviewId(review.reviewId)
76+
77+
// TODO: reviewee rating 재계산
7678
}
7779

7880
fun validateDuplicateReview(userId: Long, teamMemberId: Long) {
@@ -82,9 +84,9 @@ class ReviewService(
8284
}
8385

8486
// 유저의 리뷰 카테고리별 개수 집계
85-
fun getUserReviewDetails(user: User): UserReviewDetails {
87+
fun getUserReviewDetails(user: User, teamMemberIdList: List<Long>): UserReviewDetails {
8688
// 1. 사용자 리뷰 목록 조회
87-
val reviewList = reviewRepository.findAllWithCategoriesByTeamMemberId(user.userId)
89+
val reviewList = findReviewListByTeamMemberIdList(teamMemberIdList)
8890

8991
// 2. 카테고리별 점수 리스트 구성
9092
val categoryScoreMap = mutableMapOf<Category, MutableList<Int>>()
@@ -115,6 +117,14 @@ class ReviewService(
115117
)
116118
}
117119

120+
fun findReviewListByTeamMemberIdList(teamMemberIdList: List<Long>): List<Review> {
121+
return reviewRepository.findAllWithCategoriesByTeamMemberIdList(teamMemberIdList)
122+
}
123+
124+
fun findReviewListByTeamMemberId(teamMemberId: Long): List<Review> {
125+
return reviewRepository.findAllWithCategoriesByTeamMemberId(teamMemberId)
126+
}
127+
118128
// 유저에 대해 작성된 리뷰 삭제
119129
fun deleteAllByUserId(userId: Long) {
120130
reviewCategoryRepository.deleteAllByTeamMemberId(userId)
@@ -125,7 +135,7 @@ class ReviewService(
125135
@Transactional
126136
fun getReviewInfoList(teamMemberIdList: List<Long>, sortBy: String, order: String): List<ReviewInfo> {
127137
val sortOrder = getSort(sortBy, order)
128-
return findReviewListByTeamMemberId(teamMemberIdList, sortOrder)
138+
return findReviewListByTeamMemberIdList(teamMemberIdList, sortOrder)
129139
}
130140

131141
private fun getSort(sort: String, order: String): Sort {
@@ -142,7 +152,7 @@ class ReviewService(
142152
}
143153
}
144154

145-
private fun findReviewListByTeamMemberId(teamMemberIdList: List<Long>, sortOrder: Sort): List<ReviewInfo> {
155+
private fun findReviewListByTeamMemberIdList(teamMemberIdList: List<Long>, sortOrder: Sort): List<ReviewInfo> {
146156
return reviewRepository.findReviewListByTeamMemberIdList(teamMemberIdList, sortOrder)
147157
}
148158

src/main/kotlin/gat_be/dev/domain/user/entity/User.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,8 @@ class User(
9797
this.fcmToken = null
9898
}
9999

100+
fun updateRating(rating: Double) {
101+
this.rating = rating
102+
}
103+
100104
}

src/main/kotlin/gat_be/dev/domain/user/facade/UserProfileFacade.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package gat_be.dev.domain.user.facade
22

33
import gat_be.dev.domain.review.service.ReviewService
4+
import gat_be.dev.domain.team.service.TeamService
45
import gat_be.dev.domain.user.dto.response.UserProfileResponse
56
import gat_be.dev.domain.user.service.UserService
67
import gat_be.dev.domain.user.service.UserTechStackService
@@ -10,13 +11,16 @@ import org.springframework.stereotype.Service
1011
class UserProfileFacade(
1112
private val userService: UserService,
1213
private val userTechStackService: UserTechStackService,
13-
private val reviewService: ReviewService
14+
private val reviewService: ReviewService,
15+
private val teamService: TeamService
1416
) {
1517

1618
fun getUserProfile(userId: Long): UserProfileResponse {
1719
val user = userService.findUserByUserId(userId)
1820
val techStack = userTechStackService.findUserTechStackListByUser(user)
19-
val reviewDetails = reviewService.getUserReviewDetails(user)
21+
22+
val teamMemberIdList = teamService.findTeamMemberIdListByUserId(userId)
23+
val reviewDetails = reviewService.getUserReviewDetails(user, teamMemberIdList)
2024

2125
return UserProfileResponse.from(user, techStack, reviewDetails)
2226
}

src/main/kotlin/gat_be/dev/domain/user/service/UserService.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,10 @@ class UserService(
124124
fun updatePassword(user: User, encryptedPassword: String) {
125125
user.updatePassword(encryptedPassword)
126126
}
127+
128+
fun updateRating(userId: Long, newRating: Double) {
129+
val user = findUserByUserId(userId)
130+
user.updateRating(newRating)
131+
}
132+
127133
}

0 commit comments

Comments
 (0)