Skip to content
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

러닝탭 화면 구현 (현재 러너 카운트 받아오기) #11

Merged
merged 10 commits into from
Nov 17, 2022

Conversation

bngsh
Copy link
Collaborator

@bngsh bngsh commented Nov 17, 2022

😎 작업 내용

  • 러닝 탭 ui 화면 구현
  • 러닝 데이터소스 일부 구현
  • 러닝 레포지토리 일부 구현
  • 러닝 뷰 모델, 프레그먼트 일부구현

🧐 변경된 내용

  • GetCurrentRunnerCountUseCase -> GetRunnerCountUseCase 이름 변경
  • BaseFragment 누락된 코드 추가(라이프사이클 오너 설정, super.onViewCreated() 호출)

🥳 동작 화면

running_tab_221117

🤯 이슈 번호

  • 이슈 없음

Comment on lines +11 to +52
class RunningDataSourceImpl(private val db: FirebaseFirestore) : RunningDataSource {

override fun getCurrentRunnerCount(): Flow<Int> = callbackFlow {
db.collection("Runners")
.document("runnersId")
.addSnapshotListener { snapshot, _ ->
snapshot?.let {
val count = it.data?.size ?: -1
trySend(count)
}
}

awaitClose()
}

override suspend fun startRunning(uid: String): Boolean {
return suspendCoroutine { continuation ->
db.collection("Runners")
.document("runnersId")
.update(uid, uid)
.addOnSuccessListener {
continuation.resume(true)
}
.addOnFailureListener {
continuation.resume(false)
}
}
}

override suspend fun finishRunning(uid: String): Boolean {
return suspendCoroutine { continuation ->
db.collection("Runners")
.document("runnersId")
.update(uid, FieldValue.delete())
.addOnSuccessListener {
continuation.resume(true)
}
.addOnFailureListener {
continuation.resume(false)
}
}
}
Copy link
Member

Choose a reason for hiding this comment

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

하드 코딩된 "Runners", "runnersId", -1 등을 변수로 관리하면 가독성이 더 좋을 것 같아요!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

#13

override fun getCurrentRunnerCount(): Flow<Int> = callbackFlow {
db.collection("Runners")
.document("runnersId")
.addSnapshotListener { snapshot, _ ->
Copy link
Member

Choose a reason for hiding this comment

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

저는 error를 사용하지 않음에도 불구하고 error로 표기해놔서 승민님께 리뷰를 받았는데 _ 로 안쓰는 변수임을 잘 표현해주셨네요..!! error가 어떠한 상황에 발생하는 값인지 확인하고 예외처리가 필요하다면 예외처리해주고 그렇지 않다면 _ 로 사용하지 않음을 명시해주는 것이 좋아보이네요!! 나중에 같이 논의해보면 좋을 것 같습니다

.document("runnersId")
.addSnapshotListener { snapshot, _ ->
snapshot?.let {
val count = it.data?.size ?: -1
Copy link
Member

Choose a reason for hiding this comment

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

달리는 사람이 없을 때 -1이라는 값을 플로우로 방출하는 것 같은데 이에 대한 처리가 보이지 않는 것 같습니다! (제가 못 찾는 것일 수도 있지만요..^^) -> 달리고 있는 사람이 -1일 수는 없으니까요!
-1로 에러 케이스임을 명시해준 것은 분명히 좋지만 -1대신 0을 사용하면 별도의 케이스 처리를 해줄 필요도 없을 것 같고 승민님이 리뷰하신 것처럼 0이라는 값을 상수로 관리하면 보기도 좋고 관리하기도 좋아보입니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

#13

Comment on lines +22 to +26
@Provides
@Singleton
fun provideRunningRepository(runningDataSource: RunningDataSource): RunningRepository {
return RunningRepositoryImpl(runningDataSource)
}
Copy link
Member

Choose a reason for hiding this comment

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

저희 이번에 인터페이스주입도 그냥 Binds 대신 Provides 사용하기로 했었나요?? 기억이 잘 안나서요!
저도 항상 Provides만 써오긴 했습니다 ㅎㅎ

Copy link
Member

Choose a reason for hiding this comment

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

확정하지는 않았던거 같은데 오늘 리뷰때 이야기 해보면 좋을거 같아요!

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

#13 : Provides 대신 Binds 사용하기로 결정

super.onViewCreated(view, savedInstanceState)
binding.vm = viewModel

lifecycleScope.launch {
Copy link
Member

Choose a reason for hiding this comment

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

flow를 collect하는 최상위 스코프는 fragment의 lifecycleScope네요..!! (물론 내부에서 viewLifecycleOwner에서 collect를 하는 범위를 컨트롤 해주시긴하지만) 저는 최상위 스코프도 viewLifecycleOwner.lifecycleScope로 두고 사용했거든요!
무한히 collect하는 스코프의 수집 범위를 컨트롤하는 결과는 동일하기도하고 이에 관련해서 차이가 없을 것 같다고 생각이 들긴하는데 어떻게 생각하시나요??

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

#13 : 달리는 사람 수 라이프사이클 변경

android:layout_width="0dp"
android:layout_height="0dp"
app:cardBackgroundColor="@color/mogakrun_primary_light"
app:cardCornerRadius="999dp"
Copy link
Member

Choose a reason for hiding this comment

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

이거 원모양으로 하려면 999dp가 공식적인 가이드라인인건가요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants