FetchUserUseCase.kt

package com.gyleedev.githubsearch.domain.usecase

import com.gyleedev.githubsearch.domain.model.SearchStatus
import com.gyleedev.githubsearch.domain.model.UserFetchResult
import com.gyleedev.githubsearch.domain.repository.GitHubRepository
import javax.inject.Inject

class FetchUserUseCase @Inject constructor(
    private val repository: GitHubRepository,
) {
    suspend operator fun invoke(query: String): SearchStatus = try {
        val result = repository.fetchUser(query)
        if (result is UserFetchResult.Success) {
            repository.insertUser(result.user)
            repository.upsertAccessTime(id = 0L, githubId = query, isRepoFetched = false)
        }
        return when (result) {
            is UserFetchResult.Success -> {
                SearchStatus.SUCCESS
            }

            is UserFetchResult.NoSuchUser -> {
                SearchStatus.NO_SUCH_USER
            }

            is UserFetchResult.ExceedQuota -> {
                SearchStatus.NEED_AUTHENTICATION
            }

            is UserFetchResult.UnknownError -> {
                SearchStatus.UNKNOWN_FAIL
            }
        }
    } catch (e: Exception) {
        // TODO 에러별로 다른 스테이트 떨굴것
        SearchStatus.BAD_NETWORK
    }
}