suspend fun fetchEnvironments()

in src/com/intellij/idea/plugin/hybris/tools/ccv2/api/CCv2Api.kt [57:103]


    suspend fun fetchEnvironments(
        ccv2Token: String,
        subscription: CCv2Subscription,
        statuses: List<String>,
        progressReporter: ProgressReporter
    ): Collection<CCv2EnvironmentDto> {

        val ccv1Api = CCv1Api.getInstance()

        val subscriptions2Permissions = ccv1Api.fetchPermissions(ccv2Token)
            ?.associateBy { it.scopeName }
            ?: return emptyList()

        val subscriptionCode = subscription.id!!

        val subscriptionPermissions = subscriptions2Permissions[subscriptionCode]
            ?: return emptyList()

        return progressReporter.sizedStep(1, "Fetching Environments for subscription: $subscription") {
            statuses
                .map { status ->
                    async {
                        environmentApi.getEnvironments(
                            subscriptionCode = subscriptionCode,
                            status = status,
                            requestHeaders = createRequestParams(ccv2Token)
                        )
                    }
                }
                .awaitAll()
                .flatMapToNullableSet { it.value }
                ?.map { env ->
                    val canAccess = subscriptionPermissions.environments?.contains(env.code) ?: true
                    async {
                        val v1Env = getV1Environment(canAccess, ccv1Api, ccv2Token, env)
                        val v1EnvHealth = getV1EnvironmentHealth(canAccess, ccv1Api, ccv2Token, env)

                        env to Triple(canAccess, v1Env, v1EnvHealth)
                    }
                }
                ?.awaitAll()
                ?.map { (environment, details) ->
                    CCv2EnvironmentDto.map(environment, details.first, details.second, details.third)
                }
                ?: emptyList()
        }
    }