From c863cf2d6c4babf34f5474d0578cf134b5c7f9ae Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Sun, 21 Dec 2025 14:49:20 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20v2=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=95=84=EC=9D=B4=EB=94=94=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cafeteria/review/list/ReviewListScreen.kt | 5 ++++ .../review/modify/ModifyReviewScreen.kt | 5 ++++ .../review/write/WriteReviewScreen.kt | 11 +++++++- .../java/com/eatssu/common/enums/ScreenId.kt | 25 ++++++++----------- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt index ed7224819..66d570079 100644 --- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt +++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/list/ReviewListScreen.kt @@ -45,10 +45,12 @@ import com.eatssu.android.presentation.cafeteria.review.list.component.OthersRev import com.eatssu.android.presentation.cafeteria.review.list.component.ReviewItem import com.eatssu.android.presentation.cafeteria.review.list.component.ReviewProgressBar import com.eatssu.android.presentation.cafeteria.review.report.ReportActivity +import com.eatssu.android.presentation.util.TrackScreenViewEvent import com.eatssu.android.presentation.util.showToast import com.eatssu.common.UiEvent import com.eatssu.common.UiState import com.eatssu.common.enums.MenuType +import com.eatssu.common.enums.ScreenId import com.eatssu.design_system.component.DelayedLoadingIndicator import com.eatssu.design_system.component.EatSsuButton import com.eatssu.design_system.component.EatSsuTopBar @@ -75,6 +77,9 @@ fun ReviewListScreen( viewModel.getReview(menuType, id) } + // Screen View 로깅 + TrackScreenViewEvent(ScreenId.REVIEW_V2_VIEW) + val reviewListState by viewModel.uiState.collectAsStateWithLifecycle() val uiEvent by viewModel.uiEvent.collectAsStateWithLifecycle(initialValue = null) diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/modify/ModifyReviewScreen.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/modify/ModifyReviewScreen.kt index 637fb8b98..c1f741a29 100644 --- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/modify/ModifyReviewScreen.kt +++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/modify/ModifyReviewScreen.kt @@ -27,9 +27,11 @@ import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.eatssu.android.domain.model.Review import com.eatssu.android.presentation.cafeteria.review.write.component.MenuLikeButtonItem +import com.eatssu.android.presentation.util.TrackScreenViewEvent import com.eatssu.android.presentation.util.showToast import com.eatssu.common.UiEvent import com.eatssu.common.UiState +import com.eatssu.common.enums.ScreenId import com.eatssu.design_system.component.CloseTopBar import com.eatssu.design_system.component.EatSsuButton import com.eatssu.design_system.component.RatingBarMedium @@ -54,6 +56,9 @@ fun ModifyReviewScreen( val context = LocalContext.current val ui by viewModel.uiState.collectAsStateWithLifecycle() + // Screen View 로깅 + TrackScreenViewEvent(ScreenId.REVIEW_V2_MODIFY) + // 최초 1회 초기화 LaunchedEffect(Unit) { viewModel.init(initialRating, initialContent, menuLikeInfoList) diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewScreen.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewScreen.kt index 5a718f610..d8c5611a5 100644 --- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewScreen.kt +++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewScreen.kt @@ -37,10 +37,13 @@ import coil.compose.AsyncImage import com.eatssu.android.R import com.eatssu.android.domain.model.MenuMini import com.eatssu.android.presentation.cafeteria.review.write.component.MenuLikeButtonItem +import com.eatssu.android.presentation.util.TrackScreenViewEvent import com.eatssu.android.presentation.util.showToast +import com.eatssu.common.EventLogger import com.eatssu.common.UiEvent import com.eatssu.common.UiState import com.eatssu.common.enums.MenuType +import com.eatssu.common.enums.ScreenId import com.eatssu.design_system.component.CloseTopBar import com.eatssu.design_system.component.EatSsuButton import com.eatssu.design_system.component.RatingBarMedium @@ -71,6 +74,9 @@ fun WriteReviewScreen( ActivityResultContracts.GetContent() ) { uri: Uri? -> viewModel.setSelectedImage(uri) } + // Screen View 로깅 + TrackScreenViewEvent(ScreenId.REVIEW_V2_WRITE) + // 처음 진입 시, 메뉴 불러오기: 기본찬(김치, 단무지, 밥) 등을 거르기 위함 LaunchedEffect(menuType, id, menuName) { viewModel.loadMenuList(menuType, id, menuName) @@ -106,7 +112,10 @@ fun WriteReviewScreen( onToggleLike = viewModel::toggleLike, onImageSelect = { galleryLauncher.launch("image/*") }, onImageDelete = { viewModel.setSelectedImage(null) }, - onSubmit = { viewModel.postReview(menuType, id, context) } + onSubmit = { + EventLogger.writeReview() + viewModel.postReview(menuType, id, context) + } ) } diff --git a/core/common/src/main/java/com/eatssu/common/enums/ScreenId.kt b/core/common/src/main/java/com/eatssu/common/enums/ScreenId.kt index ec5626524..027f6c41f 100644 --- a/core/common/src/main/java/com/eatssu/common/enums/ScreenId.kt +++ b/core/common/src/main/java/com/eatssu/common/enums/ScreenId.kt @@ -9,20 +9,17 @@ enum class ScreenId(val value: String) { HOME_MAIN("MNU_001000"), HOME_INFO("MNU_002000"), - REVIEW_V1_VIEW("REV_001000_V1"), - REVIEW_V1_WRITE("REV_001001_V1"), - REVIEW_V1_WRITE_RATE("REV_001002_V1"), - REVIEW_V1_LOGIN_REQUIRED("REV_001003_V1"), // TODO: 필수 로그인이라 사용하지 않음 - REVIEW_V1_MODIFY("REV_001004_V1"), // TODO: Figma에 존재하지 않음 - - REVIEW_V2_1("REV_001000_V2"), - REVIEW_V3_1("REV_001000_V3"), - REVIEW_V2_3("REV_001001"), - REVIEW_V2_4("REV_003001"), - REVIEW_V2_5("REV_001003"), - - // V1과 V2가 같음 - REVIEW_REPORT("REV_002000"), + REVIEW_V2_VIEW("REV_001001_V2"), + REVIEW_V3_VIEW("REV_001000_V3"), // todo 사진 모아보기가 있는 v3 버전 + + REVIEW_V2_WRITE("REV_001001_V2"), + + REVIEW_V2_MODIFY("REV_001002_V2"), + + REVIEW_V3_PHOTO("REV_003000"), //todo 포토리뷰 + REVIEW_V3_PHOTO_DETAIL("REV_003001"), //todo 포토리뷰 + + REVIEW_REPORT("REV_002000"), // V1과 V2가 같음 MAP_MAIN("MAP_001000"), MAP_DETAIL("MAP_001001"), From 649f10dc47a18d7f3b3aa9f79301cf86b5c08f55 Mon Sep 17 00:00:00 2001 From: Yu Jin Date: Sun, 21 Dec 2025 14:56:00 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20v2=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20=EC=99=84=EB=A3=8C=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=A1=9C=EA=B9=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cafeteria/review/write/WriteReviewViewModel.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModel.kt b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModel.kt index 10b524226..bafe3bc12 100644 --- a/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModel.kt +++ b/app/src/main/java/com/eatssu/android/presentation/cafeteria/review/write/WriteReviewViewModel.kt @@ -8,6 +8,7 @@ import com.eatssu.android.domain.model.MenuMini import com.eatssu.android.domain.usecase.menu.GetValidMenusOfMealUseCase import com.eatssu.android.domain.usecase.review.GetImageUrlUseCase import com.eatssu.android.domain.usecase.review.WriteReviewUseCase +import com.eatssu.common.EventLogger import com.eatssu.common.UiEvent import com.eatssu.common.UiState import com.eatssu.common.enums.MenuType @@ -149,6 +150,13 @@ class WriteReviewViewModel @Inject constructor( return@launch } + // 리뷰 작성 완료 로깅 + EventLogger.completeReviewV2( + rating = editing.rating.toLong(), + likes = editing.likedMenuIds.size.toLong(), + photoAttached = editing.selectedImageUri != null + ) + _uiEvent.emit(UiEvent.ShowToast("리뷰가 작성되었습니다.")) _uiEvent.emit(UiEvent.NavigateBack) }