-
Notifications
You must be signed in to change notification settings - Fork 0
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
정보수정제안 v1 MR #172
정보수정제안 v1 MR #172
Conversation
|
다음부터는 리뷰어로 저 선택해주세여 그래야 메일 알림이 와서 알수가 있어가지공 |
지금 보니까 domain 모듈 model 패키지의 entity 의 parameter 들이 어떤건 public 이 붙어있고, 어떤건 안붙어있군요 다 없애버려도 될 것 같은데 이건 제가 하도록 하겠습니다 => 이게 어느 부분인지 잘 모르겠는데 예시 하나만 긁어주실 수 있으신가요? |
@@ -8,6 +8,6 @@ | |||
package us.wedemy.eggeum.android.domain.model.place | |||
|
|||
public data class ProductEntity( | |||
val name: String, | |||
val price: Int, | |||
var name: String, |
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.
entity Paramter 를 var 로 변경하신 이유가 있으신가요
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.
[ProposeCafeInfoViewModel]에서
placeBody.menu?.products.let { productEntities -> productEntities?.forEach { if (it.name == before?.name && it.price == before.price) { it.name = after?.name!! it.price = after.price } } }
여기서 일단 이렇게 구현을 해버려서 그랬습니다. 여기도 수정해야겠네요
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.
todo
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.
객체를 복사해서 변경 하는 .copy() 같은 함수 사용하면 var로 선언하지 않아도 값 자체를 변경할 수 있습니다. uiState.update { it.copy() 이런식으로 } 내부 값을 변경하는 함수가 main 모듈의 UserInfoViewModel 같은 곳에 사용되고 있는데 참고해보시면 좋을 것 같아요
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.
다음에 반영해볼게요
@@ -163,31 +154,43 @@ class InputCafeInfoFragment : BaseFragment<FragmentInputCafeInfoBinding>() { | |||
private fun initObserver() { | |||
repeatOnStarted { | |||
launch { | |||
viewModel.uiState.collect { uiState -> | |||
viewModel.cafeInfo.collect { cafeInfo -> | |||
with(binding) { |
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.
kotlin 에서 with 은 이미 초기화된 객체에 대한 연산을 수행할때 사용합니다. 그래서 이때는 객체의 초기화나 설정을 할때 사용하는 apply가 더 적절합니다 binding.apply { } 로 변경해주세여
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.
done
|
||
import us.wedemy.eggeum.android.domain.model.place.InfoEntity | ||
|
||
data class CafeInfoItem( |
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.
사실 아예 바뀌는 변수가 존재하지 않는다면 딱히 mapper 를 만들어주지 않고 InfoEntity 그대로 뷰에서 사용해도 되긴힙니다. 그런데 이건 취향 차이라 그대로 둬도 괜찮을것 같아요
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.
음 뭐 entity data class 의 포함된 파라미터를 전부다 사용할 필요가 없다던지, 가공이 필요하다던지, 말씀하신대로 데이터 타입이 변경될일이 있을땐 타입 캐스팅을 해줘야할 수도 있고, model 자체를 네비게이션의 argument 로 전달해야해서 @parcelize 같은 어노테이션을 붙여야되는데 이건 순수 코틀린 모듈(domain 모듈)인 경우엔 붙히지 못해서요 그래서 어쩔수없이 매퍼를 통해 android 모듈쪽 클래스로 매핑해주는 작업이 필요하더라구요
뒤에 붙은 PR title 뒤에 MR 무슨 의미인가요? -> 아.. 깃랩이랑 착각했네요 |
val websiteUri: String?, | ||
) { | ||
public companion object { | ||
public fun of( |
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.
해당 companion object 내에 함수(of) 가 잘 이해가 안되는데 어떤 역할을 하는 함수인가요?
mapper 의 역할이라면 기존의 방식과 동일하게 바꾸면 좋을것 같아요 (mapper 패키지내에 mapper 를 만들어주는)
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.
viewModel에서 데이터 관리하면, 없어져야 할 부분이라 생각하는데
이렇게 많은 변수를 다뤄본 적이 없어서 그냥 빌더패턴으로 객체 만들어서 넘겼습니다.
@@ -26,37 +31,194 @@ class InputCafeInfoFragment : BaseFragment<FragmentInputCafeInfoBinding>() { | |||
|
|||
private val viewModel by viewModels<InputCafeInfoViewModel>() | |||
|
|||
private var cafeArea = "" |
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.
이런식으로 뷰에서 변수를 선언하게 되면 구현함에 있어 간단하긴한데 configuration change 가 발생하게 되면 모든 데이터가 다 날라가게 됩니다. 화면을 가로로 돌린다던지, 다크모드로 바꾼다던지, 글씨 크기를 바꾼다던지... 와 같은 상황에서 configuration change 가 발생하게 되어서, 뷰모델로 변수의 위치를 옮기면 config change 에서도 그 데이터들이 유지되는 장점이 있습니다
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.
todo
private var cafePhone = "" | ||
|
||
private var cafeName: String = "" | ||
private val guideMessage = "정보를 입력해주세요!" |
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.
하드코딩된 문자열 같은 경우엔 string resource 로 빼내서 관리해주세여
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.
todo
when { | ||
result.isSuccess && result.getOrNull() != null -> { | ||
val placeBody = result.getOrNull()!! | ||
Timber.d("plcaeBody >>> $placeBody") |
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.
done
private val viewModel by viewModels<SelectCafeMenuViewModel>() | ||
private val viewModel by activityViewModels<ProposeCafeInfoViewModel>() | ||
|
||
private var callCount = 0 |
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.
마찬가지로 config change 발생하면 의미 없어지는 방식이라 그냥 갱신을 위해 화면이 호출될때마다 api를 호출되게 하는게 맘 편할 수도 있고 꼭 한번만 호출시켜야 겠다 생각들면 viewModel 내에 init 블럭내에서 해당 api를 호출하면 됩니다.
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.
todo
메뉴 수정 또는 카페 정보 수정이 완료된 이후 다음 버튼을 눌렀을 때 다시 처음 화면 (어떤 것을 개선하고 싶으세요?) 화면으로 이동하는 로직이 누락되어 있는데, 이번 또는 다음 피처에서 구현 부탁드려요 => 아 아예 기존 main activity인 지도로 돌아가는 줄 알았습니다. 수정할게요 |
메뉴 수정시, 가격의 자릿수가 늘어날 경우 3자리씩 , 로 끊어주는 로직이 필요합니다. 구현하는데 어려움이 있다면 제가 나중에 할게여 예전에 만들어놨던 함수가 있어가지고 => 넵, 감사합니다. 지훈님 코드 반영되면 공부하겠습니다. |
…android into feature/update-cafe-place
피드백 반영 당장 하실 수 있는 것들 먼저 하시구, 다음 피처때(merge 한 이후에) 남은 피드백 반영하시겠다고 알려주시면 approve 누르겠습니다 => 피드백 일부 반영했습니다. 다음 피처에서 아래 내용 추가해서 코드 수정할게요.
|
// domain 모듈 Entity -> FileEntity
public data class FileEntity(
public val uploadFileId: Int, // <- 그냥 val 이라고 해도 default 가 public 이라 상관없을것 같아서요
val url: String,
val url: String?,
) |
=> 아 아예 기존 main activity인 지도로 돌아가는 줄 알았습니다. 수정할게요 같은 로직이 main 모듈의 유저 정보화면내에 문의하기 화면(reportFragment)에 구현되어있는데 거기에 있는 navigation 로직 참고해서 똑같은 패턴으로 구현하면 될거에여 ==> 이 부분 반영했습니다 |
@@ -122,7 +122,11 @@ | |||
android:id="@+id/fragment_update_menu_complete" | |||
android:name="us.wedemy.eggeum.android.updatecafe.ui.UpdateMenuCompleteFragment" | |||
android:label="UpdateMenuCompleteFragment" | |||
tools:layout="@layout/fragment_update_menu_complete" /> | |||
tools:layout="@layout/fragment_update_menu_complete" > | |||
<action |
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.
이렇게만 하면 그냥 위에 fragment(화면)이 하나 쌓이는 꼴이라 이전 화면들이 스택에 남아서 시스템 뒤로가기 버튼등을 누르면 다시 바로 뒤 화면으로 돌아가요 어떻게 처리하는지 문의화면쪽에 있는 코드 확인해주세여
=> 제가 반영 해놨습니다
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.
app:popUpTo="@id/fragment_select_info_categories"
app:popUpToInclusive="true" />
이 부분이 추가된거군요
시스템 백버튼을 눌렀을 때 다시 이전에 수정하는 화면으로 이동되지 않도록
수고하셨어요! 근데 카페 정보를 수정 완료할 경우엔 "정보 수정을 완료 했어요."가 타이틀인 화면으로 이동하는게 맞는것 같군요. 피그마에 건의는 넣어놨습니다. 아마 화면이 추가될 수 도 있을 것 같아요 merge 하시면 됩니다! => 감사합니다 ! |
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.
LGTM
#147 구현 및 메인 화면 코드 반영에 따라 MR 후 추가 작업하겠습니다.
PlaceEntity와 InfoEntity의 경/위도 타입을 제가 nullable하게 해서 지훈님 코드 쪽으로 수정했습니다.
이후에 다이얼로그 및 placeId를 지도로 부터 가져오는 작업하겠습니다.