-
Notifications
You must be signed in to change notification settings - Fork 0
[Feature/#154] first qa-2 #158
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughUI ์ ๋ฐ์ ๋ ์ด์์/ํจ๋ฉ ์กฐ์ (์ฌ๋ฌ ํ๋ฉด์ top = 50.dp ์ ์ฉ ๋ฐ ๊ฐ๊ฒฉ ๋ณ๊ฒฝ), ์ผ๋ถ ๋ฒํผ์ ํด๋ฆญ ๊ฐ๋ ์ ๊ฑฐ, DialogโPopup ์ ํ, ์ด๋ฏธ์ง ์ ํ ๋ฆฌ์ (intent/์ฝ๋ฐฑ ์ถ๊ฐ), ๋ฐ์ดํฐ ๋ชจ๋ธ ํ๋๋ช /nullable ๋ณ๊ฒฝ ๋ฐ ๋งคํ/์ ์ฅ์ ์ ๋ฐ์ดํธ, PlaceScreen ์ด๊ธฐ ๋ก๋์ ๋ณ๋ ฌํ ๋ฑ์ด ํฌํจ๋ ๊ด๋ฒ์ํ UIยท๋ฐ์ดํฐ ๋ ๋ฒจ ๋ณ๊ฒฝ์ ๋๋ค. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant UI as RenameCourseBottomSheet
participant VM as MapsViewModel
participant State as MapsState
User->>UI: ์ฝ์ค๋ช
/์๊ฐ ์
๋ ฅ
UI->>UI: ๊ธธ์ด ๊ฒ์ฆ ๋ฐ ๋ฌธ์์ ํ์
User->>UI: "์๋ฃ" ํด๋ฆญ
UI->>VM: onChangeRenameCourse(name,intro)
VM->>VM: ChangeRenameCourse ์ฒ๋ฆฌ (courseDetailInfo ์
๋ฐ์ดํธ)
VM->>UI: onStartRenameCourseClick() (ํธ์ง ์๋ฃ ํ ํ๋ฆ)
sequenceDiagram
participant User
participant Screen as RegisterPlaceScreen
participant Image as RegisterPlaceImage
participant VM as RegisterPlaceViewModel
User->>Screen: ์ด๋ฏธ์ง ์ ํ/์
๋ฐ์ดํธ
Screen->>Image: selectedUris ์ ๋ฌ
User->>Image: ์ ํ๋ ์ด๋ฏธ์ง ํด๋ฆญ (index)
Image->>Screen: resetSelectedUris(index)
Screen->>VM: RegisterPlaceIntent.ResetSelectedUris(index)
VM->>VM: ์ธ๋ฑ์ค ๊ฒ์ฆ ํ ๋ฆฌ์คํธ์์ ์ ๊ฑฐ ๋ฐ ์ํ ๊ฐฑ์
VM->>Screen: ์
๋ฐ์ดํธ๋ selectedUris ์ํ ๋ฐ์
Estimated code review effort๐ฏ 3 (Moderate) | โฑ๏ธ ~25 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touchesโ Failed checks (1 warning, 3 inconclusive)
โ Passed checks (1 passed)
โจ Finishing touches
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. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
๐งน Nitpick comments (10)
feature/maps/src/main/java/com/teamsolply/solply/maps/component/CourseItem.kt (3)
108-110: ํ์ดํ 1์ค ์ ํ ์ Ellipsis ๋ช ์๋ฅผ ๊ณ ๋ คํ์ดํ์
maxLines = 1๋ก ์ ํํ๋ฉด์ overflow ์ ์ฑ ์ด ๊ธฐ๋ณธ๊ฐ(Clip)์ ์์กดํ๊ณ ์์ต๋๋ค. ๋์์ธ ์ ์๋ฆฐ๋ค๋ ๊ฑธ ์ฌ์ฉ์์๊ฒ ๋ช ํํ ๋ณด์ฌ์ฃผ๊ณ ์ถ๋ค๋ฉดTextOverflow.Ellipsis๋ฅผ ๋ช ์ํ๋ ํธ์ด ๋ ์ง๊ด์ ์ผ ์ ์์ต๋๋ค.- Text( - text = placeName.formatTextToPlaceItemTitle(), - modifier = Modifier, - color = SolplyTheme.colors.black, - style = SolplyTheme.typography.title15M, - maxLines = 1 - ) + Text( + text = placeName.formatTextToPlaceItemTitle(), + modifier = Modifier, + color = SolplyTheme.colors.black, + style = SolplyTheme.typography.title15M, + maxLines = 1, + overflow = TextOverflow.Ellipsis + )
113-123: ์ฃผ์ Text์ maxLines/overflow ์ ์ฑ ์ผ๊ด์ฑ ๊ฐ์ ์ ์์ ํ ์ํ์์๋ง
maxLines = 2+Ellipsis, ๋น์ ํ ์ํ์์๋maxLines = 1+Clip์กฐํฉ์ธ๋ฐ, ๋น์ ํ ์ํ์์๋ ๊ธธ์ด๊ฐ ์ฝ๊ฐ๋ง ๊ธธ์ด๋ ๋ง์ง๋ง ๊ธ์๊ฐ ๋ฑ ์๋ ค ๋ณด์ผ ์ ์์ต๋๋ค. UX ๊ด์ ์์ ํญ์ ๋ง์ค์ํ๋ฅผ ์ฌ์ฉํ๋ ์ชฝ์ด ์์ฐ์ค๋ฌ์ธ ์๋ ์์ต๋๋ค.ํ์ํ๋ค๋ฉด ๋ค์์ฒ๋ผ overflow ์ ์ฑ ๋ง ๋จ์ํํ๋ ๊ฒ๋ ๊ณ ๋ คํด๋ณผ ๋งํฉ๋๋ค.
- style = SolplyTheme.typography.caption12R, - maxLines = if (selectedPlaceItem) 2 else 1, - overflow = if (selectedPlaceItem) { - TextOverflow.Ellipsis - } else { - TextOverflow.Clip - } + style = SolplyTheme.typography.caption12R, + maxLines = if (selectedPlaceItem) 2 else 1, + overflow = TextOverflow.Ellipsis
125-145: Spacer ํญ ๋ช ์๋ก ์์ด์ฝ ์์ญ ์ฌ๋ฐฑ ํํ์ด ๋ ๋ช ํํด์ง
Spacer(modifier = Modifier.width(12.dp))๋ก ํ ์คํธ์ ์์ด์ฝ ์ฌ์ด ๊ฐ๊ฒฉ์ ๊ณ ์ ๊ฐ์ผ๋ก ๋ ์ ํ์ ์ง๊ด์ ์ด๊ณ , Row ๋ด ๊ตฌ์ฑ ์์ ๊ฐ ์ฌ๋ฐฑ ์๋๊ฐ ์ ๋๋ฌ๋ฉ๋๋ค.ํ ๊ฐ์ง ์ ํ์ ์ ์์ผ๋ก, ๋ง์ง๋ง
Spacer(modifier = Modifier.padding(end = 22.dp))๋ ์๋์ฒ๋ผwidth๊ธฐ๋ฐ์ผ๋ก ํต์ผํ๋ฉด ๋ ์ด์์ ์๋๋ฅผ ์ฝ๋ ์ ์ฅ์์ ์กฐ๊ธ ๋ ๋ช ํํ ์ ์์ต๋๋ค.- Spacer(modifier = Modifier.padding(end = 22.dp)) + Spacer(modifier = Modifier.width(22.dp))core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/header/SolplyHomeHeader.kt (1)
32-33: ํค๋ ์ฌ๋ฐฑ ๋ํญ ์ฆ๊ฐ์๋จ ํจ๋ฉ์ด 11.dp์์ 48.dp๋ก ํฌ๊ฒ ์ฆ๊ฐํ์ต๋๋ค. ๋ค๋ฅธ ํ๋ฉด๋ค์ ๋๋ถ๋ถ 50.dp๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ฌ๊ธฐ์๋ 48.dp๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ์๋์? ์๋์ ์ธ ์ฐจ์ด๊ฐ ์๋๋ผ๋ฉด ์ผ๊ด์ฑ์ ์ํด 50.dp ์ฌ์ฉ์ ๊ณ ๋ คํด๋ณด์ธ์.
์ผ๊ด์ฑ์ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์์ ์ ๊ณ ๋ คํด๋ณด์ธ์:
.fillMaxWidth() .background(color = SolplyTheme.colors.white) - .padding(top = 48.dp) + .padding(top = 50.dp)feature/place/src/main/java/com/teamsolply/solply/place/component/bottomsheet/PlaceOptionFilterSheet.kt (1)
95-95: ์ด๊ธฐํ ๋ฒํผ์ ์ ํ ์ํ๋ฅผ ์ฌ๊ณ ํ์ธ์."์ด๊ธฐํ" ๋ฒํผ์
selected์์ฑ์ด ํญ์true๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ ํ๋ ํํฐ๊ฐ ์์ ๋๋ง ๋ฒํผ์ด ํ์ฑํ ์ํ๋ก ํ์๋์ด์ผ ์ฌ์ฉ์์๊ฒ ๋ ๋ช ํํ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.๋ค์๊ณผ ๊ฐ์ด ์์ ์ ๊ณ ๋ คํ์ธ์:
SolplyBasicButton( text = "์ด๊ธฐํ", onClick = onReset, modifier = Modifier.weight(1f), - selected = true, + selected = selectedOptionIds.isNotEmpty(), textColor = SolplyTheme.colors.gray900, textStyle = SolplyTheme.typography.body16M, enabledBackgroundColor = SolplyTheme.colors.white, disabledBackgroundColor = SolplyTheme.colors.white )feature/place/src/main/java/com/teamsolply/solply/place/PlaceViewModel.kt (1)
152-183:fetchInitInfo์ async/await ์ฌ์ฉ ๊ตฌ์กฐ ๋จ์ํ/๋ช ํํ ์ ์
fetchPlaces,fetchRecommendPlace,fetchMainTags๊ฐ๊ฐ์ด ๋ด๋ถ์์ ์ด๋ฏธviewModelScope.launch { ... }๋ฅผ ์ฌ์ฉํ๊ณ ์์ด์, ์ฌ๊ธฐ์async { fetchXxx() }๋ก ๊ฐ์ผ ๋คawait()๋ฅผ ํธ์ถํด๋ ์ค์ ๋คํธ์ํฌ ์์ ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง๋ ์๊ณ , ๊ธฐ์กด(๋จ์ ํจ์ ํธ์ถ)๊ณผ ๋์์ด ๊ฑฐ์ ๊ฐ์ต๋๋ค.์๋๊ฐ ๋จ์ํ ์ธ ์์ ์ ๋์์ ์์ํ๋ ๊ฒ์ด๋ผ๋ฉด, ์๋์ฒ๋ผ ์๋์ฒ๋ผ ๋จ์ ํธ์ถ๋ก ๋์ด๋ ๋๊ณ , ๊ตฌ์กฐ์ ๋์์ฑ์ ๋ช ํํ ๊ฐ์ ธ๊ฐ๊ณ ์ถ๋ค๋ฉด ์ธ ํจ์๋ฅผ
suspend๋ก ๋ฐ๊พผ ๋ค ์ด ์ค์ฝํ ์์์๋งasync/await๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉํฅ๋ ๊ณ ๋ คํด ๋ณผ ๋งํฉ๋๋ค.// ๊ฐ๋จํ ๋์ผ ๋์์ ์ ์งํ ๊ฒฝ์ฐ fetchPlaces(...) fetchRecommendPlace(...) fetchMainTags()ํฐ ๋ฒ๊ทธ๋ ์๋์ง๋ง, ๋์ค์
await()๊ฐ ์ค์ ์๋ฃ๋ฅผ ๋ณด์ฅํ๋ค๊ณ ์คํดํ ์ ์์ด์ ํ ๋ฒ ๊ฒํ ํด ๋ณด์๋ฉด ์ข๊ฒ ์ต๋๋ค.feature/search/src/main/java/com/teamsolply/solply/registerplace/RegisterPlaceContract.kt (1)
36-55:ResetSelectedUris์ index ์๋ฏธ๋ฅผ ์กฐ๊ธ ๋ ๋ช ํํ ํํํ๋ฉด ์ข๊ฒ ์ต๋๋ค์ ์ธํ ํธ ์ถ๊ฐ ๋ฐฉํฅ ์์ฒด๋ ์ข์ต๋๋ค. ๋ค๋ง
index๊ฐ 0 ๊ธฐ๋ฐ ์ธ๋ฑ์ค์ธ์ง, ์ด๋ค ๋ฆฌ์คํธ(์:selectedReportUris)๋ฅผ ๋์์ผ๋ก ํ๋์ง ์ฝ๋๋ง์ผ๋ก๋ ์ฝ๊ฐ ๋ชจํธํด์,
- ์ด๋ฆ์
ResetSelectedReportUri์ ๋๋ก ๋ ๊ตฌ์ฒด์ ์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋- KDoc/์ฃผ์์ผ๋ก index ์๋ฏธ๋ฅผ ์ค๋ช
ํด๋๋ฉด ํธ์ถ ์ธก์์ ์ค์ํ ์ฌ์ง๊ฐ ๋ ์ค์ด๋ค ๊ฒ ๊ฐ์ต๋๋ค.
feature/search/src/main/java/com/teamsolply/solply/registerplace/RegisterPlaceViewModel.kt (1)
106-131: ์ ํ ์ด๋ฏธ์ง ๋ฆฌ์ ๋ก์ง์ ์์ ํ์ง๋ง, ๋ฆฌ์คํธ ํ์ ์ผ๊ด์ฑ์ ์กฐ๊ธ ๋ ๋ง์ถ ์ ์์ต๋๋ค
target.isEmpty()๋ฐintent.index !in target.indices์ฒดํฌ๋ก ๋ฐฉ์ด ๋ก์ง์ด ์ ๋ค์ด๊ฐ ์์ด์ ๊ธฐ๋ฅ์ ์ผ๋ก๋ ์์ ํด ๋ณด์ ๋๋ค.๋ค๋ง
RegisterPlaceState์์๋ ๊ธฐ๋ณธ์ ์ผ๋กpersistentListOf()๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ฐ, ์ฌ๊ธฐ์๋toMutableList()ํMutableList๋ฅผ ๊ทธ๋๋ก ์ํ์ ๋ฃ๊ณ ์์ด ์ปฌ๋ ์ ํ์ ์ผ๊ด์ฑ์ด ์ฝ๊ฐ ๊นจ์ง ์ ์์ต๋๋ค. ์๋์ฒ๋ผ ๋ค์ immutable ๋ฆฌ์คํธ๋ก ๋ฐ๊ฟ ๋ฃ๋ ์ชฝ์ ํ ๋ฒ ๊ณ ๋ คํด ๋ณด์ ๋ ์ข๊ฒ ์ต๋๋ค.is RegisterPlaceIntent.ResetSelectedUris -> reduce { val target = selectedReportUris.toMutableList() if (target.isEmpty() || intent.index !in target.indices) return@reduce this target.removeAt(intent.index) copy(selectedReportUris = target.toPersistentList()) }(ํ์ ์
kotlinx.collections.immutable.toPersistentListimport ์ถ๊ฐ)feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt (1)
488-496: Persona ๋งคํ ๋ก์ง
getRecommendTextํจ์๊ฐ persona ํ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ถ์ฒ ๋ฉ์์ง๋ฅผ ๋ฐํํฉ๋๋ค. ํ์ฌ๋ 4๊ฐ์ง persona ํ์ ๊ณผ fallback์ ์ฒ๋ฆฌํ๊ณ ์์ต๋๋ค. ํฅํ persona ํ์ ์ด ์ถ๊ฐ๋๊ฑฐ๋ ๋ค๋ฅธ ๊ณณ์์๋ ์ฌ์ฉ๋ ๊ฒฝ์ฐ, ์ค์ ์ง์ค์ persona ๊ด๋ฆฌ ์ ํธ๋ฆฌํฐ๋ก ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณผ ์ ์์ต๋๋ค.data/course/src/main/java/com/teamsolply/solply/course/favoriteTown/repository/FavoriteTownRepositoryImpl.kt (1)
15-38: ๋ฐ์ดํฐ ๋ณํ ๋ก์ง ๋ฆฌํฉํ ๋ง์ค์ฒฉ๋ ํธ๋ฆฌ ๊ตฌ์กฐ ๋์ ํ๋ฉด ๋ฆฌ์คํธ๋ฅผ ํํฐ๋งํ์ฌ ์ง์ญ๊ณผ ํ์ด์ ๊ตฌ์ฑํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ ๋์์ต๋๋ค. ๋ก์ง์ด ๋ ๋ช ํํ๊ณ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
์ ํ์ ๊ฐ์ ์ฌํญ: Line 28์
groupBy { it.parentTownId ?: 0L }์์?: 0L๋ถ๋ถ์ ๋ถํ์ํฉ๋๋ค. Line 27์ ํํฐ ์กฐ๊ฑด์์ ์ด๋ฏธ null๊ณผ 0์ ์ ์ธํ๊ธฐ ๋๋ฌธ์ ๋๋ค.- val townsByRegion: Map<Long, List<TownLite>> = towns - .filter { it.parentTownId != null && it.parentTownId != 0L } - .groupBy { it.parentTownId ?: 0L } + val townsByRegion: Map<Long, List<TownLite>> = towns + .filter { it.parentTownId != null && it.parentTownId != 0L } + .groupBy { it.parentTownId!! }
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
๐ Files selected for processing (48)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/bottomsheet/SolplyBasicBottomSheet.kt(2 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/button/SolplyButton.kt(1 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/RegisterPlaceImage.kt(2 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/SolplyCourseCard.kt(1 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/SolplyPlaceCard.kt(2 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/header/SolplyHomeHeader.kt(2 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/textfield/SolplyTextField.kt(1 hunks)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/topbar/SolplyTopBar.kt(1 hunks)data/course/src/main/java/com/teamsolply/solply/course/favoriteTown/dto/TownTreeResponseDto.kt(1 hunks)data/course/src/main/java/com/teamsolply/solply/course/favoriteTown/repository/FavoriteTownRepositoryImpl.kt(1 hunks)data/place/src/main/java/com/teamsolply/solply/place/dto/response/GetPlacesResponseDto.kt(1 hunks)data/place/src/main/java/com/teamsolply/solply/place/mapper/PlaceEntityMapper.kt(1 hunks)data/place/src/main/java/com/teamsolply/solply/place/repository/PlaceRepositoryImpl.kt(1 hunks)domain/place/src/main/java/com/teamsolply/solply/place/model/PlaceEntity.kt(1 hunks)feature/collection/src/main/java/com/teamsolply/solply/collection/CollectionMenuScreen.kt(1 hunks)feature/collection/src/main/java/com/teamsolply/solply/collection/collection/component/CollectionScreen.kt(2 hunks)feature/course/src/main/java/com/teamsolply/solply/course/component/FavoriteTownTopBar.kt(1 hunks)feature/course/src/main/java/com/teamsolply/solply/course/favoriteTown/FavoriteTownRoute.kt(1 hunks)feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt(16 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/MapsContract.kt(1 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt(7 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/MapsViewModel.kt(2 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/component/CourseItem.kt(4 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/AddCourseBottomSheet.kt(1 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/EditCourseBottomSheet.kt(3 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/PlaceDetailBottomSheet.kt(1 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/RenameCourseBottomSheet.kt(7 hunks)feature/maps/src/main/java/com/teamsolply/solply/maps/component/dialog/ReportPlaceDialog.kt(9 hunks)feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt(2 hunks)feature/mypage/src/main/java/com/teamsolply/solply/mypage/component/MypagePlaceAllScreen.kt(1 hunks)feature/mypage/src/main/java/com/teamsolply/solply/mypage/profile/ProfileEditScreen.kt(2 hunks)feature/mypage/src/main/java/com/teamsolply/solply/mypage/withdraw/WithdrawScreen.kt(1 hunks)feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt(0 hunks)feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt(1 hunks)feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/AllowClauseScreen.kt(1 hunks)feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/NamingScreen.kt(1 hunks)feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectPersonaScreen.kt(1 hunks)feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectTownScreen.kt(2 hunks)feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt(5 hunks)feature/place/src/main/java/com/teamsolply/solply/place/PlaceViewModel.kt(2 hunks)feature/place/src/main/java/com/teamsolply/solply/place/component/bottomsheet/PlaceOptionFilterSheet.kt(1 hunks)feature/place/src/main/java/com/teamsolply/solply/place/model/PlaceData.kt(1 hunks)feature/search/src/main/java/com/teamsolply/solply/registerplace/RegisterPlaceContract.kt(1 hunks)feature/search/src/main/java/com/teamsolply/solply/registerplace/RegisterPlaceScreen.kt(6 hunks)feature/search/src/main/java/com/teamsolply/solply/registerplace/RegisterPlaceViewModel.kt(1 hunks)feature/search/src/main/java/com/teamsolply/solply/search/SearchScreen.kt(2 hunks)remote/place/src/main/java/com/teamsolply/solply/place/datasource/PlaceRemoteDataSourceImpl.kt(1 hunks)remote/place/src/main/java/com/teamsolply/solply/place/service/PlaceService.kt(1 hunks)
๐ค Files with no reviewable changes (1)
- feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt
๐งฐ Additional context used
๐งฌ Code graph analysis (8)
feature/search/src/main/java/com/teamsolply/solply/registerplace/RegisterPlaceViewModel.kt (1)
core/ui/src/main/java/com/teamsolply/solply/ui/base/BaseViewModel.kt (1)
reduce(44-46)
feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/RenameCourseBottomSheet.kt (1)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/button/SolplyButton.kt (1)
SolplyBasicButton(57-83)
feature/maps/src/main/java/com/teamsolply/solply/maps/MapsViewModel.kt (1)
core/ui/src/main/java/com/teamsolply/solply/ui/base/BaseViewModel.kt (1)
reduce(44-46)
feature/maps/src/main/java/com/teamsolply/solply/maps/component/dialog/ReportPlaceDialog.kt (1)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/button/SolplyButton.kt (1)
SolplyBasicButton(57-83)
feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt (1)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/header/SolplyHomeHeader.kt (1)
SolplyHomeHeader(22-82)
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/SolplyPlaceCard.kt (1)
core/ui/src/main/java/com/teamsolply/solply/ui/image/AdaptationImage.kt (1)
AdaptationImage(15-69)
feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt (3)
feature/course/src/main/java/com/teamsolply/solply/course/favoriteTown/favoriteTownNavigation/FavoriteTownNavigation.kt (1)
favoriteTownNavGraph(20-32)feature/search/src/main/java/com/teamsolply/solply/search/navigation/SearchNavigation.kt (1)
searchNavGraph(16-30)core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/snackbar/SolplySnackBar.kt (4)
SolplyTextSnackBar(37-53)SolplyNotificationSnackBar(55-78)SolplyNavigateSnackBar(80-113)SolplyNavigateSimpleSnackBar(115-147)
feature/search/src/main/java/com/teamsolply/solply/search/SearchScreen.kt (1)
feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt (1)
navigateToBack(116-118)
๐ Additional comments (70)
feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/AddCourseBottomSheet.kt (1)
63-67: 28.dp ํฐ์น ์์ญ ํฌ๊ธฐ ํ์ธ ํ์ - ์ค๊ณ ์๋ ๊ฒ์ฆ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒ์ฆํ ๊ฒฐ๊ณผ, 28.dp ํฌ๊ธฐ๋ ์ด ํ๋ก์ ํธ์์ ๋ณด์กฐ ์์ ์์ด์ฝ(secondary action icons)์ ์ผ๊ด๋ ํจํด์ ๋๋ค:
EditCourseBottomSheet.kt์ค 159: ํธ์ง ์์ด์ฝ 28.dpCourseItem.kt์ค 130: ํธ์ง ์์ด์ฝ 28.dp- ๋ค๋ฅธ ๋ณด์กฐ ์์ ์์ด์ฝ๋ค: 20.dp, 24.dp
- ์ฃผ์ ์์ ๋ฒํผ๋ง: 48.dp (MainBottomBar)
28.dp๊ฐ Android ๊ถ์ฅ 48.dp๋ณด๋ค ์์ ๊ฒ์ ์ฌ์ค์ด์ง๋ง, ํ์ฌ ํ๋ก์ ํธ์ ์ค๊ณ ํจํด์ ๋๋ค.
rippleEnabled = false์ค์ ์ ์๊ฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๋ ค๋ ์๋๋ก ๋ณด์ ๋๋ค. ํ๋ก์ ํธ ์ค๊ณ ์์คํ ๋ฌธ์์์ ์ด ํฌ๊ธฐ ์ ํ์ด ์๋๋ ๊ฒ์ธ์ง ํ์ธํด ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.feature/maps/src/main/java/com/teamsolply/solply/maps/component/CourseItem.kt (3)
32-32: TextOverflow import ์ถ๊ฐ ์ ์ ์๋
Text์ปดํฌ์ ๋ธ์์overflow์ค์ ์ ์ํด ํ์ํ import์ด๊ณ , ๋ถํ์ํ ์์กด์ฑ๋ ์์ด ๊ทธ๋๋ก ์ ์งํด๋ ์ข์ต๋๋ค.
65-69: ์ ํ ์ํ๋ณ ์ฃผ์ ํฌ๋งท ๋ถ๋ฆฌ ๋ก์ง ์ ์
selectedPlaceItem์ฌ๋ถ์ ๋ฐ๋ผ ์๋ณธ ์ฃผ์ vs ์ถ์ฝ/ํฌ๋งทํ ์ฃผ์๋ฅผ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ๋ ๊ตฌ์กฐ๊ฐ ๋ช ํํ๊ณ , ๊ฐ๋ ์ฑ๋ ์ข์์ก์ต๋๋ค. ๋์ผ ๋ก์ง์ ์ฌ๋ฌ ๊ณณ์์ ์ค๋ณต ํธ์ถํ์ง ์๋ ์ ๋ ์ข์ต๋๋ค.
98-98: Row ๋ด ํ ์คํธ ์์ญ์ weight ๋ถ์ฌํ ๊ฒ ์ ์
Column(modifier = Modifier.weight(1f))๋ก ํ ์คํธ ์์ญ์ด ๊ฐ๋ณ ํญ์ ๊ฐ์ง๋๋ก ํ๊ณ , ์ค๋ฅธ์ชฝ ์์ด์ฝ ์์ญ์ ๊ณ ์ ํญ์ผ๋ก ๋๋ ๊ตฌ์กฐ๊ฐ ๋ ์ด์์ ์์ ์ฑ์ ๋์์ด ๋ฉ๋๋ค. ํนํ ๊ธด ํ์ดํ/์ฃผ์๊ฐ ๋ค์ด์ฌ ๋ ์์ด์ฝ์ด ๋ฐ๋ฆฌ์ง ์๋๋ก ํ๋ ๋ฐ ์ ํจํด ๋ณด์ ๋๋ค.feature/course/src/main/java/com/teamsolply/solply/course/component/FavoriteTownTopBar.kt (1)
29-29: ๋ ์ด์์ ๊ฐ๊ฒฉ ์กฐ์ ์ด ์ ์ ํฉ๋๋ค.์๋จ ํจ๋ฉ์ 50.dp๋ก ์ฆ๊ฐ์์ผ ์ ์ฒด ์ฑ์ ์ผ๊ด๋ ๊ฐ๊ฒฉ ์ ์ฑ ์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt (1)
118-118: ์๋จ ๊ฐ๊ฒฉ ์กฐ์ ์ด ์ผ๊ด์ฑ ์๊ฒ ์ ์ฉ๋์์ต๋๋ค.๋ค๋ฅธ ํ๋ฉด๋ค๊ณผ ๋์ผํ๊ฒ 50.dp ๊ฐ๊ฒฉ์ ์ ์ฉํ์ฌ ์ผ๊ด๋ UI๋ฅผ ์ ๊ณตํฉ๋๋ค.
feature/mypage/src/main/java/com/teamsolply/solply/mypage/withdraw/WithdrawScreen.kt (1)
105-106: ๋ ์ด์์ ํจ๋ฉ์ด ์ผ๊ด๋๊ฒ ์ ์ฉ๋์์ต๋๋ค.๋ฐฐ๊ฒฝ ์ ์ฉ ํ ์๋จ ํจ๋ฉ 50.dp๋ฅผ ์ถ๊ฐํ์ฌ ๋ค๋ฅธ ํ๋ฉด๋ค๊ณผ ๋์ผํ ๊ฐ๊ฒฉ์ ์ ์งํฉ๋๋ค.
feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/PlaceDetailBottomSheet.kt (1)
392-392: ๋ฐํ ์ํธ ๋ด๋ถ ๊ฐ๊ฒฉ ์กฐ์ ์ด ์ ์ ํฉ๋๋ค.SNS ๋งํฌ ์น์ ๊ณผ ์ค๋ฅ ์ ๋ณด ์น์ ์ฌ์ด์ ๊ฐ๊ฒฉ์ 20.dp๋ก ์ฆ๊ฐ์์ผ ๊ฐ๋ ์ฑ์ ๊ฐ์ ํ์ต๋๋ค.
feature/collection/src/main/java/com/teamsolply/solply/collection/CollectionMenuScreen.kt (1)
136-137: ์ผ๊ด๋ ์๋จ ๊ฐ๊ฒฉ์ด ์ ์ฉ๋์์ต๋๋ค.๋ค๋ฅธ ๋ฉ์ธ ํ๋ฉด๋ค๊ณผ ๋์ผํ๊ฒ 50.dp ์๋จ ํจ๋ฉ์ ์ ์ฉํ์ฌ ํต์ผ๋ ๋ ์ด์์์ ๊ตฌ์ฑํฉ๋๋ค.
feature/mypage/src/main/java/com/teamsolply/solply/mypage/component/MypagePlaceAllScreen.kt (1)
38-39: ๋ ์ด์์ ๊ฐ๊ฒฉ์ด ์ผ๊ด๋๊ฒ ์ ์ฉ๋์์ต๋๋ค.๋ฐฐ๊ฒฝ ์ ์ฉ ํ ์๋จ ํจ๋ฉ 50.dp๋ฅผ ์ถ๊ฐํ์ฌ ์ฑ ์ ์ฒด์ ์ผ๊ด๋ ๊ฐ๊ฒฉ ์ ์ฑ ์ ๋ฐ๋ฆ ๋๋ค.
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/topbar/SolplyTopBar.kt (1)
48-48: ํ ์คํธ ํจ๋ฉ ์ ๊ฑฐ๊ฐ ์ ์ ํฉ๋๋ค.์ปดํฌ๋ํธ ๋ด๋ถ ํจ๋ฉ์ ์ ๊ฑฐํ๊ณ ์์ ์ปจํ ์ด๋์์ ์ผ๊ด๋ ๊ฐ๊ฒฉ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๋ ๋ค๋ฅธ ํ์ผ๋ค์์ ์๋จ ํจ๋ฉ์ ์ถ๊ฐํ ๊ฒ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํฉ๋๋ค.
feature/course/src/main/java/com/teamsolply/solply/course/favoriteTown/FavoriteTownRoute.kt (1)
103-103: ViewModel์ selectedTownId ๊ฒ์ฆ์ด ์ด๋ฏธ ์กด์ฌํ์ฌ ์์ ์ฑ ํ๋ณด๋จ๊ฒ์ฆ ๊ฒฐ๊ณผ,
FavoriteTownRoute.kt๋ผ์ธ 103์onClickํธ๋ค๋ฌ๋isButtonEnabled์ํ์ ๊ด๊ณ์์ดConfirmSelection์ธํ ํธ๋ฅผ ์ ์กํฉ๋๋ค. ํ์ง๋งFavoriteViewModel.patchUserFavoriteTown()(๋ผ์ธ 47)์์val selectedTownId = s.selectedTownId ?: return๋ก null์ ์ฒดํฌํ๊ณ ์กฐ๊ธฐ ๋ฐํํ๋ฏ๋ก, ๋ฒํผ์ด ์๊ฐ์ ์ผ๋ก ๋นํ์ฑํ๋ ์ํ์์ ํด๋ฆญ๋์ด๋ ์ค์ ์์ ์ ์ํ๋์ง ์์ต๋๋ค. ViewModel์ด ์ํ๋ฅผ ๊ฒ์ฆํ๋ฏ๋ก ํ์ฌ ๊ตฌํ์ ์์ ํฉ๋๋ค.feature/mypage/src/main/java/com/teamsolply/solply/mypage/profile/ProfileEditScreen.kt (2)
120-121: ์๋จ ์ฌ๋ฐฑ ์ถ๊ฐ ํ์ธ๋ค๋ฅธ ํ๋ฉด๋ค๊ณผ ์ผ๊ด๋๊ฒ 50.dp ์๋จ ํจ๋ฉ์ด ์ถ๊ฐ๋์์ต๋๋ค. PR ์ ๋ฐ์ ๊ฑธ์น UI ๊ฐ๊ฒฉ ํ์คํ ์์ ์ผ๋ก ๋ณด์ ๋๋ค.
201-201: Now I need to examine the SolplyButton.kt file directly to understand the implementation:The web search results aren't specific to the codebase. Based on the earlier findings, I have enough information to make a determination. Let me now examine the specific usages more carefully and provide a comprehensive analysis:Based on my analysis of the script results showing all SolplyBasicButton usages, I can now provide a comprehensive assessment:
๊ฒ์ฆ ๋ก์ง ์ด๋์ ๋ฐ๋ฅธ button ๋์ ๋ณ๊ฒฝ ํ์ธ ์๋ฃ
์ฝ๋๋ฒ ์ด์ค ์ ์ฒด์์
SolplyBasicButton์ ์ฌ์ฉ ํจํด์ ๋ถ์ํ ๊ฒฐ๊ณผ, ๋ค์๊ณผ ๊ฐ์ ๋ถ์ผ์น๊ฐ ํ์ธ๋ฉ๋๋ค:ํ์ฌ ์ฝ๋๋ฒ ์ด์ค ํจํด:
WithdrawScreen.kt(162-167):if (buttonEnabled)์กฐ๊ฑด ์ฒดํฌ๋ฅผ onClick ๋ด๋ถ์์ ์ํProfileEditScreen.kt(๋ณ๊ฒฝ ํ):selected = isEditSuccess์ด์ง๋ง onClick ๋ฌด์กฐ๊ฑด ํธ์ถ- ๋๋จธ์ง ํ๋ฉด๋ค (
SelectTownScreen,SelectPersonaScreen,AllowClauseScreen๋ฑ):selected = isButtonEnabled๋ฑ์ ํ๋ผ๋ฏธํฐ ์ฌ์ฉ๋ฌธ์ ์ :
๋ค์ ๋ ๊ฐ์ง ํจํด์ด ํผ์ฌ๋์ด ์์ต๋๋ค:
- ๊ฒ์ฆ ๋ก์ง์ ํธ์ถ์์์ ์ฒ๋ฆฌ (WithdrawScreen ํจํด)
- ๊ฒ์ฆ์ selected ํ๋ผ๋ฏธํฐ๋ก ์ฒ๋ฆฌ (๋ณ๊ฒฝ๋ ProfileEditScreen ํจํด)
์ด ๋ณ๊ฒฝ์ฌํญ์ด ์๋๋ ๋์์ธ์ง ํ์ธ์ด ํ์ํ๋ฉฐ,
SolplyBasicButton์selected=false์ผ ๋ onClick ํธ์ถ ์ฌ๋ถ๋ฅผ ๋ช ํํ ํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ํ๋ฉด๋ค(ํนํ RegisterPlaceScreen์์ ๋ณต์กํ ์ ํ ์กฐ๊ฑด ์ฌ์ฉ)๊ณผ์ ์ผ๊ด์ฑ์ ์ํด ์ปดํฌ๋ํธ์ ๋์ ๋ฐฉ์์ ๋ฌธ์ํํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.feature/collection/src/main/java/com/teamsolply/solply/collection/collection/component/CollectionScreen.kt (1)
46-47: ์ผ๊ด๋ ์๋จ ์ฌ๋ฐฑ ์ ์ฉ๋ค๋ฅธ ํ๋ฉด๋ค๊ณผ ๋์ผํ๊ฒ 50.dp ์๋จ ํจ๋ฉ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ ์ฒด ์ฑ์ UI ๊ฐ๊ฒฉ ์ผ๊ด์ฑ์ ์ํ ๋ณ๊ฒฝ์ผ๋ก ๋ณด์ ๋๋ค.
feature/mypage/src/main/java/com/teamsolply/solply/mypage/MypageScreen.kt (3)
128-129: ์ผ๊ด๋ ๋ ์ด์์ ๊ฐ๊ฒฉ ์ ์ฉ๋ค๋ฅธ ํ๋ฉด๋ค๊ณผ ๋์ผํ๊ฒ 50.dp ์๋จ ํจ๋ฉ์ด ์ถ๊ฐ๋์์ต๋๋ค. ๋ฐฐ๊ฒฝ์๋ ๋ช ์์ ์ผ๋ก ์ค์ ๋์ด ๋ ์ด์์์ด ๋ช ํํด์ก์ต๋๋ค.
134-134: Modifier ์ฒด์ด๋ ๊ฐ์ํRow์ modifier๊ฐ ๋จ์ผ ํธ์ถ๋ก ๊ฐ์ํ๋์์ต๋๋ค. ์ฝ๋๊ฐ ๋ ๊น๋ํด์ก์ต๋๋ค.
143-143: ๋ค๋ก ๊ฐ๊ธฐ ๋ฒํผ ํจ๋ฉ ์กฐ์ ์๋จ ์ฌ๋ฐฑ์ด Column ๋ ๋ฒจ์์ ์ ์ฉ๋๋ฉด์ Icon์ ๊ฐ๋ณ top padding์ด ์ ๊ฑฐ๋์์ต๋๋ค. ์๋ก์ด ๋ ์ด์์ ๊ตฌ์กฐ์ ์ ๋ง์ต๋๋ค.
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/textfield/SolplyTextField.kt (1)
398-399: ํ๋ ์ด์คํ๋ ์คํ์ผ๋ง ๊ฐ์ํ๋ ์ด์คํ๋์ ์์์ด ๋ ์งํ๊ฒ(gray500 โ gray600) ๋ณ๊ฒฝ๋๊ณ , ํ ์คํธ ์คํ์ผ์ด ๋ ํฌ๊ณ ์ฝ๊ธฐ ์ฌ์ด ํํ(caption12M โ body14R)๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ๊ฐ๋ ์ฑ์ด ๊ฐ์ ๋๋ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ค.
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/SolplyCourseCard.kt (1)
82-86: ์ค๋ฒ๋ ์ด ๋ชจ์๋ฆฌ ๋ฅ๊ธ๊ธฐ ๊ฐ์๋ฐํฌ๋ช ์ค๋ฒ๋ ์ด์ ์๋จ ๋ชจ์๋ฆฌ ๋ฅ๊ธ๊ธฐ(4.dp)๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ด์ ๋ชจ๋ ๋ชจ์๋ฆฌ๊ฐ ๋ฅ๊ธ๊ฒ ์ฒ๋ฆฌ๋์ด ์นด๋์ ์๊ฐ์ ์์ฑ๋๊ฐ ๋์์ก์ต๋๋ค.
feature/search/src/main/java/com/teamsolply/solply/search/SearchScreen.kt (2)
99-99: ์ผ๊ด๋ ์๋จ ์ฌ๋ฐฑ ์ ์ฉ๋ค๋ฅธ ํ๋ฉด๋ค๊ณผ ๋์ผํ๊ฒ ์๋จ ํจ๋ฉ์ด 50.dp๋ก ์ฆ๊ฐ๋์์ต๋๋ค. PR ์ ๋ฐ์ UI ๊ฐ๊ฒฉ ํ์คํ ์์ ์ ๋๋ค.
103-107: ํฐ์น ์์ญ ๋ช ํํํด๋ฆญ ๊ฐ๋ฅ ์์ญ์ด Row ์ ์ฒด์์ Icon์ผ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ฌ์ฉ์ ์ธํฐ๋์ ์์ญ์ด ๋ ๋ช ํํด์ก์ต๋๋ค.
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/button/SolplyButton.kt (1)
72-72: onClick ์กฐ๊ฑด๋ถ ์คํ - ์ค๊ณ ์ผ๊ด์ฑ ๋ฐ ๋ฌธ์ํ ๊ฐ์ ํ์ํ์ฌ ์ฝ๋๋ฒ ์ด์ค์ ๋ชจ๋ ์ฌ์ฉ์ฒ(SelectPersonaScreen, SelectTownScreen, AllowClauseScreen, ProfileEditScreen, FavoriteTownRoute ๋ฑ 8๊ฐ ํ์ผ)๋ฅผ ๊ฒํ ํ ๊ฒฐ๊ณผ,
selectedํ๋ผ๋ฏธํฐ๋ ์ด๋ฏธ enabledBackgroundColor/disabledBackgroundColor์ ํจ๊ป enable/disable ์ํ๋ฅผ ์ ์ดํ๋ ์๋๋ ํจํด์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.๋ค๋ง, ๋ค์ ๊ฐ์ ์ฌํญ์ด ํ์ํฉ๋๋ค:
์ค๊ณ ๋ถ์ผ์น: ๊ฐ์ ํ์ผ์ AddLocalAreaButton์
selected์ํ์ ๊ด๊ณ์์ด onClick์ ํญ์ ์คํํฉ๋๋ค. SolplyBasicButton๊ณผ์ ๋์ ์ผ๊ด์ฑ์ ๊ฒํ ํ์ธ์.๋ช ํํ ๋ฌธ์ํ:
selected=false์ผ ๋ onClick์ด ํธ์ถ๋์ง ์๋ ๋์์ KDoc ์ฃผ์์ผ๋ก ๋ช ์ํ์ฌ ์ฌ์ฉ์๊ฐ API ๊ณ์ฝ์ ๋ช ํํ ์ดํดํ ์ ์๋๋ก ํ์ธ์.๋์ ๊ฒํ :
enabledํ๋ผ๋ฏธํฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์ถ๊ฐํ๊ฑฐ๋, ํจ์ ์ด๋ฆ/์ฃผ์์ ํตํด ์ด ๋์์ด ์๋์ ์์ ๋ถ๋ช ํ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.feature/maps/src/main/java/com/teamsolply/solply/maps/MapsContract.kt (1)
88-89: ์๋ก์ด ์ธํ ํธ ์ถ๊ฐ๊ฐ ์ ์ ํฉ๋๋ค.
ResetSelectedUris์ChangeRenameCourse์ธํ ํธ๊ฐ ๊ธฐ์กด ํจํด๊ณผ ์ผ๊ด๋๊ฒ ์ถ๊ฐ๋์์ผ๋ฉฐ, ํ๋ผ๋ฏธํฐ ํ์ ๋ ์ ์ ํฉ๋๋ค.core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/bottomsheet/SolplyBasicBottomSheet.kt (4)
33-35: ๋ฐํ ์ํธ ํฌ๊ธฐ ์กฐ์ ์ ํ์ธํ์ธ์.
fullyExpanded์slightlyExpanded๊ฐ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ๋๋ฐ์ด์ค์์ ๋ฐํ ์ํธ๊ฐ ์๋ํ ๋๋ก ํ์๋๋์ง ํ์ธํ์ธ์.
40-40: zIndex ๋ ์ด์ด๋ง์ ์ํฅ์ ๊ฒ์ฆํ์ธ์.
zIndex(1f)๊ฐ ์ถ๊ฐ๋์ด ๋ฐํ ์ํธ๊ฐ ๋ค๋ฅธ UI ์์ ์์ ํ์๋ฉ๋๋ค. ๋ค๋ฅธ ํ์ ์ด๋ ๋ค์ด์ผ๋ก๊ทธ์์ z-order ์ถฉ๋์ด ์๋์ง ํ์ธํ์ธ์.
46-46: ์์คํ ์ธ์ ์ฒ๋ฆฌ๋ฅผ ํ์ธํ์ธ์.
WindowInsets(0, 0, 0, 0)๋ก ๋ช ์์ ์ผ๋ก ์ค์ ํ๋ฉด ๋ ธ์น๋ ๋ฅ๊ทผ ๋ชจ์๋ฆฌ๊ฐ ์๋ ๊ธฐ๊ธฐ์์ ์์คํ ๋ฐ ์์ญ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ๋์ง ์์ ์ ์์ต๋๋ค.
47-57: ๋๋๊ทธ ํธ๋ค ์ถ๊ฐ๊ฐ ์ข์ต๋๋ค.์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ์๊ฐ์ ๋๋๊ทธ ํธ๋ค์ด ์ถ๊ฐ๋์์ต๋๋ค.
feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt (3)
123-128: ๋ณ์๋ช ๋ณ๊ฒฝ์ด ์ผ๊ด์ฑ์ ๊ฐ์ ํฉ๋๋ค.
innerPadding์paddingValue๋ก ์ผ๊ด๋๊ฒ ๋ณ๊ฒฝํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ์ด ํฅ์๋์์ต๋๋ค.
437-481: Popup์ ํด์ ๋ถ๊ฐ ๋์์ ๊ฒ์ฆํ์ธ์.์ค๋ต๋ฐ๊ฐ
Popup์ผ๋ก ๋ํ๋์ดdismissOnBackPress = false์dismissOnClickOutside = false๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ์ค๋ต๋ฐ๋ฅผ ์๋์ผ๋ก ํด์ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ๋ชจ๋ ์ค๋ต๋ฐ ํ์ ์์ ์ด๊ฒ์ด ์๋๋ ๋์์ธ์ง ํ์ธํ์ธ์.
440-440: ํ๋์ฝ๋ฉ๋ ์คํ์ ๊ฐ์ ํ์ธํ์ธ์.์คํ์ ์ด
IntOffset(0, -32)๋ก ํ๋์ฝ๋ฉ๋์ด ์์ต๋๋ค. ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ๋ฐฉํฅ์์ ์ค๋ต๋ฐ ์์น๊ฐ ์ ์ ํ์ง ํ์ธํ์ธ์.core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/SolplyPlaceCard.kt (2)
87-100: null ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ๋ํ ๋์์ ๋ช ํํ ํ์ธ์.
imgRes๊ฐnull์ผ ๋AdaptationImage๊ฐ ๋ ๋๋ง๋์ง ์์ผ๋ฉฐ, ๊ฒฐ๊ณผ์ ์ผ๋กisImageReady๊ฐ ํญ์false๋ก ์ ์ง๋ฉ๋๋ค. ์ด๋ ์ด๋ฏธ์ง๊ฐ ์๋ ์นด๋๋ฅผ ํด๋ฆญํ ์ ์๊ฒ ๋ง๋ญ๋๋ค (line 64์touchable && isImageReady์กฐ๊ฑด). ์ด๊ฒ์ด ์๋๋ ๋์์ธ์ง ํ์ธํ์ธ์. ์ด๋ฏธ์ง๊ฐ ์๋ ์ฅ์ ์นด๋๋ ํด๋ฆญ ๊ฐ๋ฅํด์ผ ํ ์ ์์ต๋๋ค.์ด๋ฏธ์ง๊ฐ ์์ด๋ ์นด๋๋ฅผ ํด๋ฆญ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด:
Column( modifier = modifier .fillMaxWidth() .then( - if (touchable && isImageReady) { + if (touchable && (isImageReady || imgRes == null)) { Modifier.customClickable(rippleEnabled = false) { onClick() } } else { Modifier } ),
42-42: ๊ฒํ ์๊ฒฌ์ด ๋ถ์ ํํฉ๋๋ค - Kotlin ํ์ ์์คํ ์ ๋ํ ์คํด์ ๋๋ค.
imgResํ๋ผ๋ฏธํฐ๋ฅผString์์String?๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ Kotlin์์ breaking change๊ฐ ์๋๋๋ค. Kotlin์ ํ์ ํธํ์ฑ ๊ท์น์ ๋ฐ๋ฅด๋ฉด, ๋งค๊ฐ๋ณ์์ null ๊ฐ๋ฅ์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ **์ญ๋ฐฉํฅ ํธํ(backward compatible)**์ ๋๋ค. ๊ธฐ์กด ํธ์ถ์๋String๊ฐ์ ๊ณ์String?๋งค๊ฐ๋ณ์์ ์ ๋ฌํ ์ ์์ผ๋ฏ๋ก ์์ ํ ํ์๊ฐ ์์ต๋๋ค.Breaking change๊ฐ ๋๋ ค๋ฉด ๋ฐ๋ ๋ฐฉํฅ์ด์ด์ผ ํฉ๋๋ค (
String?โString์ ๋ชจ๋ ํธ์ถ์๊ฐ null ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ผ ํจ).์ค์ ๋ก ํ์ธ๋ ์ฌํญ:
- ํจ์ ๊ตฌํ์์
if (imgRes != null)์กฐ๊ฑด์ผ๋ก null์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌ- 4๊ฐ ํธ์ถ ์์น ๋ชจ๋ ํธํ ๊ฐ๋ฅํ ๊ฐ ์ ๋ฌ
- ํธ์ถ์ ์ ๋ฐ์ดํธ ๋ถํ์
Likely an incorrect or invalid review comment.
data/place/src/main/java/com/teamsolply/solply/place/repository/PlaceRepositoryImpl.kt (1)
108-108: ํ๋ ์ด๋ฆ ๋ณ๊ฒฝ์ด ์ผ๊ด์ ์ผ๋ก ์ ์ฉ๋์์ต๋๋ค.
dto.mainTag์์dto.primaryTag๋ก ๋ณ๊ฒฝ์ด ๋งคํผ์ ์ผ๊ด๋๊ฒ ์ ์ฉ๋์์ต๋๋ค.data/place/src/main/java/com/teamsolply/solply/place/mapper/PlaceEntityMapper.kt (1)
11-11: ๊ฒ์ฆ ์๋ฃ: ํ๋ ๋งคํ์ด ์ ํํฉ๋๋ค.
PlaceDto์primaryTagํ๋๊ฐ ์กด์ฌํ๋ฉฐ(data/place/src/main/java/com/teamsolply/solply/place/dto/response/GetPlacesResponseDto.kt24๋ฒ ์ค),PlaceEntityMapper.kt11๋ฒ ์ค์ ๋งคํ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋์์ต๋๋ค.mainTag์์primaryTag๋ก์ ํ๋๋ช ๋ณ๊ฒฝ์ด ์ ๋๋ก ๋ฐ์๋์ด ์์ต๋๋ค.feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectPersonaScreen.kt (1)
67-75: ์ ํ๋์ง ์์ ์ํ์์๋ onNextClick์ด ํธ์ถ๋๋ ๋์ ์๋ ํ์ธ ํ์์ด์
isButtonEnabled๊ฐfalse์ฌ๋onNextClick()์ด ํญ์ ์คํ๋ฉ๋๋ค.SolplyBasicButton์ด ์์ฒด์ ์ผ๋ก ๋นํ์ฑํ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์๋๋ค๋ฉด, ํ๋ฅด์๋ ๋ฏธ์ ํ ์ํ์์๋ ์จ๋ณด๋ฉ ๋ค์ ๋จ๊ณ๋ก ์งํ๋ ์ ์์ด์, ์ด ์ผ์ด์ค๋ฅผonNextClick์ชฝ์์ ๊ฒ์ฆ/์ฐจ๋จํ๊ณ ์๋์ง ํ ๋ฒ๋ง ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค.feature/place/src/main/java/com/teamsolply/solply/place/PlaceViewModel.kt (1)
12-12:async๋์ ์ ์ํ import ์ถ๊ฐ๋ ์ ์ ํด ๋ณด์ ๋๋ค์๋
fetchInitInfo์์ ๋ณ๋ ฌ ํธ์ถ์ ์ํดasync๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์กฐ์ ์ผ๊ด๋ import๋ผ์ ๋ฌธ์ ์์ด ๋ณด์ ๋๋ค.domain/place/src/main/java/com/teamsolply/solply/place/model/PlaceEntity.kt (1)
3-9:thumbnailImageUrlnullable ์ ํ์ ๋ฐ๋ฅธ ์ฌ์ฉ์ฒ null ์ฒ๋ฆฌ ํ์ธ ๊ถ์ฅ
thumbnailImageUrl๊ฐString?๋ก ๋ณ๊ฒฝ๋๋ฉด์, ์ด๋ฅผ ์ฌ์ฉํ๋ ๋งคํผ/UI ์ชฝ์์๋ ๋ชจ๋ null ํ์ฉ ์ ์ ๋ก ๋ฐ๋์ด์ผ ํฉ๋๋ค. ์์ฝ์PlaceData.thumbnailUrl๋ nullable๋ก ๋ง์ถฐ์ง ๊ฒ ๊ฐ์ง๋ง,
!!.,- ๋ฐ๋ก ์ด๋ฏธ์ง ๋ก๋์ ๋๊ธฐ๋ฉด์ null์ ๊ณ ๋ คํ์ง ์๋ ์ฝ๋,
๊ฐ ๋จ์ ์์ผ๋ฉด ๋ฐํ์ NPE๋ ํ๋ ์ด์คํ๋ ๋ฏธํ์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์ผ๋, ํด๋น ํ๋ ์ฌ์ฉ์ฒ ํ ๋ฒ๋ง ์ ์ฒด์ ์ผ๋ก ์ค์บํด ๋ด ์ฃผ์๋ฉด ์ข๊ฒ ์ต๋๋ค.
feature/place/src/main/java/com/teamsolply/solply/place/model/PlaceData.kt (1)
8-8: nullable ๋ณ๊ฒฝ ์ฌํญ ํ์ธ ์๋ฃ
thumbnailUrl์ nullable๋ก ๋ณ๊ฒฝํ ๊ฒ์ API ์๋ต์์ ์ธ๋ค์ผ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ ์ ํ ๋ณ๊ฒฝ์ ๋๋ค. ๊ด๋ จ๋ PlaceEntity, PlaceDto ๋ฑ ๋ฐ์ดํฐ ๋ ์ด์ด ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋๊ฒ ์ ์ฉ๋์์ต๋๋ค.feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/NamingScreen.kt (1)
69-70: ์กฐ๊ฑด๋ถ ๊ฐ๋ ์ ๊ฑฐ ํ์ธonClick ํธ๋ค๋ฌ์์
state.isOnBoardingSuccess์ฒดํฌ๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฌด์กฐ๊ฑดShowStartingScreen์ ํธ์ถํ๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. AI summary์ ๋ฐ๋ฅด๋ฉดSolplyBasicButton์ดselected์ํ์ผ ๋๋ง ๋ด๋ถ์ ์ผ๋ก onClick์ ์ ๋ฌํ๋ฏ๋ก, ๊ฐ๋ ๋ก์ง์ด ์ปดํฌ๋ํธ ๋ ๋ฒจ๋ก ์ด๋ํ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectTownScreen.kt (2)
141-141: ์กฐ๊ฑด๋ถ ๊ฐ๋ ์ ๊ฑฐ - ์ผ๊ด๋ ํจํด"์๋ฃ" ๋ฒํผ์ onClick ํธ๋ค๋ฌ์์
isButtonEnabled์ฒดํฌ๋ฅผ ์ ๊ฑฐํ์ต๋๋ค.SolplyBasicButton์ดselected์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ด๋ถ์ ์ผ๋ก ํด๋ฆญ์ ์ฒ๋ฆฌํ๋ฏ๋ก, NamingScreen ๋ฐ ๋ค๋ฅธ ์จ๋ณด๋ฉ ํ๋ฉด๋ค๊ณผ ์ผ๊ด๋ ํจํด์ ๋๋ค.
157-157: ์กฐ๊ฑด๋ถ ๊ฐ๋ ์ ๊ฑฐ ํ์ธ"๋ค์" ๋ฒํผ๋ ๋์ผํ๊ฒ ์กฐ๊ฑด๋ถ ๊ฐ๋๊ฐ ์ ๊ฑฐ๋์์ผ๋ฉฐ, ๋ฒํผ ์ปดํฌ๋ํธ ๋ ๋ฒจ์์ ์ํ ๊ด๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค.
remote/place/src/main/java/com/teamsolply/solply/place/datasource/PlaceRemoteDataSourceImpl.kt (1)
37-50: API ํ๋ผ๋ฏธํฐ ์ด๋ฆ ๋ณ๊ฒฝ ํ์ธ
subTag1Ids/subTag2Ids๋ฅผsubTagAIdList/subTagBIdList๋ก ๋ณ๊ฒฝํ์ต๋๋ค. null ์ฒดํฌ ๋ฐ ์ผํ ๊ตฌ๋ถ ๋ฌธ์์ด ๋ณํ ๋ก์ง์ ๊ทธ๋๋ก ์ ์ง๋์ด ๊ธฐ๋ฅ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. PlaceService์ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ด๋ฆ๊ณผ๋ ์ผ๊ด๋๊ฒ ์ ๋ ฌ๋์์ต๋๋ค.remote/place/src/main/java/com/teamsolply/solply/place/service/PlaceService.kt (1)
32-33: Retrofit ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ด๋ฆ ๋ณ๊ฒฝAPI ๊ณ์ฝ์ ๋ง์ถฐ ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์
subTag1Ids/subTag2Ids์์subTagAIdList/subTagBIdList๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ํ๋ผ๋ฏธํฐ ํ์ ์ ๋์ผํ๊ฒ ์ ์ง๋์ด ์์ต๋๋ค.feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/EditCourseBottomSheet.kt (4)
83-84: ์ ์ฝ๋ฐฑ ํ๋ผ๋ฏธํฐ ์ถ๊ฐ์ฝ์ค ํธ์ง ์๋ฃ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ
finishEditCourseClickํ๋ผ๋ฏธํฐ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. MapsViewModel์ ์๋ก์ด intent์ ํจ๊ป ์ฝ์ค ํธ์ง ํ๋ก์ฐ๋ฅผ ๊ฐ์ ํ๋ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ค.
151-151: ๊ฐ๊ฒฉ ์กฐ์ ์ฝ์ค ์ด๋ฆ ํ๋จ ํจ๋ฉ์ด 4.dp์์ 8.dp๋ก ์ฆ๊ฐํ์ต๋๋ค. ์๊ฐ์ ๊ฐ๊ฒฉ ๊ฐ์ ์ ์ํ ๋ง์ด๋ UI ์กฐ์ ์ ๋๋ค.
158-162: ํธ์ง ์์ด์ฝ ํด๋ฆญ ๊ฐ๋ฅ ์์ญ ๊ฐ์ํธ์ง ์์ด์ฝ์
customClickable์ ์ ์ฉํ๊ณ ํฌ๊ธฐ๋ฅผ 24.dp์์ 28.dp๋ก ์ฆ๊ฐ์์ผ ํฐ์น ์์ญ์ด ๊ฐ์ ๋์์ต๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ ํฅ์์ ๋์์ด ๋ฉ๋๋ค.
300-300: ์๋ฃ ๋ฒํผ ๋์ ๋ณ๊ฒฝ"์๋ฃ" ๋ฒํผ์ด ์ด์
finishEditCourseClick()์ ํธ์ถํฉ๋๋ค. ์๋ก์ด ์ฝ๋ฐฑ ๊ตฌ์กฐ์ ์ผ๊ด๋ ๋ณ๊ฒฝ์ ๋๋ค.core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/card/RegisterPlaceImage.kt (2)
37-37: ์ด๋ฏธ์ง ์ ํ ํด์ ๊ธฐ๋ฅ ์ถ๊ฐ
resetSelectedUrisํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ์ฌ ์ ํ๋ ์ด๋ฏธ์ง๋ฅผ ํญํ์ฌ ์ ๊ฑฐํ ์ ์๋ ๊ธฐ๋ฅ์ด ๊ตฌํ๋์์ต๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ ์ ๋์์ด ๋๋ ๋ณ๊ฒฝ์ ๋๋ค.
51-54: ์ ํ๋ ์ด๋ฏธ์ง ํด๋ฆญ ์ฒ๋ฆฌ์ ํ๋ ์ด๋ฏธ์ง์
customClickable์ ์ ์ฉํ์ฌ ํด๋ฆญ ์resetSelectedUris(index)๋ฅผ ํธ์ถํ๋๋ก ๊ตฌํ๋์์ต๋๋ค. ์ง๊ด์ ์ธ ์ด๋ฏธ์ง ์ ๊ฑฐ UX๋ฅผ ์ ๊ณตํฉ๋๋ค.feature/place/src/main/java/com/teamsolply/solply/place/PlaceScreen.kt (2)
234-235: ๊ฐ์ธํ๋ ์ถ์ฒ ํ ์คํธ ๊ธฐ๋ฅ ์ถ๊ฐ
CustomHorizontalPager์persona์nicknameํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ์ฌ ์ฌ์ฉ์ ๋ง์ถคํ ์ถ์ฒ ํค๋๋ฅผ ํ์ํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ธํํ๋ ์ข์ ๊ฐ์ ์ ๋๋ค.
404-420: ๊ทธ๋ผ๋ฐ์ด์ ๋ฐฐ๊ฒฝ ๋ฐ ์ถ์ฒ ํค๋ UI ์ถ๊ฐ์ถ์ฒ ์์ญ์ ๊ทธ๋ผ๋ฐ์ด์ ๋ฐฐ๊ฒฝ๊ณผ persona ๊ธฐ๋ฐ ์ถ์ฒ ํ ์คํธ ํค๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์๊ฐ์ ์ผ๋ก ์น์ ์ ๊ตฌ๋ถํ๊ณ ๊ฐ์ธํ๋ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ์ฌ UX๊ฐ ํฅ์๋์์ต๋๋ค.
data/place/src/main/java/com/teamsolply/solply/place/dto/response/GetPlacesResponseDto.kt (3)
23-24: ํ๋๋ช ๋ณ๊ฒฝ ํ์ธ
mainTag์์primaryTag๋ก ํ๋๋ช ์ด ๋ณ๊ฒฝ๋์์ต๋๋ค. ๋ฐฑ์๋ API ์คํ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ, ์์ฝ์ ๋ฐ๋ฅด๋ฉด ๊ด๋ จ ๋งคํผ(PlaceEntityMapper, PlaceRepositoryImpl)๋ ํจ๊ป ์ ๋ฐ์ดํธ๋์๋ค๊ณ ๋ช ์๋์ด ์์ต๋๋ค.
29-30: ์๋ก์ด ํ์ ํ๋ ์ถ๊ฐ
townIdํ๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ๋ฐฑ์๋ API๊ฐ ์ด ํ๋๋ฅผ ํญ์ ์ ๊ณตํ๋์ง, ๊ธฐ์กด ์ง๋ ฌํ๋ ๋ฐ์ดํฐ์์ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํด์ฃผ์ธ์.
21-21: ๋ฆฌ๋ทฐ ์๊ฒฌ์ด ๋ถ์ ํํฉ๋๋ค๊ฒ์ฆ ๊ฒฐ๊ณผ,
thumbnailImageUrlํ๋ ๋ณ๊ฒฝ์ null ์ฒ๋ฆฌ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ์ง ์์ต๋๋ค.
GetPlacesResponseDto.PlaceDto(String?) โPlaceEntity(String?): ํ์ ์ผ์นPlaceViewModel์์PlaceData.thumbnailUrl(String?): null ์์ RecommendPlaceInfo์SearchResultEntity๋ ๋ณ๋ DTO ์ฌ์ฉ์ผ๋ก ์ํฅ ์์์ด ๋ณ๊ฒฝ์ ๋ฐ์ดํฐ ๊ณ์ธต ๋ด์์ ์ผ๊ด์ฑ ์๊ฒ ์ฒ๋ฆฌ๋๋ฉฐ, UI ์ปดํฌ๋ํธ๋ ์ด๋ฏธ nullable ๊ฐ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.
feature/search/src/main/java/com/teamsolply/solply/registerplace/RegisterPlaceScreen.kt (3)
221-221: ์๋จ ํจ๋ฉ ์ฆ๊ฐ์๋จ ํจ๋ฉ์ด 16.dp์์ 50.dp๋ก ์ฆ๊ฐํ์ต๋๋ค. ์์คํ ์ํ ํ์์ค ์์ญ์ ๊ณ ๋ คํ ์กฐ์ ์ผ๋ก ๋ณด์ด๋ฉฐ, PR ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋๊ฒ ์ ์ฉ๋ ๊ฒ์ผ๋ก ํ์ธ๋ฉ๋๋ค.
536-540: Shape ๊ฐ์ํค์๋ ๋ฒํผ์ shape์
RoundedCornerShape(16.dp)์์CircleShape์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ๋ ๋ช ํํ ์๋ฏธ๋ฅผ ์ ๋ฌํ๋ฉฐ ์๊ฐ์ ์ผ๋ก๋ ์ ์ ํ ๊ฐ์ ์ ๋๋ค.
129-131: ์ ํ๋ URI ๋ฆฌ์ ๊ธฐ๋ฅ ์ถ๊ฐ
resetSelectedUris์ฝ๋ฐฑ์ด ์ถ๊ฐ๋์ด ํน์ ์ธ๋ฑ์ค์ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํ ์ ์๊ฒ ๋์์ต๋๋ค. Composition ๊ณ์ธต์ ํตํด ์ ์ ํ ์ ๋ฌ๋๊ณ ์์ผ๋ฉฐ ๊ตฌํ์ด ๊น๋ํฉ๋๋ค.Also applies to: 175-175, 462-462
feature/maps/src/main/java/com/teamsolply/solply/maps/MapsScreen.kt (3)
484-487: ์ง๋ UI ์ค์ ์ถ๊ฐ๋ค์ด๋ฒ ์ง๋์ ๊ธฐ๋ณธ ์ค ์ปจํธ๋กค๊ณผ ๋์นจ๋ฐ์ ๋นํ์ฑํํ์ต๋๋ค. ์ปค์คํ UI๋ฅผ ์ํ ์ ์ ํ ์ค์ ์ ๋๋ค.
286-286: ์ฝ์ค ํธ์ง ๋ฐ ์ด๋ฆ ๋ณ๊ฒฝ ํ๋ก์ฐ ๊ฐ์
finishEditCourseClick์onChangeRenameCourse์ฝ๋ฐฑ์ด ์ถ๊ฐ๋์ด ํธ์ง ์๋ฃ ๋ฐ ์ฝ์ค ์ ๋ณด ์ ๋ฐ์ดํธ ํ๋ฆ์ด ๊ฐ์ ๋์์ต๋๋ค. Composition ๊ณ์ธต์ ํตํด ์ผ๊ด๋๊ฒ ์ ๋ฌ๋๊ณ ์์ต๋๋ค.Also applies to: 355-357, 404-404, 658-658
335-337: ์ ๋ณด ์ด๋ฏธ์ง ๋ฆฌ์ ๊ธฐ๋ฅ ์ถ๊ฐ
resetSelectedUris์ฝ๋ฐฑ์ด ReportPlaceDialog์ ์ถ๊ฐ๋์ด ๊ฐ๋ณ ์ด๋ฏธ์ง ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค. Intent ์์คํ ๊ณผ ์ ํตํฉ๋์ด ์์ต๋๋ค.feature/maps/src/main/java/com/teamsolply/solply/maps/MapsViewModel.kt (3)
269-275: ์ฝ์ค ์ด๋ฆ ๋ณ๊ฒฝ UI ์ํ ์ด๊ธฐํ๋ฐํ ์ํธ๋ฅผ ์ด ๋ ํ์ฌ ์ฝ์ค ์ ๋ณด๋ฅผ ํธ์ง ํ๋์ ๋ฏธ๋ฆฌ ๋ก๋ํฉ๋๋ค. ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ์ข์ ๊ตฌํ์ ๋๋ค.
277-284: ์ฝ์ค ์ ๋ณด ์ ๋ฐ์ดํธ ๋ก์ง ์ถ๊ฐ
ChangeRenameCourseIntent๊ฐ ์ถ๊ฐ๋์ด ์ฝ์ค๋ช ๊ณผ ์๊ฐ๋ฅผ ์ฆ์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค. ๊ตฌํ์ด ๊น๋ํฉ๋๋ค.
337-342: URI ๋ฆฌ์ ๋ก์ง ๊ตฌํ
ResetSelectedUrisIntent๊ฐ ์ถ๊ฐ๋์ด ํน์ ์ธ๋ฑ์ค์ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ๊ฒฝ๊ณ ๊ฒ์ฌ๋ฅผ ํฌํจํ์ฌ ์์ ํ๊ฒ ๊ตฌํ๋์ด ์์ต๋๋ค.feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/RenameCourseBottomSheet.kt (3)
128-132: ์ ๋ ฅ ๊ธธ์ด ์ ํ ๊ตฌํ์ฝ์ค ์ด๋ฆ(18์)๊ณผ ์๊ฐ(20์)์ ๋ํ ์ ๋ ฅ ๊ธธ์ด ์ ํ์ด ์ ์ ํ ๊ตฌํ๋์ด ์์ต๋๋ค.
Also applies to: 153-157
135-142: ๊ธ์ ์ ํ์ ์ถ๊ฐ์ ๋ ฅ ํ๋ ํ๋จ์ ํ์ฌ ๊ธ์ ์๋ฅผ ํ์ํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ช ํํ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. ์ข์ UX ๊ฐ์ ์ ๋๋ค.
Also applies to: 160-166
98-118: ํค๋ ๋ ์ด์์ ๊ฐ์ํค๋๋ฅผ Box์์ Row๋ก ๋ณ๊ฒฝํ์ฌ ๋ ์๋ฏธ๋ก ์ ์ผ๋ก ๋ช ํํ ๋ ์ด์์ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค.
feature/maps/src/main/java/com/teamsolply/solply/maps/component/dialog/ReportPlaceDialog.kt (3)
90-103: Dialog์์ Popup์ผ๋ก ์ ํDialog ๋์ Popup์ ์ฌ์ฉํ์ฌ ๋ ์ธ๋ฐํ ๋์ ์ ์ด๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค. WindowInsets ์ฒ๋ฆฌ๋ฅผ ํตํด ์์คํ UI์์ ๊ฒน์นจ์ ๋ฐฉ์งํ๊ณ ,
dismissOnClickOutside = false์ค์ ์ผ๋ก ์ค์๋ก ๋ซํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.์ค์ฒฉ๋ Box ๊ตฌ์กฐ๊ฐ ๋ค์ ๋ณต์กํด ๋ณด์ด์ง๋ง, Popup์ ์ ์ฒด ํ๋ฉด ๋ ์ด์์๊ณผ ์ ์ ํ ํจ๋ฉ ์ฒ๋ฆฌ๋ฅผ ์ํด ํ์ํ ๊ฒ์ผ๋ก ํ๋จ๋ฉ๋๋ค.
Also applies to: 104-240
81-81: ์ด๋ฏธ์ง ๋ฆฌ์ ๊ธฐ๋ฅ ํตํฉ
resetSelectedUris์ฝ๋ฐฑ์ด ReportPlaceDialog โ ReportContentScreen โ RegisterPlaceImage๋ก ์ ์ ํ ์ ๋ฌ๋์ด ์ ๋ณด ๋ค์ด์ผ๋ก๊ทธ์์๋ ์ด๋ฏธ์ง ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค.Also applies to: 191-191, 298-298, 366-366
145-170: ํค๋ ๋ค๋น๊ฒ์ด์ ์ถ๊ฐ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ๊ณผ ์ ๋ชฉ์ด ํฌํจ๋ ํค๋๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ํ์ด์ ํ์ด์ง์ ๋ฐ๋ผ ๋์์ด ์ ์ ํ ๋ณ๊ฒฝ๋ฉ๋๋ค (์ฒซ ํ์ด์ง: ๋ซ๊ธฐ, ๋ ๋ฒ์งธ ํ์ด์ง: ์ด์ ์ผ๋ก).
| @SerialName("townName") val townName: String, | ||
| @SerialName("parentTownId") val parentTownId: Long? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๐งฉ Analysis chain
DTO ๊ตฌ์กฐ ๋ณ๊ฒฝ ๋ฐ ํ์ ํ๋ ์ถ๊ฐ
TownNodeDto๊ฐ ์ค์ฒฉ ๊ตฌ์กฐ์์ ํ๋ฉด ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค:
townName์ด nullable์์ non-nullable๋ก ๋ณ๊ฒฝ (ํ์ ํ๋)parentTownId์ถ๊ฐ (๋ถ๋ชจ-์์ ๊ด๊ณ ํํ)- ๊ธฐ์กด
name,subTownsํ๋ ์ ๊ฑฐ
๋ฐฑ์๋ API๊ฐ townName์ ํญ์ ์ ๊ณตํ๋์ง ํ์ธํด์ฃผ์ธ์. null์ด ์ ์ก๋๋ฉด ์ญ์ง๋ ฌํ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๐ Script executed:
#!/bin/bash
# TownNodeDto ์ฌ์ฉ์ฒ ํ์ธ
rg -nP --type=kotlin -C3 'TownNodeDto' -g '!**/test/**'Length of output: 1378
Let me check the complete TownNodeDto definition to see all fields:Based on my verification of the Kotlin serialization behavior and the code structure, I can now generate the rewritten review comment:
๋ฐฑ์๋ API ์๋ต ๊ฒ์ฆ ํ์
townName: String์ ํ์ ํ๋์
๋๋ค. kotlinx.serialization์ ๊ธฐ๋ณธ ์ค์ (explicitNulls=true)์์ non-nullable ํ๋๋ JSON์ ๋ฐ๋์ ํฌํจ๋์ด์ผ ํ๋ฏ๋ก, ๋ฐฑ์๋๊ฐ ์ด ํ๋๋ฅผ ํญ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
๋ํ parentTownId: Long?์ ํ์ฌ ๊ธฐ๋ณธ๊ฐ์ด ์๋ nullable ํ๋์ด๋ฏ๋ก, ๊ธฐ๋ณธ๊ฐ์ด ์์ด์ผ kotlinx.serialization์์ ์ ํ์ ํ๋๋ก ์ทจ๊ธ๋ฉ๋๋ค. ์ต์์ ์ง์ญ(๋ถ๋ชจ๊ฐ ์๋)์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ parentTownId: Long? = null๋ก ์์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
- ๋ฐฑ์๋ API ์๋ต์์
townName์ด ํญ์ ์กด์ฌํ๊ณ null์ด ์๋์ง ํ์ธ parentTownId๊ฐ ์ ํ์ ํ๋์ธ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ ํ ๋น ๊ถ์ฅ
๐ค Prompt for AI Agents
In
data/course/src/main/java/com/teamsolply/solply/course/favoriteTown/dto/TownTreeResponseDto.kt
around lines 14-15, the DTO declares townName: String (non-nullable) and
parentTownId: Long? (nullable without default); ensure the backend always
supplies a non-null townName, and make parentTownId optional by giving it a
default value so kotlinx.serialization treats it as optional โ change
parentTownId to have a default of null (parentTownId: Long? = null) and verify
the API always returns a non-null townName.
| val isButtonEnabled = newCourseName.isNotEmpty() && | ||
| newCourseName.length != 18 && | ||
| newCourseIntroduction.isNotEmpty() && | ||
| newCourseIntroduction.length != 20 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ฒํผ ํ์ฑํ ๋ก์ง ์ค๋ฅ
๋ฒํผ ํ์ฑํ ์กฐ๊ฑด์ ๋ ผ๋ฆฌ ์ค๋ฅ๊ฐ ์์ต๋๋ค:
- Line 65:
newCourseName.length != 18- ๊ธธ์ด๊ฐ ์ ํํ 18์ผ ๋๋ง ๋ฒํผ์ด ๋นํ์ฑํ๋ฉ๋๋ค - Line 67:
newCourseIntroduction.length != 20- ๊ธธ์ด๊ฐ ์ ํํ 20์ผ ๋๋ง ๋ฒํผ์ด ๋นํ์ฑํ๋ฉ๋๋ค
์ด๋ ์๋ํ ๋์์ด ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ์๋ง๋ ์ต๋ ๊ธธ์ด ์ ํ์ ์ฒดํฌํ๋ ค๊ณ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ ํด์ผ ํฉ๋๋ค:
- val isButtonEnabled = newCourseName.isNotEmpty() &&
- newCourseName.length != 18 &&
- newCourseIntroduction.isNotEmpty() &&
- newCourseIntroduction.length != 20
+ val isButtonEnabled = newCourseName.isNotEmpty() &&
+ newCourseName.length <= 18 &&
+ newCourseIntroduction.isNotEmpty() &&
+ newCourseIntroduction.length <= 20๐ค Prompt for AI Agents
In
feature/maps/src/main/java/com/teamsolply/solply/maps/component/bottomsheet/RenameCourseBottomSheet.kt
around lines 64 to 67, the button-enabled condition incorrectly uses != to check
lengths (disabling only when length equals exactly 18 or 20); change those
checks to enforce maximum length (e.g., newCourseName.length <= 18 and
newCourseIntroduction.length <= 20) while keeping the non-empty checks so the
button is enabled only when both fields are non-empty and within their max
lengths.
| onClick = { onNextClick() }, | ||
| selected = isAllChecked, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ํ์ ์ฝ๊ด ๋์๋ฅผ ์ฐํํ ์ ์๋ ์ค์ํ ๋ฌธ์ ์ ๋๋ค.
"๋ค์" ๋ฒํผ์ onClick์ด isAllChecked ์ํ์ ๊ด๊ณ์์ด ํญ์ ์คํ๋๋๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ํ์ ์ฝ๊ด(๋ง 14์ธ ์ด์, ์๋น์ค ์ด์ฉ ์ฝ๊ด, ๊ฐ์ธ์ ๋ณด ์ฒ๋ฆฌ๋ฐฉ์นจ)์ ๋์ํ์ง ์๊ณ ๋ ๋ค์ ๋จ๊ณ๋ก ์งํํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋ฒ์ /๊ท์ ์ค์ ๋ฌธ์ ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์กฐ๊ฑด๋ถ ๊ฐ๋๋ฅผ ๋ณต์ํ์ธ์:
SolplyBasicButton(
text = "๋ค์",
modifier = Modifier.padding(bottom = 24.dp),
- onClick = { onNextClick() },
+ onClick = { if (isAllChecked) onNextClick() },
selected = isAllChecked,
textStyle = SolplyTheme.typography.button16M,
textColor = if (isAllChecked) SolplyTheme.colors.white else SolplyTheme.colors.gray800,
enabledBackgroundColor = SolplyTheme.colors.gray900,
disabledBackgroundColor = SolplyTheme.colors.gray300
)๐ 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.
| onClick = { onNextClick() }, | |
| selected = isAllChecked, | |
| onClick = { if (isAllChecked) onNextClick() }, | |
| selected = isAllChecked, |
๐ค Prompt for AI Agents
In
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/AllowClauseScreen.kt
around lines 140-141, the "Next" button's onClick handler is always invoking
onNextClick regardless of isAllChecked; restore the conditional guard so the
handler only proceeds when the user has checked all required consents (e.g.,
only call onNextClick when isAllChecked is true), and ensure the button is
non-actionable otherwise (disable the button or no-op the click) to prevent
bypassing mandatory agreements.
| sideEffect.townId, | ||
| sideEffect.placeId |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๋ค๋น๊ฒ์ด์ ํ๋ผ๋ฏธํฐ ์์ ์ค๋ฅ - ์์ ํ์
navigateToPlaceDetail ํจ์ ํธ์ถ ์ ํ๋ผ๋ฏธํฐ ์์๊ฐ ๋ณ๊ฒฝ๋์์ต๋๋ค. ํจ์ ์๊ทธ๋์ฒ๋ (String, Long, Long)์ด๋ฉฐ (type, placeId, townId) ์์๋ก ๋ฐ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋๋ฐ, ํ์ฌ ์ฝ๋๋ (type, townId, placeId) ์์๋ก ์ ๋ฌํ๊ณ ์์ต๋๋ค.
์ด๋ ์๋ชป๋ ์ฅ์๋ก ์ด๋ํ๊ฑฐ๋ ๋ฐํ์ ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ ์น๋ช ์ ์ธ ๋ฒ๊ทธ์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํด์ผ ํฉ๋๋ค:
is SearchSideEffect.NavigateToPlaceDetail -> navigateToPlaceDetail(
MapsType.PLACE_DETAIL.name,
- sideEffect.townId,
- sideEffect.placeId
+ sideEffect.placeId,
+ sideEffect.townId
)ํจ์ ์๊ทธ๋์ฒ๋ฅผ ํ์ธํ์ฌ ์ฌ๋ฐ๋ฅธ ํ๋ผ๋ฏธํฐ ์์๋ฅผ ์ ์ฉํด์ฃผ์ธ์.
๐ 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.
| sideEffect.townId, | |
| sideEffect.placeId | |
| is SearchSideEffect.NavigateToPlaceDetail -> navigateToPlaceDetail( | |
| MapsType.PLACE_DETAIL.name, | |
| sideEffect.placeId, | |
| sideEffect.townId | |
| ) |
๐ค Prompt for AI Agents
In feature/search/src/main/java/com/teamsolply/solply/search/SearchScreen.kt
around lines 64-65, the call passes navigation parameters in the wrong order
(sideEffect.townId, sideEffect.placeId) while the navigateToPlaceDetail
signature expects (type: String, placeId: Long, townId: Long); swap the second
and third arguments so you call navigateToPlaceDetail(type, sideEffect.placeId,
sideEffect.townId) and ensure the types match the function signature.
ImHyungsuk
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
๊ตฟ๊ตฟ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
๐งน Nitpick comments (1)
feature/place/src/main/java/com/teamsolply/solply/place/PlaceViewModel.kt (1)
165-180: ๋ณ๋ ฌ ๋ก๋ฉ์ผ๋ก ์ฑ๋ฅ ๊ฐ์ ์ด ์ข์ต๋๋ค๋ง, ์๋ฌ ํธ๋ค๋ง์ ๊ณ ๋ คํด๋ณด์ธ์.์ธ ๊ฐ์ ๋ฐ์ดํฐ ๋ก๋ฉ ์์ ์ ๋ณ๋ ฌ๋ก ์คํํ์ฌ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ ๊ฒ์ ์ข์ ๋ณ๊ฒฝ์ ๋๋ค. ๋ค๋ง async ๋ธ๋ก ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด await() ํธ์ถ ์ ์์ธ๊ฐ ์ ํ๋์ด ๋ค๋ฅธ ์์ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ง ๋ชปํ๊ณ ์ํ๊ฐ ๋ถ์์ ํ๊ฒ ๋จ์ ์ ์์ต๋๋ค.
๋ถ๋ถ ์คํจ ์์๋ ์ฑ๊ณตํ ๋ฐ์ดํฐ๋ ํ์ํ ์ ์๋๋ก ๊ฐ๋ณ try-catch ์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
๐ ์๋ฌ ํธ๋ค๋ง ๊ฐ์ ์์
- val placesJob = async { - fetchPlaces( - townId = userInfo.selectedTown.townId, - mainTagId = null, - subTagAIdList = null, - subTagBIdList = null - ) - } - val recommendJob = async { - fetchRecommendPlace(townId = userInfo.selectedTown.townId) - } - val mainTagsJob = async { fetchMainTags() } - - placesJob.await() - recommendJob.await() - mainTagsJob.await() + val placesJob = async { + runCatching { + fetchPlaces( + townId = userInfo.selectedTown.townId, + mainTagId = null, + subTagAIdList = null, + subTagBIdList = null + ) + } + } + val recommendJob = async { + runCatching { + fetchRecommendPlace(townId = userInfo.selectedTown.townId) + } + } + val mainTagsJob = async { + runCatching { fetchMainTags() } + } + + placesJob.await() + recommendJob.await() + mainTagsJob.await()
๐ Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
๐ Files selected for processing (1)
feature/place/src/main/java/com/teamsolply/solply/place/PlaceViewModel.kt
๐ Additional comments (2)
feature/place/src/main/java/com/teamsolply/solply/place/PlaceViewModel.kt (2)
12-12: LGTM!๋ณ๋ ฌ ์คํ์ ์ํด ํ์ํ import๊ฐ ์ ์ ํ๊ฒ ์ถ๊ฐ๋์์ต๋๋ค.
256-256: PlaceType ๋งคํ ๋ก์ง์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.
valueOf์์fromApiName์ผ๋ก์ ๋ณ๊ฒฝ์ ์ ์ ํ ์์ ์ ๋๋ค.fromApiName๋ฉ์๋๋ API ์๋ต์ ํ๊ธ ์ด๋ฆ์ PlaceType ์ด๊ฑฐํ์ผ๋ก ๋งคํํ๋ฉฐ, ์ ์ ์๋ API ์ด๋ฆ์ ๋ฐ์ ๊ฒฝ์ฐALL๋ก ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํ์ฌ ์์ ํ๊ฒ ์ฒ๋ฆฌํฉ๋๋ค.valueOf์ฒ๋ผ ์์ธ๋ฅผ ๋ฐ์์ํค์ง ์๊ณ gracefulํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ตฌํ์ ๋๋ค.
๐ PR ์์ฝ
๐ฑ ์์ ํ ๋ด์ฉ
๐ฑ PR ํฌ์ธํธ
๐ธ ์คํฌ๋ฆฐ์ท
๐ฎ ๊ด๋ จ ์ด์
Summary by CodeRabbit
๋ฆด๋ฆฌ์ค ๋ ธํธ
์ ๊ธฐ๋ฅ
UI ๊ฐ์
์ฑ๋ฅ
โ๏ธ Tip: You can customize this high-level summary in your review settings.