Skip to content

Commit

Permalink
fix(lapis2): bring back request id header in OpenAPI docs
Browse files Browse the repository at this point in the history
resolves #627
  • Loading branch information
fengelniederhammer committed May 15, 2024
1 parent c5420e8 commit eb75391
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 33 deletions.
41 changes: 23 additions & 18 deletions lapis2/src/main/kotlin/org/genspectrum/lapis/LapisSpringConfig.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package org.genspectrum.lapis

import com.fasterxml.jackson.module.kotlin.readValue
import io.swagger.v3.oas.models.media.Content
import io.swagger.v3.oas.models.media.MediaType
import io.swagger.v3.oas.models.media.Schema
import io.swagger.v3.oas.models.parameters.HeaderParameter
import mu.KotlinLogging
import org.genspectrum.lapis.auth.DataOpennessAuthorizationFilterFactory
import org.genspectrum.lapis.config.DatabaseConfig
Expand All @@ -13,12 +17,15 @@ import org.genspectrum.lapis.config.ReferenceGenome
import org.genspectrum.lapis.config.ReferenceGenomeSchema
import org.genspectrum.lapis.config.ReferenceSequenceSchema
import org.genspectrum.lapis.config.SequenceFilterFields
import org.genspectrum.lapis.controller.LapisHeaders
import org.genspectrum.lapis.logging.RequestContext
import org.genspectrum.lapis.logging.RequestContextLogger
import org.genspectrum.lapis.logging.StatisticsLogObjectMapper
import org.genspectrum.lapis.openApi.REQUEST_ID_HEADER_DESCRIPTION
import org.genspectrum.lapis.openApi.buildOpenApiSchema
import org.genspectrum.lapis.util.TimeFactory
import org.genspectrum.lapis.util.YamlObjectMapper
import org.springdoc.core.customizers.OperationCustomizer
import org.springframework.beans.factory.annotation.Value
import org.springframework.cache.annotation.EnableCaching
import org.springframework.context.annotation.Bean
Expand All @@ -38,24 +45,22 @@ class LapisSpringConfig {
referenceGenomeSchema: ReferenceGenomeSchema,
) = buildOpenApiSchema(sequenceFilterFields, databaseConfig, referenceGenomeSchema)

// TODO(#627) reactivate this when the bug in Swagger UI is fixed
// https://github.com/swagger-api/swagger-ui/issues/9550
// @Bean
// fun headerCustomizer() =
// OperationCustomizer { operation, _ ->
// val foundRequestIdHeaderParameter = operation.parameters?.any { it.name == REQUEST_ID_HEADER }
// if (foundRequestIdHeaderParameter == false || foundRequestIdHeaderParameter == null) {
// operation.addParametersItem(
// HeaderParameter().apply {
// name = REQUEST_ID_HEADER
// required = false
// description = REQUEST_ID_HEADER_DESCRIPTION
// content = Content().addMediaType("text/plain", MediaType().schema(Schema<String>()))
// },
// )
// }
// operation
// }
@Bean
fun headerCustomizer() =
OperationCustomizer { operation, _ ->
val foundRequestIdHeaderParameter = operation.parameters?.any { it.name == LapisHeaders.REQUEST_ID }
if (foundRequestIdHeaderParameter == false || foundRequestIdHeaderParameter == null) {
operation.addParametersItem(
HeaderParameter().apply {
name = LapisHeaders.REQUEST_ID
required = false
description = REQUEST_ID_HEADER_DESCRIPTION
content = Content().addMediaType("text/plain", MediaType().schema(Schema<String>()))
},
)
}
operation
}

@Bean
fun databaseConfig(
Expand Down
25 changes: 10 additions & 15 deletions siloLapisTests/test/requestId.spec.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,23 @@
import { expect } from 'chai';
import { basePath } from './common';
import { lapisClient } from './common';

describe('The request id', () => {
it('should be returned when explicitly specified', async () => {
const requestID = 'hardcodedRequestIdInTheTest';

// TODO(#627): bring back the old tests using the generated client
// const result = await lapisClient.postAggregated1({
// aggregatedPostRequest: {},
// xRequestID: requestID,
// });
const result = await fetch(basePath + '/sample/aggregated', { headers: { 'X-Request-Id': requestID } });
const result = await lapisClient.postAggregated1({
aggregatedPostRequest: {},
xRequestID: requestID,
});

// expect(result.info.requestId).equals(requestID);
expect((await result.json()).info.requestId).equals(requestID);
expect(result.info.requestId).equals(requestID);
});

it('should be generated when none is specified', async () => {
// const result = await lapisClient.postAggregated1({
// aggregatedPostRequest: {},
// });
const result = await fetch(basePath + '/sample/aggregated');
const result = await lapisClient.postAggregated1({
aggregatedPostRequest: {},
});

// expect(result.info.requestId).length.is.at.least(1);
expect((await result.json()).info.requestId).length.is.at.least(1);
expect(result.info.requestId).length.is.at.least(1);
});
});

0 comments on commit eb75391

Please sign in to comment.