2rabs/nito-app

View on GitHub
core/network/build.gradle.kts

Summary

Maintainability
Test Coverage
import org.jetbrains.compose.internal.utils.getLocalProperty

plugins {
    id("nito.primitive.kmp")
    id("nito.primitive.kmp.android")
    id("nito.primitive.kmp.ios")
    id("nito.primitive.detekt")
    id("nito.primitive.kmp.serialization")
    alias(libs.plugins.apollographql)
}

android.namespace = "club.nito.core.network"

kotlin {
    explicitApi()

    sourceSets {
        commonMain {
            dependencies {
                implementation(projects.core.common)
                implementation(projects.core.model)

                implementation(libs.kotlinxCoroutinesCore)

                implementation(libs.koin)
                implementation(libs.kermit)

                implementation(libs.okIo)
                implementation(libs.ktorClientCore)
                implementation(libs.ktorKotlinxSerialization)
                implementation(libs.ktorClientContentNegotiation)

                implementation(libs.apolloRuntime)
                implementation(libs.apolloAdapters)

                implementation(libs.supabaseGotrue)
                implementation(libs.supabasePostgrest)
                implementation(libs.supabaseRealtime)

                implementation(libs.multiplatformSettingsNoArg)
                implementation(libs.multiplatformSettingsCoroutines)
            }
        }

        androidMain {
            dependencies {
                implementation(libs.ktorClientOkHttp)
                implementation(libs.okHttpLoggingInterceptor)
                implementation(libs.firebaseRemoteConfig)
            }
        }

        iosMain {
            dependencies {
                implementation(libs.ktorClientDarwin)
            }
        }
    }
}

apollo {
    service("api") {
        // GraphQL configuration here.
        // https://www.apollographql.com/docs/kotlin/advanced/plugin-configuration/
        packageName.set("club.nito.core.network.graphql")

        // https://www.apollographql.com/docs/kotlin/essentials/custom-scalars/#in-buildgradlekts
        mapScalarToKotlinString("uuid")
        mapScalar("timestamptz", "kotlinx.datetime.Instant", "com.apollographql.apollo3.adapter.KotlinxInstantAdapter")

        // This will create a downloadStarwarsApolloSchemaFromIntrospection task
        val accessToken = getLocalProperty(key = "nito.hasura.accessToken")
        accessToken?.let {
            introspection {
                endpointUrl.set("https://nito-dev.hasura.app/v1/graphql")
                headers.set(
                    mapOf(
                        "Authorization" to "Bearer $it",
                    ),
                )
                // The path is interpreted relative to the current project here, no need to prepend 'app'
                schemaFile.set(file("src/commonMain/graphql/schema.graphqls"))
            }
        }
    }
}