Skip to content

[Bug]: sharedRoute openapi operationId issue #5513

@csaba-veezla

Description

@csaba-veezla

Describe the bug

We have a use case where you can create assets in our system; the source of an asset can differ.
So for the same endpoint, we support both "multipart/form-data" and "application/json" as content types.

The two operations are slightly different from each other, so we are leveraging the @sharedRoute operator.
The issue comes from the open API emitter. It concatenates the operationIds, and the resulting operationId is rarely unusable for the client code generation.

operationId: operations.map((op) => resolveOperationId(program, op.operation)).join("_"),

As you can see in the playground, it will result in the following shared operationId: Assets_createAsset_Assets_createAssetWithUpload or createAsset_createAsset if you had set the individual operations to createAsset.
Afterward, this will result in something similar in the generated code as well.

I see 2 solutions to this problem:

  • Either it should run a unique on that operations.map, so if all the shared operations have the same operationId, the shared id will be the same.
  • Alternatively, it checks if the shared operations have a provided operationId and it joins the the ones that have some, or if there is none, it generates the one that it does right now (mostly will result in the same json as it does now, backward compatible)

Reproduction

I tried to reduce the code to the minimum, but I couldn't make the operationId decorator work, it should be part of the @typespec/openapi3 lib, so I'm not sure, what I am missing:

playground

Checklist

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions