From bc6d34d23bb3a87af6eaec74fc069a2e3012f883 Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Fri, 27 Mar 2026 00:56:04 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20=EB=8B=A8=EC=9D=BC=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20=EB=A6=AC=EB=B7=B0=20=EC=9E=91=EC=84=B1=20=EC=8B=9C?= =?UTF-8?q?=20menuLike=20null=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/repository/ReviewRepositoryImpl.kt | 11 +++++------ .../domain/repository/ReviewRepository.kt | 1 + .../usecase/review/WriteReviewUseCase.kt | 1 + .../ReviewRepositoryImplBehaviorSpec.kt | 19 ++++++++++++++----- .../review/WriteReviewUseCaseBehaviorSpec.kt | 3 +++ 5 files changed, 24 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt b/app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt index 441285276..a244a7008 100644 --- a/app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt +++ b/app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt @@ -51,6 +51,7 @@ class ReviewRepositoryImpl @Inject constructor(private val reviewService: Review } override suspend fun writeMenuReview( + menuId: Long, rating: Int, content: String, imageUrls: List, @@ -61,12 +62,10 @@ class ReviewRepositoryImpl @Inject constructor(private val reviewService: Review rating = rating, content = content, imageUrls = imageUrls, - menuLike = likeMenuIdList?.firstOrNull()?.let { - WriteMenuReviewRequest.MenuLike( - menuId = it, - isLike = true, - ) - } + menuLike = WriteMenuReviewRequest.MenuLike( + menuId = menuId, + isLike = likeMenuIdList?.contains(menuId) == true, + ), ) return reviewService.writeMenuReview(request).isSuccess() } diff --git a/app/src/main/java/com/eatssu/android/domain/repository/ReviewRepository.kt b/app/src/main/java/com/eatssu/android/domain/repository/ReviewRepository.kt index a8e301a7f..5c19ac016 100644 --- a/app/src/main/java/com/eatssu/android/domain/repository/ReviewRepository.kt +++ b/app/src/main/java/com/eatssu/android/domain/repository/ReviewRepository.kt @@ -18,6 +18,7 @@ interface ReviewRepository { ): Boolean suspend fun writeMenuReview( + menuId: Long, rating: Int, content: String, imageUrls: List, diff --git a/app/src/main/java/com/eatssu/android/domain/usecase/review/WriteReviewUseCase.kt b/app/src/main/java/com/eatssu/android/domain/usecase/review/WriteReviewUseCase.kt index 3019a62f7..e10952575 100644 --- a/app/src/main/java/com/eatssu/android/domain/usecase/review/WriteReviewUseCase.kt +++ b/app/src/main/java/com/eatssu/android/domain/usecase/review/WriteReviewUseCase.kt @@ -18,6 +18,7 @@ class WriteReviewUseCase @Inject constructor( when (menuType) { MenuType.FIXED -> { return reviewRepository.writeMenuReview( + menuId = itemId, rating = rating, content = content, imageUrls = if (imageUrl != null) listOf(imageUrl) else emptyList(), diff --git a/app/src/test/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImplBehaviorSpec.kt b/app/src/test/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImplBehaviorSpec.kt index 14f503c2b..c72a72a25 100644 --- a/app/src/test/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImplBehaviorSpec.kt +++ b/app/src/test/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImplBehaviorSpec.kt @@ -91,9 +91,10 @@ class ReviewRepositoryImplBehaviorSpec : AppBehaviorSpec({ val requestSlot = slot() coEvery { service.writeMenuReview(capture(requestSlot)) } returns ApiResult.Success(Unit) - then("첫 번째 likeMenuId만 menuLike로 매핑한다") { + then("menuId와 isLike를 menuLike로 전달한다") { runTest { repository.writeMenuReview( + menuId = 9L, rating = 3, content = "메뉴리뷰", imageUrls = listOf("img"), @@ -114,15 +115,19 @@ class ReviewRepositoryImplBehaviorSpec : AppBehaviorSpec({ val requestSlot = slot() coEvery { service.writeMenuReview(capture(requestSlot)) } returns ApiResult.Success(Unit) - then("menuLike=null로 전달한다") { + then("menuLike.isLike=false로 전달한다") { runTest { repository.writeMenuReview( + menuId = 1L, rating = 2, content = "x", imageUrls = emptyList(), likeMenuIdList = null, ) - requestSlot.captured.menuLike shouldBe null + requestSlot.captured.menuLike shouldBe WriteMenuReviewRequest.MenuLike( + menuId = 1L, + isLike = false, + ) } } } @@ -131,16 +136,20 @@ class ReviewRepositoryImplBehaviorSpec : AppBehaviorSpec({ val requestSlot = slot() coEvery { service.writeMenuReview(capture(requestSlot)) } returns ApiResult.Success(Unit) - then("menuLike=null로 전달하고 정상 처리한다") { + then("menuLike.isLike=false로 전달하고 정상 처리한다") { runTest { repository.writeMenuReview( + menuId = 1L, rating = 1, content = "x", imageUrls = emptyList(), likeMenuIdList = emptyList(), ) shouldBe true - requestSlot.captured.menuLike shouldBe null + requestSlot.captured.menuLike shouldBe WriteMenuReviewRequest.MenuLike( + menuId = 1L, + isLike = false, + ) } } } diff --git a/app/src/test/java/com/eatssu/android/domain/usecase/review/WriteReviewUseCaseBehaviorSpec.kt b/app/src/test/java/com/eatssu/android/domain/usecase/review/WriteReviewUseCaseBehaviorSpec.kt index 279f93992..95640d75f 100644 --- a/app/src/test/java/com/eatssu/android/domain/usecase/review/WriteReviewUseCaseBehaviorSpec.kt +++ b/app/src/test/java/com/eatssu/android/domain/usecase/review/WriteReviewUseCaseBehaviorSpec.kt @@ -20,6 +20,7 @@ class WriteReviewUseCaseBehaviorSpec : AppBehaviorSpec({ `when`("FIXED 메뉴에 이미지 없이 작성하면") { coEvery { reviewRepository.writeMenuReview( + menuId = 100L, rating = 5, content = "good", imageUrls = emptyList(), @@ -40,6 +41,7 @@ class WriteReviewUseCaseBehaviorSpec : AppBehaviorSpec({ coVerify(exactly = 1) { reviewRepository.writeMenuReview( + menuId = 100L, rating = 5, content = "good", imageUrls = emptyList(), @@ -53,6 +55,7 @@ class WriteReviewUseCaseBehaviorSpec : AppBehaviorSpec({ `when`("FIXED 메뉴에 이미지가 있으면") { coEvery { reviewRepository.writeMenuReview( + menuId = 100L, rating = 4, content = "", imageUrls = listOf("https://img"), From 126d9bf10df592a101f567724af5263fbc412370 Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Fri, 27 Mar 2026 01:35:08 +0900 Subject: [PATCH 2/4] =?UTF-8?q?chore:=20Hilt=20=EB=B2=84=EC=A0=84=20?= =?UTF-8?q?=EC=97=85=EA=B7=B8=EB=A0=88=EC=9D=B4=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Kotlin 메타데이터 버전 불일치로 빌드 불가 문제를 해결하기 위함 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 65f08204b..b68f997f6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -44,7 +44,7 @@ compressor = "3.0.1" coroutines = "1.7.3" kakao-login = "2.23.0" kakao-talk = "2.23.0" -hilt = "2.50" +hilt = "2.52" androidxHilt = "1.2.0" play-services-base = "18.0.1" firebase-bom = "32.6.0" From f3bfebe77aad73d8713268d585245a0bb20ada40 Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Fri, 27 Mar 2026 01:35:57 +0900 Subject: [PATCH 3/4] =?UTF-8?q?chore:=20@Inject=20=ED=95=84=EB=93=9C?= =?UTF-8?q?=EB=A5=BC=20protected=20=E2=86=92=20public=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=ED=95=98=EC=97=AC=20Hilt=20DI=20=EC=A3=BC?= =?UTF-8?q?=EC=9E=85=20=EC=8B=A4=ED=8C=A8=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/eatssu/android/presentation/base/BaseActivity.kt | 2 +- .../java/com/eatssu/android/presentation/base/BaseFragment.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt b/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt index be58de548..a8dba0928 100644 --- a/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt +++ b/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt @@ -36,7 +36,7 @@ abstract class BaseActivity( ) : AppCompatActivity() { @Inject - protected lateinit var analyticsTracker: AnalyticsTracker + lateinit var analyticsTracker: AnalyticsTracker private var _binding: B? = null val binding get() = _binding!! diff --git a/app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt b/app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt index ddc9da393..b0ef22d67 100644 --- a/app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt +++ b/app/src/main/java/com/eatssu/android/presentation/base/BaseFragment.kt @@ -17,7 +17,7 @@ abstract class BaseFragment( ) : Fragment() { @Inject - protected lateinit var analyticsTracker: AnalyticsTracker + lateinit var analyticsTracker: AnalyticsTracker private var _binding: B? = null val binding get() = _binding!! From 3beb22c9297c89dad29fc5c9080ab6a2a1b86f1f Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Fri, 27 Mar 2026 01:36:35 +0900 Subject: [PATCH 4/4] Update app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../android/data/remote/repository/ReviewRepositoryImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt b/app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt index a244a7008..6e3f7d839 100644 --- a/app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt +++ b/app/src/main/java/com/eatssu/android/data/remote/repository/ReviewRepositoryImpl.kt @@ -64,7 +64,7 @@ class ReviewRepositoryImpl @Inject constructor(private val reviewService: Review imageUrls = imageUrls, menuLike = WriteMenuReviewRequest.MenuLike( menuId = menuId, - isLike = likeMenuIdList?.contains(menuId) == true, + isLike = likeMenuIdList?.contains(menuId) ?: false, ), ) return reviewService.writeMenuReview(request).isSuccess()