Skip to content

[Feat] Home additional functions#160

Merged
nahy-512 merged 6 commits into
developfrom
feat/#144-home-additional-functions
Jan 21, 2026
Merged

[Feat] Home additional functions#160
nahy-512 merged 6 commits into
developfrom
feat/#144-home-additional-functions

Conversation

@kimjw2003

@kimjw2003 kimjw2003 commented Jan 21, 2026

Copy link
Copy Markdown
Contributor

📮 관련 이슈

📌 작업 내용

  • 바텀시트 추가
  • 웹뷰 추가
  • 탐색으로 이동 추가
  • 각 화면으로의 이동 추가

📸 스크린샷

스크린샷
스크린샷 2026-01-21 오후 11 42 22 스크린샷 2026-01-21 오후 11 42 31 스크린샷 2026-01-21 오후 11 43 10

Summary by CodeRabbit

릴리스 노트

  • 신규 기능

    • 저장된 콘텐츠 클릭 시 스트리밍 서비스 목록(하단 시트) 확인 및 서비스 이동 가능
    • 홈 화면에서 둘러보기(Explore) 섹션으로 바로 이동 가능
  • 스타일

    • OTT 명칭 업데이트: 쿠팡 → 쿠팡플레이, 웨이브 → 웨이브(표기 통일)
    • 긴 제목 자동 잘림 처리(ellipsis)
    • 하단 시트 배경 및 레이아웃·패딩 조정으로 디자인 개선

✏️ Tip: You can customize this high-level summary in your review settings.

@kimjw2003 kimjw2003 self-assigned this Jan 21, 2026
@kimjw2003 kimjw2003 requested a review from a team as a code owner January 21, 2026 14:43
@kimjw2003 kimjw2003 added 🔖 API feat - API 연동 Feat ✨ 신규 기능을 추가하거나 기존 기능의 동작, 정책을 변경 labels Jan 21, 2026
@coderabbitai

coderabbitai Bot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

콘텐츠별 OTT 목록 조회 흐름과 관련 모델·API·매퍼·저장소·뷰모델·UI(바텀시트)를 추가/연동하고, 일부 OTT 열거형 항목명을 변경했습니다.

Changes

Cohort / File(s) 변경 요약
API
app/src/main/java/com/flint/data/api/ContentApi.kt
getOttListPerContent(contentId: String) 엔드포인트 추가 (@GET("/api/v1/contents/ott/{contentId}"))
DTOs
app/src/main/java/com/flint/data/dto/ott/response/OttListResponseDto.kt, app/src/main/java/com/flint/data/dto/auth/response/SocialVerifyResponseDto.kt
OTT 응답 DTO(OttListResponseDto, OttItemResponseDto) 추가; SocialVerifyResponseDtouserNamenickName으로 필드명 변경
Domain 모델 & 타입
app/src/main/java/com/flint/domain/model/ott/OttListModel.kt, app/src/main/java/com/flint/domain/type/OttType.kt, .../auth/SocialVerifyModel.kt, .../content/*.kt
OttListModel, OttModel 추가; OttTypeWaveWavve, CoupangCoupangPlay로 enum명 변경; 샘플 데이터 반영
매퍼
app/src/main/java/com/flint/domain/mapper/ott/OttMapper.kt, app/src/main/java/com/flint/domain/mapper/auth/SocialVerifyMapper.kt
DTO→도메인 매핑 함수 추가/수정 (OttListResponseDto/OttItemResponseDto → OttListModel/OttModel, SocialVerify에서 nickName 매핑)
저장소
app/src/main/java/com/flint/domain/repository/ContentRepository.kt, app/src/main/java/com/flint/domain/repository/AuthRepository.kt
getOttListPerContent(contentId: String) 추가; 소셜 검증 저장 시 nickName 저장 사용
ViewModel / SideEffect
app/src/main/java/com/flint/presentation/home/HomeViewModel.kt, .../home/sideeffect/HomeSideEffect.kt
HomeViewModel에 homeSideEffect(SharedFlow) 추가 및 getOttListPerContent API 호출/사이드이펙트(ShowOttListBottomSheet(ottListModel)) 발행; ShowOttListBottomSheet가 데이터 클래스로 변경
홈 화면 / 내비게이션
app/src/main/java/com/flint/presentation/home/HomeScreen.kt, .../navigation/HomeNavigation.kt, app/src/main/java/com/flint/presentation/main/MainNavHost.kt
HomeRoute/HomeScreen에 navigateToExplore 파라미터 추가하여 Explore로 이동 경로 연결; HomeScreen에 OTT 바텀시트 표시 로직 추가(시트 상태, URI launcher 등)
UI 컴포넌트 (바텀시트 / 리스트 아이템 / 리스트뷰)
app/src/main/java/com/flint/core/designsystem/component/bottomsheet/FlintBasicBottomSheet.kt, .../OttListBottomSheet.kt, .../listItem/OttShortCutListItem.kt, .../listItem/SavedContentItem.kt, .../listView/OttHorizontalList.kt
FlintBasicBottomSheet에 containerColor 추가; OttListBottomSheet 파라미터 타입 List<OttType>OttListModel, 콜백 onMoveClick(String)로 변경; OttShortCutListItem 파라미터 OttTypeOttModel; SavedContentItem에 타이틀 텍스트 잘림(Ellipsis) 적용; 몇몇 프리뷰/샘플 데이터에서 enum명 반영
기타 프리뷰/샘플
app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt, app/src/main/java/com/flint/presentation/explore/ExploreScreen.kt, app/src/main/java/com/flint/presentation/onboarding/component/OnboardingOttItem.kt
샘플/프리뷰 데이터에서 OTT enum명 변경 반영 (CoupangPlay, Wavve 등)

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant HomeScreen as "Home Screen"
    participant ViewModel as "HomeViewModel"
    participant Repository as "ContentRepository"
    participant API as "ContentApi"
    participant BottomSheet as "OttListBottomSheet"

    User->>HomeScreen: 저장된 콘텐츠 클릭
    HomeScreen->>ViewModel: getOttListPerContent(contentId)
    ViewModel->>Repository: getOttListPerContent(contentId)
    Repository->>API: getOttListPerContent(contentId)
    API-->>Repository: BaseResponse<OttListResponseDto>
    Repository->>Repository: toModel() 변환 (OttListResponseDto → OttListModel)
    Repository-->>ViewModel: Result<OttListModel>
    ViewModel->>ViewModel: homeSideEffect.emit(ShowOttListBottomSheet(ottListModel))
    HomeScreen->>HomeScreen: sideEffect 수신
    HomeScreen->>BottomSheet: OttListModel 전달하여 표시
    BottomSheet->>User: OTT 목록 표시 / 이동 요청
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Suggested labels

📱 UI

Suggested reviewers

  • nahy-512
  • giovannijunseokim

Poem

🐰 새 기능 도착했어요, 폴짝!
바텀시트 속 OTT들이 줄지어,
API부터 시트까지 한 바퀴 빙글,
토끼가 응원해요: 뛰어보자! 🥕✨

🚥 Pre-merge checks | ✅ 3 | ❌ 2
❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning PR에는 이슈 범위를 벗어난 변경사항들이 포함되어 있습니다: OttType 열거형 상수 이름 변경(Wave→Wavve, Coupang→CoupangPlay)과 SocialVerifyResponseModel의 userName을 nickName으로 변경하는 것은 이슈 #144의 요구사항과 무관합니다. OttType 이름 변경과 SocialVerifyResponseModel 필드 변경은 별도의 이슈로 분리하거나, 이슈 #144의 범위에 포함시키기 위해 명시적으로 문서화해야 합니다.
Docstring Coverage ⚠️ Warning Docstring coverage is 15.38% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 PR의 주요 변경사항을 적절히 요약하고 있으며, Home 화면의 추가 기능 구현이라는 핵심을 명확하게 전달합니다.
Description check ✅ Passed PR 설명이 저장소 템플릿을 따르고 있으며, 관련 이슈, 작업 내용, 스크린샷을 포함하고 있습니다.
Linked Issues check ✅ Passed PR의 모든 주요 코드 변경사항이 이슈 #144의 요구사항을 충족합니다: 바텀시트 추가(OttListBottomSheet), 탐색 네비게이션 추가, 각 화면으로의 이동 추가가 구현됨.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
app/src/main/java/com/flint/core/designsystem/component/listItem/OttShortCutListItem.kt (1)

33-55: OttType.valueOf로 인한 런타임 크래시 가능성

서버에서 내려오는 ottModel.name이 enum 상수명과 다르면 IllegalArgumentException으로 즉시 크래시가 발생합니다. 신규 OTT 추가 또는 표기 변경에도 취약합니다. OttModellogoUrlname을 직접 사용하도록 변경하세요.

✅ 안전한 표시 방식
         Image(
-            painter = painterResource(OttType.valueOf(ottModel.name).iconRes),
+            painter = rememberAsyncImagePainter(ottModel.logoUrl),
             contentDescription = null,
             modifier = Modifier.size(44.dp),
         )

         Text(
-            text = OttType.valueOf(ottModel.name).ottName,
+            text = ottModel.name,
             style = FlintTheme.typography.body1Sb16,
             color = FlintTheme.colors.white,
         )
🤖 Fix all issues with AI agents
In
`@app/src/main/java/com/flint/core/designsystem/component/bottomsheet/OttListBottomSheet.kt`:
- Line 16: Remove the unused import of OttType from OttListBottomSheet.kt:
locate the import line "import com.flint.domain.type.OttType" and delete it so
the file no longer contains an unused OttType import; run a quick compile or
lint to ensure no other references to OttType remain.

In `@app/src/main/java/com/flint/domain/repository/AuthRepository.kt`:
- Around line 22-26: In socialVerify, avoid saving the literal "null" by
handling null nickName before calling preferencesManager.saveString; check the
SocialVerifyResponseModel result.nickName and either save a safe fallback (e.g.,
empty string) or skip saving when null (e.g., if (result.nickName != null)
saveString(...)), and ensure the null-handling aligns with the domain mapping in
toModel so stored USER_NAME never becomes the string "null".

In `@app/src/main/java/com/flint/domain/type/OttType.kt`:
- Around line 10-13: The OttType enum was renamed entries (e.g., Wavve,
CoupangPlay) but ContentMapper uses OttType.valueOf(ottSimple.ottName), which
will fail if the backend still sends "Wave" or "Coupang"; update the enum
(OttType) to include `@SerialName` annotations for legacy names (e.g.,
`@SerialName`("Wave") Wavve, `@SerialName`("Coupang") CoupangPlay) or add a safe
parsing helper (e.g., a method parseOtt(String) in OttType that maps legacy
strings to current enum values and use that from ContentMapper instead of
valueOf) so incoming API strings remain backward-compatible.

In `@app/src/main/java/com/flint/presentation/home/HomeScreen.kt`:
- Around line 89-91: Remove the outdated TODO comment in HomeScreen.kt where
navigateToExplore is invoked: locate the navigateToExplore lambda/parameter and
delete the line containing "// TODO navigate to explore" since
navigateToExplore() is already implemented; ensure no other TODOs remain in that
block and keep the call navigateToExplore() intact.
🧹 Nitpick comments (4)
app/src/main/java/com/flint/presentation/home/HomeViewModel.kt (1)

96-104: OTT 목록 로딩 중 사용자 피드백 부재 가능성

현재 구현에서는 네트워크 요청 중 로딩 상태를 UI에 전달하지 않습니다. 네트워크 지연 시 사용자가 버튼을 여러 번 탭할 수 있습니다.

로딩 상태 추가 또는 중복 요청 방지를 고려해 보세요.

♻️ 중복 요청 방지를 위한 예시
private var isLoadingOtt = false

fun getOttListPerContent(contentId: String) = viewModelScope.launch {
    if (isLoadingOtt) return@launch
    isLoadingOtt = true
    contentRepository.getOttListPerContent(contentId)
        .onSuccess {
            _homeSideEffect.emit(HomeSideEffect.ShowOttListBottomSheet(it))
        }
        .onFailure {
            Log.d("Logd", it.message.toString())
        }
    isLoadingOtt = false
}
app/src/main/java/com/flint/presentation/home/HomeScreen.kt (1)

113-114: URL 유효성 검사 고려

uriHandler.openUri(url) 호출 시 잘못된 URL 형식이면 ActivityNotFoundException이 발생할 수 있습니다. 방어적 처리를 고려해 보세요.

♻️ 예외 처리 예시
             onMoveClick = { url ->
-                uriHandler.openUri(url)
+                try {
+                    uriHandler.openUri(url)
+                } catch (e: Exception) {
+                    // 잘못된 URL 형식 처리
+                }
             },
app/src/main/java/com/flint/core/designsystem/component/bottomsheet/OttListBottomSheet.kt (2)

35-42: items() 함수 사용 개선 제안

인덱스 기반 접근 대신 items() 확장 함수를 사용하면 코드가 더 간결해집니다.

♻️ 개선 제안
-            items(ottList.otts.size) {
+            items(ottList.otts) { ottModel ->
                 OttShortCutListItem(
-                    ottModel = ottList.otts[it],
+                    ottModel = ottModel,
                     onMoveClick = {
-                        onMoveClick(ottList.otts[it].contentUrl)
+                        onMoveClick(ottModel.contentUrl)
                         onDismiss()
                     },
                 )
             }

51-63: Preview에서 빈 목록 사용

OttListModel()은 빈 목록을 생성하므로 Preview에서 실제 아이템이 표시되지 않습니다. 시각적 확인을 위해 샘플 데이터 추가를 고려해 보세요.

import com.flint.core.designsystem.component.listItem.OttShortCutListItem
import com.flint.core.designsystem.theme.FlintTheme
import com.flint.domain.model.ott.OttListModel
import com.flint.domain.type.OttType

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

rg -n "OttType" "app/src/main/java/com/flint/core/designsystem/component/bottomsheet/OttListBottomSheet.kt"

Repository: imflint/Flint-Android

Length of output: 104


사용되지 않는 import 제거 필요

OttType import가 파일에서 사용되지 않습니다. 16번 라인의 import 문을 제거해주세요.

🤖 Prompt for AI Agents
In
`@app/src/main/java/com/flint/core/designsystem/component/bottomsheet/OttListBottomSheet.kt`
at line 16, Remove the unused import of OttType from OttListBottomSheet.kt:
locate the import line "import com.flint.domain.type.OttType" and delete it so
the file no longer contains an unused OttType import; run a quick compile or
lint to ensure no other references to OttType remain.

Comment on lines 22 to 26
suspend fun socialVerify(model: SocialVerifyRequestModel): Result<SocialVerifyResponseModel> {
val result = api.socialVerify(model.toDto()).data.toModel()
preferencesManager.saveString(USER_NAME, result.userName.toString())
preferencesManager.saveString(USER_NAME, result.nickName.toString())

return suspendRunCatching { result }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

null 닉네임이 "null" 문자열로 저장될 수 있음

nickName이 null이면 "null"이 저장되어 사용자 이름이 잘못 표시될 수 있습니다. 널 처리 정책을 명확히 하고 저장 값을 안전하게 처리하세요.

🔧 수정 제안
-        preferencesManager.saveString(USER_NAME, result.nickName.toString())
+        preferencesManager.saveString(USER_NAME, result.nickName.orEmpty())
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
suspend fun socialVerify(model: SocialVerifyRequestModel): Result<SocialVerifyResponseModel> {
val result = api.socialVerify(model.toDto()).data.toModel()
preferencesManager.saveString(USER_NAME, result.userName.toString())
preferencesManager.saveString(USER_NAME, result.nickName.toString())
return suspendRunCatching { result }
suspend fun socialVerify(model: SocialVerifyRequestModel): Result<SocialVerifyResponseModel> {
val result = api.socialVerify(model.toDto()).data.toModel()
preferencesManager.saveString(USER_NAME, result.nickName.orEmpty())
return suspendRunCatching { result }
🤖 Prompt for AI Agents
In `@app/src/main/java/com/flint/domain/repository/AuthRepository.kt` around lines
22 - 26, In socialVerify, avoid saving the literal "null" by handling null
nickName before calling preferencesManager.saveString; check the
SocialVerifyResponseModel result.nickName and either save a safe fallback (e.g.,
empty string) or skip saving when null (e.g., if (result.nickName != null)
saveString(...)), and ensure the null-handling aligns with the domain mapping in
toModel so stored USER_NAME never becomes the string "null".

Comment on lines 10 to +13
Netflix(R.drawable.img_netflix, R.drawable.ic_small_netflix, "넷플릭스"),
Tving(R.drawable.img_tving, R.drawable.ic_small_tving, "티빙"),
Wave(R.drawable.img_wave, R.drawable.ic_small_wave, "웨이브"),
Coupang(R.drawable.img_coupang, R.drawable.ic_small_coupang, "쿠팡플레이"),
Wavve(R.drawable.img_wave, R.drawable.ic_small_wave, "웨이브"),
CoupangPlay(R.drawable.img_coupang, R.drawable.ic_small_coupang, "쿠팡플레이"),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

find . -name "OttType.kt" -type f

Repository: imflint/Flint-Android

Length of output: 117


🏁 Script executed:

git ls-files | grep -i "otttype\|ott"

Repository: imflint/Flint-Android

Length of output: 1257


🏁 Script executed:

rg "OttType" -l

Repository: imflint/Flint-Android

Length of output: 1061


🏁 Script executed:

cat -n app/src/main/java/com/flint/domain/type/OttType.kt

Repository: imflint/Flint-Android

Length of output: 752


🏁 Script executed:

rg "Wavve|CoupangPlay|Wave|Coupang" -n --type kotlin -A 2 -B 2

Repository: imflint/Flint-Android

Length of output: 5865


🏁 Script executed:

rg "SerialName|@Serializable|kotlinx.serialization" -n --type kotlin

Repository: imflint/Flint-Android

Length of output: 26718


🏁 Script executed:

cat -n app/src/main/java/com/flint/domain/mapper/ott/OttMapper.kt

Repository: imflint/Flint-Android

Length of output: 758


🏁 Script executed:

cat -n app/src/main/java/com/flint/data/dto/ott/response/OttListResponseDto.kt

Repository: imflint/Flint-Android

Length of output: 704


🏁 Script executed:

rg "OttType\(" -A 3 -B 3 --type kotlin app/src/main/java/com/flint/data

Repository: imflint/Flint-Android

Length of output: 47


🏁 Script executed:

rg "@Serializable" -A 5 app/src/main/java/com/flint/domain/type/

Repository: imflint/Flint-Android

Length of output: 47


🏁 Script executed:

rg "Room|Database|@Entity|@Dao|@Query|DataStore|SharedPreferences" -l --type kotlin

Repository: imflint/Flint-Android

Length of output: 666


🏁 Script executed:

rg "OttType\." -B 2 -A 2 --type kotlin | head -100

Repository: imflint/Flint-Android

Length of output: 9708


🏁 Script executed:

find . -name "*Database*" -o -name "*Dao*" | grep -i "\.kt$"

Repository: imflint/Flint-Android

Length of output: 47


🏁 Script executed:

cat -n app/src/main/java/com/flint/domain/mapper/content/ContentMapper.kt

Repository: imflint/Flint-Android

Length of output: 1854


🏁 Script executed:

cat -n app/src/main/java/com/flint/data/local/PreferencesManager.kt

Repository: imflint/Flint-Android

Length of output: 1467


🏁 Script executed:

rg "valueOf|name\(\)|OttType" app/src/main/java/com/flint/domain/mapper/content/ContentMapper.kt -A 3 -B 3

Repository: imflint/Flint-Android

Length of output: 630


🏁 Script executed:

git log --oneline -n 20 -- app/src/main/java/com/flint/domain/type/OttType.kt

Repository: imflint/Flint-Android

Length of output: 159


🏁 Script executed:

git show HEAD:app/src/main/java/com/flint/domain/type/OttType.kt 2>/dev/null || echo "Not available"

Repository: imflint/Flint-Android

Length of output: 640


🏁 Script executed:

git log --all --oneline -- app/src/main/java/com/flint/domain/type/OttType.kt

Repository: imflint/Flint-Android

Length of output: 362


🏁 Script executed:

git show 35c1f98:app/src/main/java/com/flint/domain/type/OttType.kt 2>/dev/null | head -20

Repository: imflint/Flint-Android

Length of output: 640


🏁 Script executed:

git diff HEAD~5..HEAD -- app/src/main/java/com/flint/domain/type/OttType.kt 2>/dev/null || echo "No recent changes"

Repository: imflint/Flint-Android

Length of output: 82


🏁 Script executed:

git show a751816:app/src/main/java/com/flint/domain/type/OttType.kt 2>/dev/null | head -20

Repository: imflint/Flint-Android

Length of output: 635


🏁 Script executed:

git show 3ba438b:app/src/main/java/com/flint/domain/type/OttType.kt 2>/dev/null | head -20

Repository: imflint/Flint-Android

Length of output: 724


🏁 Script executed:

ast-grep --pattern 'enum class OttType {
  $$$
}'

Repository: imflint/Flint-Android

Length of output: 47


🏁 Script executed:

rg "@SerialName" app/src/main/java/com/flint/domain/type/ -A 2

Repository: imflint/Flint-Android

Length of output: 47


🏁 Script executed:

rg "Wave|Coupang|Wavve|CoupangPlay" app/src/main/java/com/flint/data/dto/content/response/ -B 2 -A 2

Repository: imflint/Flint-Android

Length of output: 47


🏁 Script executed:

cat -n app/src/main/java/com/flint/data/dto/content/response/OttSimpleResponseDto.kt 2>/dev/null || find . -name "OttSimpleResponseDto.kt" -exec cat -n {} \;

Repository: imflint/Flint-Android

Length of output: 47


🏁 Script executed:

rg "OttSimpleResponseDto" -l --type kotlin

Repository: imflint/Flint-Android

Length of output: 221


🏁 Script executed:

cat -n app/src/main/java/com/flint/data/dto/content/response/BookmarkedContentResponseDto.kt | head -50

Repository: imflint/Flint-Android

Length of output: 182


🏁 Script executed:

cat -n app/src/main/java/com/flint/data/dto/content/response/BookmarkedContentListResponseDto.kt

Repository: imflint/Flint-Android

Length of output: 1045


🏁 Script executed:

find app/src/main/java/com/flint/data/dto -name "*.kt" -exec grep -l "OttSimple" {} \;

Repository: imflint/Flint-Android

Length of output: 154


🏁 Script executed:

git log --all -p -- app/src/main/java/com/flint/domain/type/OttType.kt | grep -A 30 "Wave\|Coupang" | head -60

Repository: imflint/Flint-Android

Length of output: 2067


🏁 Script executed:

rg "subscribedOttIds|favoriteOtt" --type kotlin -B 3 -A 3

Repository: imflint/Flint-Android

Length of output: 1920


OttType 열거형 이름 변경 후 API 역호환성 확인 필요

WaveWavve, CoupangCoupangPlay로 변경되었는데, ContentMapper.ktOttType.valueOf(ottSimple.ottName) (라인 26)에서 백엔드 API 응답의 문자열을 열거형으로 변환합니다. 만약 백엔드가 여전히 기존 이름("Wave", "Coupang")을 전송 중이라면 valueOf() 파싱이 실패하여 해당 OTT 정보가 무시됩니다.

확인사항:

  • 백엔드 API가 새 이름("Wavve", "CoupangPlay")으로 업데이트되었는지 확인
  • 필요시 @SerialName 애너테이션을 열거형 값에 추가하여 역호환성 보장 (예: @SerialName("Wave") Wavve(...))
  • 또는 기존 클라이언트와의 호환성을 위해 서버에서의 응답 형식 통일 확인
🤖 Prompt for AI Agents
In `@app/src/main/java/com/flint/domain/type/OttType.kt` around lines 10 - 13, The
OttType enum was renamed entries (e.g., Wavve, CoupangPlay) but ContentMapper
uses OttType.valueOf(ottSimple.ottName), which will fail if the backend still
sends "Wave" or "Coupang"; update the enum (OttType) to include `@SerialName`
annotations for legacy names (e.g., `@SerialName`("Wave") Wavve,
`@SerialName`("Coupang") CoupangPlay) or add a safe parsing helper (e.g., a method
parseOtt(String) in OttType that maps legacy strings to current enum values and
use that from ContentMapper instead of valueOf) so incoming API strings remain
backward-compatible.

Comment on lines 89 to +91
navigateToExplore = {
// TODO navigate to explore
navigateToExplore()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

오래된 TODO 주석 제거 필요

navigateToExplore()가 구현되었으므로 TODO 주석을 제거해 주세요.

🧹 수정 제안
                 navigateToExplore = {
-                    // TODO navigate to explore
                     navigateToExplore()
                 },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
navigateToExplore = {
// TODO navigate to explore
navigateToExplore()
navigateToExplore = {
navigateToExplore()
🤖 Prompt for AI Agents
In `@app/src/main/java/com/flint/presentation/home/HomeScreen.kt` around lines 89
- 91, Remove the outdated TODO comment in HomeScreen.kt where navigateToExplore
is invoked: locate the navigateToExplore lambda/parameter and delete the line
containing "// TODO navigate to explore" since navigateToExplore() is already
implemented; ensure no other TODOs remain in that block and keep the call
navigateToExplore() intact.

@nahy-512 nahy-512 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!


// 콘텐츠별 OTT 목록 조회
@GET("/api/v1/contents/ott/{contentId}")
suspend fun getOttListPerContent(@Path("contentId") contentId: String): BaseResponse<OttListResponseDto>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p2
줄바꿈 한번 해주시면 좋을 것 같습니다

Comment on lines +68 to +72
is HomeSideEffect.ShowOttListBottomSheet -> {
ottListModel = sideEffect.ottListModel
showOttListBottomSheet = true
}
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3
바텀시트 띄우는 것도 SideEffect로 보시나요?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@giovannijunseokim giovannijunseokim left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 😁

Comment on lines +101 to +103
.onFailure {
Log.d("Logd", it.message.toString())
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

p3: Timber 쓰거나 지워주시면 좋을 것 같습니다. 👍

@nahy-512 nahy-512 merged commit 9b641d7 into develop Jan 21, 2026
2 checks passed
@nahy-512 nahy-512 deleted the feat/#144-home-additional-functions branch January 21, 2026 18:04
@coderabbitai coderabbitai Bot mentioned this pull request Jun 14, 2026
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔖 API feat - API 연동 Feat ✨ 신규 기능을 추가하거나 기존 기능의 동작, 정책을 변경

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] Home Additional Functions

3 participants