swagger-typescript-api icon indicating copy to clipboard operation
swagger-typescript-api copied to clipboard

Circular reference error in type definitions if subclasses appear before baseclass in schema.

Open martitv opened this issue 2 years ago • 1 comments

We have the following schema components in our swagger.json file:

"Gjennomforing_4_3": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/Tvangsprotokoll"
          }
        ],
        "additionalProperties": false
      },
"Gjennomforing_4_4": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/Tvangsprotokoll"
          }
        ],
        "properties": {
          "administrertLegemiddel": {
            "type": "string",
            "nullable": true
          },
          "administrertDose": {
            "type": "string",
            "nullable": true
          },
          "administrasjonsform": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
"Gjennomforing_4_8": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/Tvangsprotokoll"
          }
        ],
        "properties": {
          "endringUnderGjForing": {
            "$ref": "#/components/schemas/VolvenKodeverkValue9272"
          },
          "beskrivelseAvGjForing": {
            "type": "string",
            "nullable": true
          },
          "endretTidspunkt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
"Tvangsprotokoll": {
        "required": [
          "$type"
        ],
        "type": "object",
        "properties": {
          "$type": {
            "type": "string"
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "vedtakId": {
            "type": "string",
            "format": "uuid"
          },
          "pasientId": {
            "type": "string",
            "format": "uuid"
          },
          "fagligAnsvarlig": {
            "$ref": "#/components/schemas/Ansvarlig"
          },
          "startTidspunkt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "avsluttetTidspunkt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "merknad": {
            "type": "string",
            "nullable": true
          },
          "lopenummer": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "discriminator": {
          "propertyName": "$type",
          "mapping": {
            "Gjennomforing_4_3": "#/components/schemas/Gjennomforing_4_3",
            "Gjennomforing_4_4": "#/components/schemas/Gjennomforing_4_4",
            "Gjennomforing_4_8": "#/components/schemas/Gjennomforing_4_8"
          }
        }
      },

After running codegen on this schema the output is the following for the 3 subclasses (Gjennomforing_4_3, Gjennomforing_4_4, Gjennomforing_4_8) of Tvangsprotokoll:

image

Here the subclasses are extending Tvangsprotokoll instead of the BaseTvangsprotokoll class.

We believe this is a bug with the order they are parsed in. As the Base class come after the subclasses in the schema.components list. Everything worked fine when we renamed Tvangsprotokoll to Gjennomforing

martitv avatar Oct 06 '23 12:10 martitv

Seems to be similar issue to https://github.com/acacode/swagger-typescript-api/issues/564

andymac4182 avatar Dec 11 '23 07:12 andymac4182