Conversation
|
ㅜㅜ 이번에도 과제 수행도가 많이 미흡하네요... 차주 내로 솔직한 반성 & 빠른 복구에 들어가겠습니다🥹 |
t1nm1ksun
left a comment
There was a problem hiding this comment.
과제 브랜치 파실 때 이전 주차 브랜치 develop에 머지하고 develop에서 파주세요..!!
대부분의 file들이 Files changed로 인식됩니다 ㅠㅠ
There was a problem hiding this comment.
DTO작성이 매우 자세하네요👍 래퍼클래스를 넣은 이유가 있나요? 궁금해서!!!
There was a problem hiding this comment.
서버 요청이 성공한 경우와 실패한 경우에 사용하는 DTO가 분리되어 있는데, 응답 타입은 늘 하나여야 하니.. 분기 처리를 하는 것보단 WrapperDTO 안에 failedDTO랑 successDTO를 함께 넣어두고 늘 WrapperDTO를 반환하는 방식이 맞다고 생각했어요! 그런데 합세 때 재민님께 꼭 그렇게 하지 않아도 된다는 말씀을 들어서 (그리고 이게 지금 에러의 원인 같아서 😅 방식을 수정해볼 예정입니당)
| import org.sopt.and.model.dto.signup.RequestCreateUserDto | ||
| import org.sopt.and.model.dto.signup.ResponseCreateUserSuccessDto | ||
| import org.sopt.and.model.dto.signup.ResponseCreateUserWrapperDto | ||
| import retrofit2.Call |
There was a problem hiding this comment.
저도 이번에 레트로핏2를 공부하면서 Call vs Response에 대해서 찾아봤어요.
차이점을 한번 찾아보시고 나중에 코루틴 적용에 Response가 더 이점이 있다고 하니 바꿔보시는것도 좋을 것 같아요!
| Log.e(TAG, "유저 로그인 에러 ${response.code()}") | ||
| } | ||
| } | ||
|
|
| } | ||
| } | ||
|
|
||
| fun PasswordValidCheck(password: String): Boolean { |
There was a problem hiding this comment.
이제는 로그인 명세를 보시면 8자 이하면 되기 때문에 없애줘도 될 것 같아요!
angryPodo
left a comment
There was a problem hiding this comment.
이번에 세미나 참석 못해서 이해하는데 어려움이 있었을텐데 잘하셨어요. 합세 진행하면서 이번 리뷰에 달린 내용들이나 로직분리와 같은 것들 다시한번 적용하면 확 와닿을 것 같아요! 빠이팅!!
| var userNameState = loginViewModel.userNameState.collectAsState().value | ||
| var passwordState = loginViewModel.passwordState.collectAsState().value | ||
| var isUserNameValid = loginViewModel.isUserNameValid.collectAsState().value | ||
| var isPasswordValid = loginViewModel.isPasswordValid.collectAsState().value | ||
| var shouldShowPassword = loginViewModel.shouldShowPassword.collectAsState().value |
There was a problem hiding this comment.
collectAsState에는 단점이 하나 있습니다.
정확히는 flow의 단점이라고 할 수 있겠네요.
liveData와 flow의 차이점을 공부해보시고, collectAsStateWithLifecycle을 사용하시면 좋을 것 같습니다 :)
| //현재 로그인한 토큰으로 현 사용자의 취미를 불러오기 위함 | ||
| private val userService by lazy { ServicePool.userService } |
There was a problem hiding this comment.
이렇게 선언하는 것과 viewModel의 인자로 선언하는 것의 차이점을 찾아보시면 좋을 것 같아요
jihyunniiii
left a comment
There was a problem hiding this comment.
작업 전 이전 주차 과제 PR들 머지하고 진행해주시고, 시연 영상 필수로 추가해주세요.
과제 제출하실 때 노션에 있는 과제 제출 방식 전부 따라주셔야 하고 과제에 있는 기능 명세 전부 구현해주셔야 합니다.
필수 과제는 정말 필수적인 부분이고 제대로 진행되지 않으면 추후 앱잼 등 협업 진행이 어려우니 시간 나실 때 꼭 수정 부탁드릴게요.
필수 과제가 제대로 진행되지 않을 시 앱잼 참여가 어려울 수 있습니다.
| @Serializable | ||
| data class ResponseGetUserWrapperDto( | ||
| @SerialName("success") | ||
| val success: ResponseGetUserSuccessDto, | ||
| @SerialName("failed") | ||
| val failed: ResponseGetUserFailDto | ||
| ) No newline at end of file |
There was a problem hiding this comment.
이거 이런 식으로 만들어도 통신 잘 이루어 지나요?
성공의 경우에는 success에 대한 것만 실패의 경우에는 failed 만 내려보내주어 직렬화가 잘 안 될 것 같은데 잘 동작하나요?
|
|
||
| @GET("/user/my-hobby") | ||
| fun getMyHobby( | ||
| @Header("token") request: RequestGetUserHobbyDto |
There was a problem hiding this comment.
이렇게 넣지 않고 인터셉터를 통해 넣는 방식도 있으니 나중에 공부해보시면 좋을 것 같아요!
| } | ||
| } | ||
|
|
||
| override fun onFailure(call: Call<ResponseGetUserWrapperDto>, t: Throwable) { |
There was a problem hiding this comment.
onFailure 블럭은 어떤 경우에 들어오게 될까요?
| @Serializable | ||
| data class LoginScreen( | ||
| val userNameText: String, | ||
| val passwordText: String | ||
| ) |
Related issue 🛠
Work Description ✏️
Screenshot 📸
SOPT.week4.mp4
Uncompleted Tasks 😅
To Reviewers 📢