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

Step2 - GitHub(UI 레이어) #37

Open
wants to merge 4 commits into
base: yibeomseok
Choose a base branch
from

Conversation

YiBeomSeok
Copy link

@YiBeomSeok YiBeomSeok commented Sep 24, 2024

Step2 - GitHub(UI 레이어) 구현

안녕하세요 리뷰어님.

Step2 구현 완료하여 PR 올립니다.

늦었지만 리뷰해주셔서 감사합니다!

NEXTSTEP 조직의 저장소 목록을 선형 리스트로 노출

  • LazyColumn을 사용하여 저장소 목록을 표시했습니다.
  • 데이터는 ViewModel에서 관리하며, 목록은 StateFlow를 통해 업데이트됩니다.
    class Query(val organization: String)
    // 같은 저장소라도 검색이 가능하도록 String 타입이 아닌 Query 타입을 사용
    private val refreshTrigger = MutableStateFlow(Query(TARGET_ORGANIZATION))

    @OptIn(ExperimentalCoroutinesApi::class)
    val repos: StateFlow<ReposUiState> = refreshTrigger
        .flatMapLatest { query ->
            flow {
                emit(ReposUiState.Loading)
                val repos = getGitHubRepositoryUseCase(organization = query.organization)
                emit(ReposUiState.Success(repos))
            }.catch { e -> emit(ReposUiState.Error(e)) }
        }.stateIn(
            scope = viewModelScope,
            started = SharingStarted.WhileSubscribed(5_000),
            initialValue = ReposUiState.Loading
        )

    fun searchRepos(organization: String = TARGET_ORGANIZATION) {
        refreshTrigger.update { Query(organization) }
    }
  • flatMapLatest를 사용해 저장소 목록을 동적으로 가져오도록 구현했습니다.
  • 에러 발생 시에는 ReposUiState.Error로 상태를 처리했습니다.

리뷰 코멘트 답변

UseCase를 인터페이스로 분리한 이유가 무엇인가요? :)

ViewModel 테스트를 보다 용이하게 하기 위해 UseCase를 인터페이스로 분리했습니다.
테스트 코드는 unitTest 경로에 작성해두었으니 참고 부탁드립니다.

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

Successfully merging this pull request may close these issues.

1 participant