Skip to content

Commit d975e6d

Browse files
committed
Fixed parameters being shared between operations on same path
1 parent 66458d6 commit d975e6d

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

src/main/kotlin/com/papsign/ktor/openapigen/modules/handlers/RequestHandlerModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ import com.papsign.ktor.openapigen.classLogger
77
import com.papsign.ktor.openapigen.content.type.BodyParser
88
import com.papsign.ktor.openapigen.content.type.ContentTypeProvider
99
import com.papsign.ktor.openapigen.content.type.SelectedParser
10+
import com.papsign.ktor.openapigen.generator.ParamBuilder
1011
import com.papsign.ktor.openapigen.modules.ModuleProvider
1112
import com.papsign.ktor.openapigen.modules.ofClass
1213
import com.papsign.ktor.openapigen.modules.openapi.OperationModule
14+
import com.papsign.ktor.openapigen.modules.providers.ParameterProvider
1315
import com.papsign.ktor.openapigen.openapi.MediaType
1416
import com.papsign.ktor.openapigen.openapi.Operation
1517
import com.papsign.ktor.openapigen.openapi.RequestBody
@@ -35,6 +37,8 @@ class RequestHandlerModule<T : Any>(
3537

3638
val requestMeta = requestClass.findAnnotation<Request>()
3739

40+
val parameters = provider.ofClass<ParameterProvider>().flatMap { it.getParameters(ParamBuilder(apiGen, provider)) }
41+
operation.parameters = operation.parameters?.let { (it + parameters).distinct() } ?: parameters
3842
operation.requestBody = operation.requestBody?.apply {
3943
map.forEach { (key, value) ->
4044
content.putIfAbsent(key, value)?.let { if (value != it) log.warn("ContentType of $requestType request $key already registered, ignoring $value") }

src/main/kotlin/com/papsign/ktor/openapigen/modules/handlers/RouteHandler.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,8 @@ object RouteHandler: HandlerModule {
2727
if (methods.size > 1) error("API cannot have two methods simultaneously: ${methods.map { it.method.value }}")
2828
val paths = provider.ofClass<PathProvider>()
2929
val path = "/${paths.map { it.path.trim('/') }.filter { it.isNotBlank() }.joinToString("/")}"
30-
val parameters = provider.ofClass<ParameterProvider>().flatMap { it.getParameters(ParamBuilder(apiGen, provider)) }
3130
val operationModules = provider.ofClass<OperationModule>()
3231
apiGen.api.paths.getOrPut(path) { PathItem() }.also {pathItem ->
33-
pathItem.parameters = (pathItem.parameters + parameters).distinct()
3432
methods.forEach {
3533
val name = it.method.value.toLowerCase()
3634
//if (pathItem.containsKey(name)) error("$path::$name already defined")

0 commit comments

Comments
 (0)