All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.kevin.api.services.Client.kt Maven / Gradle / Ivy

package eu.kevin.api.services

import eu.kevin.api.Dependencies
import eu.kevin.api.Endpoint
import eu.kevin.api.models.Authorization
import eu.kevin.api.services.account.AccountClient
import eu.kevin.api.services.auth.AuthClient
import eu.kevin.api.services.general.GeneralClient
import eu.kevin.api.services.payment.PaymentClient
import io.ktor.client.*
import io.ktor.client.plugins.*
import io.ktor.client.request.*
import io.ktor.http.*
import java.net.URI

class Client internal constructor(
    private val authorization: Authorization,
    private val apiUrl: String,
    private val httpClient: HttpClient,
    private val customHeaders: Map
) {
    val paymentClient by lazy { PaymentClient(httpClient = httpClient.withAuthorization()) }
    val authClient by lazy { AuthClient(httpClient = httpClient.withAuthorization()) }
    val generalClient by lazy { GeneralClient(httpClient = httpClient.withAuthorization()) }
    val accountClient by lazy { AccountClient(httpClient = httpClient.withAuthorization()) }

    constructor(
        authorization: Authorization,
        apiUrl: String = Endpoint.BASE,
        customHeaders: Map = mapOf()
    ) : this(
        authorization = authorization,
        apiUrl = apiUrl,
        httpClient = Dependencies.httpClient,
        customHeaders = customHeaders
    )

    private fun HttpClient.withAuthorization() = this.config {
        defaultRequest {
            url.takeFrom(
                URLBuilder().takeFrom(
                    URI.create("$apiUrl/").resolve(".${Endpoint.VERSION}")
                ).apply {
                    encodedPath += url.encodedPath
                }
            )
            header("Client-Id", authorization.clientId)
            header("Client-Secret", authorization.clientSecret)
            customHeaders.forEach { header(it.key, it.value) }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy