View:

private fun attemptLoginRequest(email: String, password: String) {

        if(validateEmail(email, emailInputLayout) && validatePassword(password)) {

            loginViewModel.loginUser(email, password)
      }

	evaluateStatusCode(AppPreferences.getStatusCode()) -> this line of code gets executed right after the abowe one without waiting for a result and thus sending zero to this method instead of a real status code (200 or 401)
}

View Model: 

fun loginUser(email: String, password: String) {

        launch {

            UserRepository.loginRequest(email, password)
      }
}

Repository:

suspend fun loginRequest(email: String, password: String) {

        val dataResponse = Api.client.login(
            UserLoginRequest(
                email = email,
                password = password
            )
        ).await()

        if(dataResponse.isSuccessful) {

            AppPreferences.putStatusCode(dataResponse.body()?.code ?: 800)
            AppPreferences.putAccessToken(dataResponse.body()?.responseData?.tokens?.accessToken ?: "", setAccessTokenExpireDate())
            AppPreferences.putRefreshToken(dataResponse.body()?.responseData?.tokens?.refreshToken ?: "", setRefreshTokenExpireDate())
      }
}