prisma-json-schema-generator icon indicating copy to clipboard operation
prisma-json-schema-generator copied to clipboard

Relations: Show as ID Array for JSON Schema

Open rawkode opened this issue 2 years ago • 0 comments

This might be a slightly niche request, but please allow me to explain.

I store my data in Git, as YAML files. I'm modelling it as Prisma and syncing the YAML to PostgreSQL to make it available via REST and GraphQL.

The Many to One and Many to Many Models for JSON Schema assume that the sub-types are embedded, when actually for this use-case we want an array of IDs.

Example: I'm modelling my YouTube channel which has a concept of an "Episode" which features one or more technologies.

model Episode {
  id String @id

  technologies Technology[]
}

model Technology {
  id       String    @id
  episodes Episode[]
}

Which generates this embedded JSON schema on each side:

    "Episode": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "technologies": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Technology"
          }
        }
      }
    },
    "Technology": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "episodes": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Episode"
          }
        }
      }
    },

Would it be possible to get something merged that allows me to annotate these types as disjunctions so that the following was generated?

    "Episode": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "technologies": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "Technology": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "episodes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },

rawkode avatar Mar 01 '22 22:03 rawkode