Skip to content

Commit 29d1f1e

Browse files
committed
improve parameters (#247)
1 parent 9bf6d58 commit 29d1f1e

File tree

2 files changed

+76
-37
lines changed

2 files changed

+76
-37
lines changed

openapi-processor-core/src/main/kotlin/io/openapiprocessor/core/converter/ApiConverter.kt

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,16 @@ class ApiConverter(
131131

132132
private fun createEndpoint(path: String, operation: Operation, dataTypes: DataTypes, resolver: RefResolver): Endpoint? {
133133
return try {
134-
val ctx = ConverterContext(path, dataTypes, resolver)
134+
val ctx = ApiConverterContext(
135+
path,
136+
operation.getMethod(),
137+
dataTypes,
138+
resolver
139+
)
135140

136-
val parameters = collectParameters(operation, ctx)
137-
val requestBodies = collectRequestBodies(operation, ctx)
138-
val responses = collectResponses (operation, ctx)
141+
val parameters = collectParameters(operation.getParameters(), ctx)
142+
val requestBodies = collectRequestBodies(operation.getRequestBody(), ctx)
143+
val responses = collectResponses (operation.getResponses(), ctx)
139144

140145
val ep = Endpoint(
141146
path,
@@ -164,24 +169,19 @@ class ApiConverter(
164169
}
165170
}
166171

167-
data class ConverterContext(
168-
val path: String,
169-
val dataTypes: DataTypes,
170-
val resolver: RefResolver)
171-
172-
private fun collectParameters(operation: Operation, ctx: ConverterContext): List<ModelParameter> {
173-
val parameters: MutableList<ModelParameter> = mutableListOf()
172+
private fun collectParameters(parameters: List<Parameter>, ctx: ApiConverterContext): List<ModelParameter> {
173+
val resultParameters: MutableList<ModelParameter> = mutableListOf()
174174

175-
operation.getParameters().forEach {
176-
parameters.add(createParameter(operation, it, ctx))
175+
parameters.forEach {
176+
resultParameters.add(createParameter(it, ctx))
177177
}
178178

179-
val addMappings = getAdditionalParameterMappings (ctx.path, operation.getMethod())
179+
val addMappings = getAdditionalParameterMappings (ctx.path, ctx.method)
180180
addMappings.forEach {
181-
parameters.add (createAdditionalParameter (it))
181+
resultParameters.add (createAdditionalParameter (it))
182182
}
183183

184-
return parameters
184+
return resultParameters
185185
}
186186

187187
private fun getAdditionalParameterMappings(path: String, method: HttpMethod): List<AddParameterTypeMapping> {
@@ -190,8 +190,7 @@ class ApiConverter(
190190

191191
data class RequestBodies(val bodies: List<ModelRequestBody>, val parameters: List<ModelParameter>)
192192

193-
private fun collectRequestBodies(operation: Operation, ctx: ConverterContext): RequestBodies {
194-
val requestBody = operation.getRequestBody()
193+
private fun collectRequestBodies(requestBody: RequestBody?, ctx: ApiConverterContext): RequestBodies {
195194
if (requestBody == null) {
196195
return RequestBodies(emptyList(), emptyList())
197196
}
@@ -201,8 +200,8 @@ class ApiConverter(
201200

202201
requestBody.getContent().forEach { (contentType, mediaType) ->
203202
val info = SchemaInfo(
204-
SchemaInfo.Endpoint(ctx.path, operation.getMethod()),
205-
getInlineRequestBodyName (ctx.path, operation.getMethod()),
203+
SchemaInfo.Endpoint(ctx.path, ctx.method),
204+
getInlineRequestBodyName (ctx.path, ctx.method),
206205
"",
207206
mediaType.getSchema(),
208207
ctx.resolver)
@@ -217,31 +216,28 @@ class ApiConverter(
217216
return RequestBodies(bodies, params)
218217
}
219218

220-
private fun collectResponses(operation: Operation, ctx: ConverterContext): Map<String, List<ModelResponse>> {
221-
val responses: MutableMap<String, List<ModelResponse>> = mutableMapOf()
222-
223-
val opResponses = operation.getResponses()
219+
private fun collectResponses(responses: Map<HttpStatus, Response>, ctx: ApiConverterContext): Map<String, List<ModelResponse>> {
220+
val resultResponses: MutableMap<String, List<ModelResponse>> = mutableMapOf()
224221

225-
val resultStyle = getResultStyle(ctx.path, operation.getMethod())
226-
val responseCollector = ContentTypeResponseCollector(opResponses, resultStyle)
227-
val interfaceCollector = ContentTypeInterfaceCollector(ctx.path, operation.getMethod(), responseCollector)
222+
val resultStyle = getResultStyle(ctx.path, ctx.method)
223+
val responseCollector = ContentTypeResponseCollector(responses, resultStyle)
224+
val interfaceCollector = ContentTypeInterfaceCollector(ctx.path, ctx.method, responseCollector)
228225

229-
opResponses.forEach { (httpStatus, httpResponse) ->
226+
responses.forEach { (httpStatus, httpResponse) ->
230227
val results = createResponses(
231-
operation,
232228
httpStatus,
233229
httpResponse,
234230
ctx)
235231

236-
responses[httpStatus] = results
232+
resultResponses[httpStatus] = results
237233
}
238234

239-
return responses
235+
return resultResponses
240236
}
241237

242-
private fun createParameter(op: Operation, parameter: Parameter, ctx: ConverterContext): ModelParameter {
238+
private fun createParameter(parameter: Parameter, ctx: ApiConverterContext): ModelParameter {
243239
val info = SchemaInfo (
244-
SchemaInfo.Endpoint(ctx.path, op.getMethod()),
240+
SchemaInfo.Endpoint(ctx.path, ctx.method),
245241
parameter.getName(),
246242
"",
247243
parameter.getSchema(),
@@ -337,10 +333,10 @@ class ApiConverter(
337333
return parameters
338334
}
339335

340-
private fun createResponses(operation: Operation, httpStatus: String, response: Response, ctx: ConverterContext): List<ModelResponse> {
336+
private fun createResponses(httpStatus: String, response: Response, ctx: ApiConverterContext): List<ModelResponse> {
341337
if (response.getContent().isEmpty()) {
342338
val info = SchemaInfo (
343-
SchemaInfo.Endpoint(ctx.path, operation.getMethod()),
339+
SchemaInfo.Endpoint(ctx.path, ctx.method),
344340
"",
345341
"",
346342
NullSchema,
@@ -358,8 +354,8 @@ class ApiConverter(
358354
val schema = mediaType.getSchema()
359355

360356
val info = SchemaInfo (
361-
SchemaInfo.Endpoint(ctx.path, operation.getMethod()),
362-
getInlineResponseName (ctx.path, operation.getMethod(), httpStatus),
357+
SchemaInfo.Endpoint(ctx.path, ctx.method),
358+
getInlineResponseName (ctx.path, ctx.method, httpStatus),
363359
contentType,
364360
schema,
365361
ctx.resolver)
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2025 https://github.com/openapi-processor/openapi-processor-core
3+
* PDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.openapiprocessor.core.converter
7+
8+
import io.openapiprocessor.core.model.DataTypes
9+
import io.openapiprocessor.core.parser.HttpMethod
10+
import io.openapiprocessor.core.parser.RefResolver
11+
12+
/**
13+
* helper to pass down parameters
14+
*/
15+
data class ApiConverterContext(
16+
val path: String,
17+
val method: HttpMethod,
18+
val dataTypes: DataTypes,
19+
val resolver: RefResolver,
20+
private val interfaces: Map<String, ContentTypeInterface>? = null
21+
) {
22+
fun with(dataTypes: DataTypes): ApiConverterContext {
23+
return ApiConverterContext(
24+
path,
25+
method,
26+
dataTypes,
27+
resolver,
28+
interfaces)
29+
}
30+
31+
fun with(interfaces: Map<String, ContentTypeInterface>): ApiConverterContext {
32+
return ApiConverterContext(
33+
path,
34+
method,
35+
dataTypes,
36+
resolver,
37+
interfaces)
38+
}
39+
40+
fun getContentTypeInterface(contentType: String): ContentTypeInterface? {
41+
return interfaces?.get(contentType)
42+
}
43+
}

0 commit comments

Comments
 (0)