override fun getReadmeWithModifiedSinceCheck()

in integrations/github/src/main/kotlin/io/klibs/integration/github/GitHubIntegrationKohsukeLibrary.kt [136:183]


    override fun getReadmeWithModifiedSinceCheck(
        repositoryId: Long,
        modifiedSince: Instant
    ): ReadmeFetchResult {
        readmeRequestCounter.increment()

        val sample = Timer.start(meterRegistry)
        try {
            val url = "$GITHUB_API_URL/repositories/$repositoryId/readme"

            val ifModifiedSince = ZonedDateTime.ofInstant(modifiedSince, ZoneOffset.UTC)
                .format(DateTimeFormatter.RFC_1123_DATE_TIME)

            val requestBuilder = Request.Builder()
                .url(url)
                .get()
                .addHeader("Accept", "application/vnd.github.raw")
                .addHeader("If-Modified-Since", ifModifiedSince)

            gitHubIntegrationProperties.personalAccessToken?.takeIf { it.isNotBlank() }?.let { token ->
                requestBuilder.addHeader("Authorization", "Bearer $token")
            }

            okHttpClient.newCall(requestBuilder.build()).execute().use { response ->
                return when (response.code) {
                    200 -> {
                        val body = response.body?.string() ?: ""
                        ReadmeFetchResult.Content(body)
                    }
                    304 -> {
                        logger.debug("README of {} content not modified since {}.", repositoryId, modifiedSince)
                        ReadmeFetchResult.NotModified
                    }
                    404 -> {
                        logger.debug("README of {} not found.", repositoryId)
                        ReadmeFetchResult.NotFound
                    }
                    else -> {
                        logger.error("ERROR: ${response.code} from GitHub API at $url.")
                        ReadmeFetchResult.Error(status = response.code)
                    }
                }
            }
        } finally {
            sample.stop(meterRegistry.timer("klibs.github.request.time"))
            lastSuccessfulRequestTime.set(Instant.now())
        }
    }