Reindex
TeamBlogDocs

Reindex schema

The schema for a Reindex app is defined in JSON. You can fetch the schema for your app using a CLI command:

reindex schema-fetch

By default this saves the schema to a file named ReindexSchema.json. After editing the schema in your favorite editor, push it to your app with:

reindex schema-push

Reindex automatically migrates the database of the app to the new schema and generates things like mutations and input objects for it automatically.

You can also do migrations programmatically using migrate mutation.

Tip: Documentation browser

After pushing the schema to your app, you can view the whole GraphQL schema, including also the builtin types and auto-generated fields, in the documentation browser of GraphiQL.

Open GraphiQL with reindex graphiql and click “Docs” in the top right corner.

Schema JSON

The schema file includes an array of types for the schema. For example:

[
  {
    "kind": "OBJECT",
    "name": "User",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      }
    ]
  }
]

The properties supported in the schema definition are documented below.

Type object

The type object defines a single type in the schema.

fields: [ReindexField]

Array of field objects that describe the fields of the type.

permissions: [ReindexPermission]

Array of permissions that determine who has rights to read and change the nodes of this type.

interfaces: [String]

Array with the names of interfaces the type implements.

Supported interfaces are:

  • Node: Defines a type with globally unique ID.
Node types

The node types can be fetched using the node root field or the automatically created type specific root fields (e.g. todoById). They are also accessible through the connection of all nodes of a type (e.g. { viewer { allTodos { ... } } }).

They can also be referenced in other node types, forming relationships between types.

The node types also get a set of mutations created for them automatically. Here’s a list of mutations for type Todo:

  • createTodo – Creates a new Todo object.
  • updateTodo – Updates the given Todo object. The given fields are merged to the existing object.
  • replaceTodo – Replaces the given Todo object.
  • deleteTodo – Deletes the given Todo object.

kind: String!

The kind of the type. At the moment "OBJECT" is the only supported value.

name: String!

The name of the type.

The name must start with a capital letter. Allowed characters are letters A-Z, a-z and underscore (_). Type names that start with “Reindex” are reserved for builtin types.

pluralName: String

An optional pluralized name for the type. If not specified, the default English pluralization will be used for generated field names like allStories.

Field object

defaultOrdering: ReindexOrdering

For fields of type Connection, defines the default sorting order for the items in the connection. If specified, must be an object with properties field (name of a field) and order (either “ASC” or “DESC”).

deprecationReason: String

If given, makes the field show as deprecated.

description: String

An optional description for the GraphQL field. The description is shown in the documentation of your app’s API and also when you’re typing a query in GraphiQL.

name: String!

The name of the field. Allowed characters are letters A-Z, a-z and underscore (_).

nonNull: Boolean

Sets the GraphQL field as non-null.

unique: Boolean

Makes Reindex enforce uniqueness for this field. In addition, for each unique field a root field will be created for fetching this field.

ofType: String

The inner type of the field, required for Connection and List fields. For example:

  • A list of strings:
    { "name": "myList", "type": "List", "ofType": "String" }
    
  • A connection with User nodes:
    { "name": "myUsers", "type": "Connection", "ofType": "User" }
    

orderable: Boolean

If set, orderBy can be used on this field. Can be only set on scalar fields.

filterable: Boolean

If set, connection filter argument will be generated for this field. Can only be set on scalar fields.

reverseName: String

The name of the related field in the referenced type, required for object fields with a node type and for the corresponding Connection fields.

type: String!

Type of the field.

Following types are supported.

  • Scalar types:
    • Boolean
    • DateTime
    • Float
    • ID (only valid as the id field for nodes)
    • Int
    • String
  • List – A list of scalars or non-node objects. ofType defines the type of list elements.
  • Connection – A paginated list of nodes. Used to define one-to-many or many-to-many relationships between node types. ofType defines the type of connected nodes. A connection field always has a corresponding reverse field in the other type and the name of that field is defined with reverseName.
    • One-to-many relationships: The type of the reverse field is a node object type.
    • Many-to-many relationships: The type of the reverse field is also Connection.
  • Any object type:
    • When object type implements the Node interface, the field creates a connection between the types. The field must have a related Connection field in the other type.
    • An object field with non-node type is stored inline.

Example

Here’s a larger example of a schema for an app that stores movies and TV shows fetched from The Movie Database (TMDb):

[
  {
    "name": "TvSeason",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "air_date",
        "type": "DateTime"
      },
      {
        "name": "episodes",
        "type": "Connection",
        "ofType": "TvEpisode",
        "reverseName": "season"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "overview",
        "type": "String"
      },
      {
        "name": "poster_path",
        "type": "String"
      },
      {
        "name": "season_number",
        "type": "Int"
      },
      {
        "name": "series",
        "type": "TvSeries",
        "reverseName": "seasons"
      }
    ]
  },
  {
    "name": "Person",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "adult",
        "type": "Boolean"
      },
      {
        "name": "also_known_as",
        "type": "List",
        "ofType": "String"
      },
      {
        "name": "biography",
        "type": "String"
      },
      {
        "name": "birthday",
        "type": "DateTime"
      },
      {
        "name": "credits",
        "type": "Connection",
        "ofType": "Credit",
        "reverseName": "person"
      },
      {
        "name": "deathday",
        "type": "DateTime"
      },
      {
        "name": "homepage",
        "type": "String"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "imdb_id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "place_of_birth",
        "type": "String"
      },
      {
        "name": "popularity",
        "type": "Float"
      },
      {
        "name": "profile_path",
        "type": "String"
      }
    ]
  },
  {
    "name": "TvEpisode",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "air_date",
        "type": "DateTime"
      },
      {
        "name": "episode_number",
        "type": "Int"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "overview",
        "type": "String"
      },
      {
        "name": "production_code",
        "type": "String"
      },
      {
        "name": "season",
        "type": "TvSeason",
        "reverseName": "episodes"
      },
      {
        "name": "season_number",
        "type": "Int"
      },
      {
        "name": "still_path",
        "type": "String"
      },
      {
        "name": "vote_average",
        "type": "Float"
      },
      {
        "name": "vote_count",
        "type": "Int"
      }
    ]
  },
  {
    "name": "Country",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "iso_3166_1",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  },
  {
    "name": "Genre",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  },
  {
    "name": "Creator",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "profile_path",
        "type": "String"
      }
    ]
  },
  {
    "name": "Movie",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "adult",
        "type": "Boolean"
      },
      {
        "name": "backdrop_path",
        "type": "String"
      },
      {
        "name": "belongs_to_collection",
        "type": "Collection"
      },
      {
        "name": "budget",
        "type": "Int"
      },
      {
        "name": "credits",
        "type": "Connection",
        "ofType": "Credit",
        "reverseName": "movie"
      },
      {
        "name": "genres",
        "type": "List",
        "ofType": "Genre"
      },
      {
        "name": "homepage",
        "type": "String"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "imdb_id",
        "type": "String"
      },
      {
        "name": "original_language",
        "type": "String"
      },
      {
        "name": "original_title",
        "type": "String"
      },
      {
        "name": "overview",
        "type": "String"
      },
      {
        "name": "popularity",
        "type": "Float"
      },
      {
        "name": "poster_path",
        "type": "String"
      },
      {
        "name": "production_companies",
        "type": "List",
        "ofType": "Company"
      },
      {
        "name": "production_countries",
        "type": "List",
        "ofType": "Country"
      },
      {
        "name": "release_date",
        "type": "DateTime"
      },
      {
        "name": "revenue",
        "type": "Int"
      },
      {
        "name": "runtime",
        "type": "Int"
      },
      {
        "name": "spoken_languages",
        "type": "List",
        "ofType": "Language"
      },
      {
        "name": "status",
        "type": "String"
      },
      {
        "name": "tagline",
        "type": "String"
      },
      {
        "name": "title",
        "type": "String"
      },
      {
        "name": "video",
        "type": "Boolean"
      },
      {
        "name": "vote_average",
        "type": "Float"
      },
      {
        "name": "vote_count",
        "type": "Int"
      }
    ]
  },
  {
    "name": "Language",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "iso_639_1",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  },
  {
    "name": "User",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      }
    ]
  },
  {
    "name": "TvSeries",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "backdrop_path",
        "type": "String",
        "description": "File path for the backdrop image URL."
      },
      {
        "name": "created_by",
        "type": "List",
        "description": "A list of creators of the TV series.",
        "ofType": "Creator"
      },
      {
        "name": "credits",
        "type": "Connection",
        "description": "All the cast and crew credits for the TV series.",
        "ofType": "Credit",
        "reverseName": "series"
      },
      {
        "name": "episode_run_time",
        "type": "List",
        "description": "A list of all episode run times (in minutes)",
        "ofType": "Int"
      },
      {
        "name": "first_air_date",
        "type": "DateTime"
      },
      {
        "name": "genres",
        "type": "List",
        "ofType": "Genre"
      },
      {
        "name": "homepage",
        "type": "String"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "in_production",
        "type": "Boolean"
      },
      {
        "name": "languages",
        "type": "List",
        "ofType": "String"
      },
      {
        "name": "last_air_date",
        "type": "DateTime"
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "networks",
        "type": "List",
        "ofType": "TvNetwork"
      },
      {
        "name": "number_of_episodes",
        "type": "Int"
      },
      {
        "name": "number_of_seasons",
        "type": "Int"
      },
      {
        "name": "origin_country",
        "type": "List",
        "ofType": "String"
      },
      {
        "name": "original_language",
        "type": "String"
      },
      {
        "name": "original_name",
        "type": "String"
      },
      {
        "name": "overview",
        "type": "String"
      },
      {
        "name": "popularity",
        "type": "Float",
        "description": "A number representing the relative popularity of the TV series."
      },
      {
        "name": "poster_path",
        "type": "String"
      },
      {
        "name": "production_companies",
        "type": "List",
        "ofType": "Company"
      },
      {
        "name": "seasons",
        "type": "Connection",
        "description": "A connection to all the seasons of this TV series.",
        "ofType": "TvSeason",
        "reverseName": "series"
      },
      {
        "name": "status",
        "type": "String"
      },
      {
        "name": "type",
        "type": "String"
      },
      {
        "name": "vote_average",
        "type": "Float",
        "description": "Average rating of this TV series. (0-10)"
      },
      {
        "name": "vote_count",
        "type": "Int"
      }
    ]
  },
  {
    "name": "Collection",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "backdrop_path",
        "type": "String"
      },
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "poster_path",
        "type": "String"
      }
    ]
  },
  {
    "name": "Credit",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "character",
        "type": "String",
        "description": "Name of a character. Included in cast credits."
      },
      {
        "name": "credit_type",
        "type": "String",
        "description": "Credit type. Possible values are \"cast\" and \"crew\"."
      },
      {
        "name": "department",
        "type": "String"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "job",
        "type": "String",
        "description": "Job title. Included in crew credits."
      },
      {
        "name": "media_type",
        "type": "String",
        "description": "Media type of this Credit. (`tv` or `movie`)."
      },
      {
        "name": "movie",
        "type": "Movie",
        "description": "For movie credits, includes the movie of this Credit.",
        "reverseName": "credits"
      },
      {
        "name": "name",
        "type": "String",
        "description": "Name of the person this Credit belongs to."
      },
      {
        "name": "order",
        "type": "Int",
        "description": "A sequence number for default ordering of credits"
      },
      {
        "name": "person",
        "type": "Person",
        "description": "The person this Credit belongs to.",
        "reverseName": "credits"
      },
      {
        "name": "profile_path",
        "type": "String",
        "description": "The file path for the profile image URL."
      },
      {
        "name": "series",
        "type": "TvSeries",
        "description": "For TV credits, includes the TV series of this Credit.",
        "reverseName": "credits"
      }
    ]
  },
  {
    "name": "TvNetwork",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  },
  {
    "name": "Company",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  }
]
Topics:

Reindex schema

The schema for a Reindex app is defined in JSON. You can fetch the schema for your app using a CLI command:

reindex schema-fetch

By default this saves the schema to a file named ReindexSchema.json. After editing the schema in your favorite editor, push it to your app with:

reindex schema-push

Reindex automatically migrates the database of the app to the new schema and generates things like mutations and input objects for it automatically.

You can also do migrations programmatically using migrate mutation.

Tip: Documentation browser

After pushing the schema to your app, you can view the whole GraphQL schema, including also the builtin types and auto-generated fields, in the documentation browser of GraphiQL.

Open GraphiQL with reindex graphiql and click “Docs” in the top right corner.

Schema JSON

The schema file includes an array of types for the schema. For example:

[
  {
    "kind": "OBJECT",
    "name": "User",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      }
    ]
  }
]

The properties supported in the schema definition are documented below.

Type object

The type object defines a single type in the schema.

fields: [ReindexField]

Array of field objects that describe the fields of the type.

permissions: [ReindexPermission]

Array of permissions that determine who has rights to read and change the nodes of this type.

interfaces: [String]

Array with the names of interfaces the type implements.

Supported interfaces are:

  • Node: Defines a type with globally unique ID.
Node types

The node types can be fetched using the node root field or the automatically created type specific root fields (e.g. todoById). They are also accessible through the connection of all nodes of a type (e.g. { viewer { allTodos { ... } } }).

They can also be referenced in other node types, forming relationships between types.

The node types also get a set of mutations created for them automatically. Here’s a list of mutations for type Todo:

  • createTodo – Creates a new Todo object.
  • updateTodo – Updates the given Todo object. The given fields are merged to the existing object.
  • replaceTodo – Replaces the given Todo object.
  • deleteTodo – Deletes the given Todo object.

kind: String!

The kind of the type. At the moment "OBJECT" is the only supported value.

name: String!

The name of the type.

The name must start with a capital letter. Allowed characters are letters A-Z, a-z and underscore (_). Type names that start with “Reindex” are reserved for builtin types.

pluralName: String

An optional pluralized name for the type. If not specified, the default English pluralization will be used for generated field names like allStories.

Field object

defaultOrdering: ReindexOrdering

For fields of type Connection, defines the default sorting order for the items in the connection. If specified, must be an object with properties field (name of a field) and order (either “ASC” or “DESC”).

deprecationReason: String

If given, makes the field show as deprecated.

description: String

An optional description for the GraphQL field. The description is shown in the documentation of your app’s API and also when you’re typing a query in GraphiQL.

name: String!

The name of the field. Allowed characters are letters A-Z, a-z and underscore (_).

nonNull: Boolean

Sets the GraphQL field as non-null.

unique: Boolean

Makes Reindex enforce uniqueness for this field. In addition, for each unique field a root field will be created for fetching this field.

ofType: String

The inner type of the field, required for Connection and List fields. For example:

  • A list of strings:
    { "name": "myList", "type": "List", "ofType": "String" }
    
  • A connection with User nodes:
    { "name": "myUsers", "type": "Connection", "ofType": "User" }
    

orderable: Boolean

If set, orderBy can be used on this field. Can be only set on scalar fields.

filterable: Boolean

If set, connection filter argument will be generated for this field. Can only be set on scalar fields.

reverseName: String

The name of the related field in the referenced type, required for object fields with a node type and for the corresponding Connection fields.

type: String!

Type of the field.

Following types are supported.

  • Scalar types:
    • Boolean
    • DateTime
    • Float
    • ID (only valid as the id field for nodes)
    • Int
    • String
  • List – A list of scalars or non-node objects. ofType defines the type of list elements.
  • Connection – A paginated list of nodes. Used to define one-to-many or many-to-many relationships between node types. ofType defines the type of connected nodes. A connection field always has a corresponding reverse field in the other type and the name of that field is defined with reverseName.
    • One-to-many relationships: The type of the reverse field is a node object type.
    • Many-to-many relationships: The type of the reverse field is also Connection.
  • Any object type:
    • When object type implements the Node interface, the field creates a connection between the types. The field must have a related Connection field in the other type.
    • An object field with non-node type is stored inline.

Example

Here’s a larger example of a schema for an app that stores movies and TV shows fetched from The Movie Database (TMDb):

[
  {
    "name": "TvSeason",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "air_date",
        "type": "DateTime"
      },
      {
        "name": "episodes",
        "type": "Connection",
        "ofType": "TvEpisode",
        "reverseName": "season"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "overview",
        "type": "String"
      },
      {
        "name": "poster_path",
        "type": "String"
      },
      {
        "name": "season_number",
        "type": "Int"
      },
      {
        "name": "series",
        "type": "TvSeries",
        "reverseName": "seasons"
      }
    ]
  },
  {
    "name": "Person",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "adult",
        "type": "Boolean"
      },
      {
        "name": "also_known_as",
        "type": "List",
        "ofType": "String"
      },
      {
        "name": "biography",
        "type": "String"
      },
      {
        "name": "birthday",
        "type": "DateTime"
      },
      {
        "name": "credits",
        "type": "Connection",
        "ofType": "Credit",
        "reverseName": "person"
      },
      {
        "name": "deathday",
        "type": "DateTime"
      },
      {
        "name": "homepage",
        "type": "String"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "imdb_id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "place_of_birth",
        "type": "String"
      },
      {
        "name": "popularity",
        "type": "Float"
      },
      {
        "name": "profile_path",
        "type": "String"
      }
    ]
  },
  {
    "name": "TvEpisode",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "air_date",
        "type": "DateTime"
      },
      {
        "name": "episode_number",
        "type": "Int"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "overview",
        "type": "String"
      },
      {
        "name": "production_code",
        "type": "String"
      },
      {
        "name": "season",
        "type": "TvSeason",
        "reverseName": "episodes"
      },
      {
        "name": "season_number",
        "type": "Int"
      },
      {
        "name": "still_path",
        "type": "String"
      },
      {
        "name": "vote_average",
        "type": "Float"
      },
      {
        "name": "vote_count",
        "type": "Int"
      }
    ]
  },
  {
    "name": "Country",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "iso_3166_1",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  },
  {
    "name": "Genre",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  },
  {
    "name": "Creator",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "profile_path",
        "type": "String"
      }
    ]
  },
  {
    "name": "Movie",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "adult",
        "type": "Boolean"
      },
      {
        "name": "backdrop_path",
        "type": "String"
      },
      {
        "name": "belongs_to_collection",
        "type": "Collection"
      },
      {
        "name": "budget",
        "type": "Int"
      },
      {
        "name": "credits",
        "type": "Connection",
        "ofType": "Credit",
        "reverseName": "movie"
      },
      {
        "name": "genres",
        "type": "List",
        "ofType": "Genre"
      },
      {
        "name": "homepage",
        "type": "String"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "imdb_id",
        "type": "String"
      },
      {
        "name": "original_language",
        "type": "String"
      },
      {
        "name": "original_title",
        "type": "String"
      },
      {
        "name": "overview",
        "type": "String"
      },
      {
        "name": "popularity",
        "type": "Float"
      },
      {
        "name": "poster_path",
        "type": "String"
      },
      {
        "name": "production_companies",
        "type": "List",
        "ofType": "Company"
      },
      {
        "name": "production_countries",
        "type": "List",
        "ofType": "Country"
      },
      {
        "name": "release_date",
        "type": "DateTime"
      },
      {
        "name": "revenue",
        "type": "Int"
      },
      {
        "name": "runtime",
        "type": "Int"
      },
      {
        "name": "spoken_languages",
        "type": "List",
        "ofType": "Language"
      },
      {
        "name": "status",
        "type": "String"
      },
      {
        "name": "tagline",
        "type": "String"
      },
      {
        "name": "title",
        "type": "String"
      },
      {
        "name": "video",
        "type": "Boolean"
      },
      {
        "name": "vote_average",
        "type": "Float"
      },
      {
        "name": "vote_count",
        "type": "Int"
      }
    ]
  },
  {
    "name": "Language",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "iso_639_1",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  },
  {
    "name": "User",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      }
    ]
  },
  {
    "name": "TvSeries",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "backdrop_path",
        "type": "String",
        "description": "File path for the backdrop image URL."
      },
      {
        "name": "created_by",
        "type": "List",
        "description": "A list of creators of the TV series.",
        "ofType": "Creator"
      },
      {
        "name": "credits",
        "type": "Connection",
        "description": "All the cast and crew credits for the TV series.",
        "ofType": "Credit",
        "reverseName": "series"
      },
      {
        "name": "episode_run_time",
        "type": "List",
        "description": "A list of all episode run times (in minutes)",
        "ofType": "Int"
      },
      {
        "name": "first_air_date",
        "type": "DateTime"
      },
      {
        "name": "genres",
        "type": "List",
        "ofType": "Genre"
      },
      {
        "name": "homepage",
        "type": "String"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "in_production",
        "type": "Boolean"
      },
      {
        "name": "languages",
        "type": "List",
        "ofType": "String"
      },
      {
        "name": "last_air_date",
        "type": "DateTime"
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "networks",
        "type": "List",
        "ofType": "TvNetwork"
      },
      {
        "name": "number_of_episodes",
        "type": "Int"
      },
      {
        "name": "number_of_seasons",
        "type": "Int"
      },
      {
        "name": "origin_country",
        "type": "List",
        "ofType": "String"
      },
      {
        "name": "original_language",
        "type": "String"
      },
      {
        "name": "original_name",
        "type": "String"
      },
      {
        "name": "overview",
        "type": "String"
      },
      {
        "name": "popularity",
        "type": "Float",
        "description": "A number representing the relative popularity of the TV series."
      },
      {
        "name": "poster_path",
        "type": "String"
      },
      {
        "name": "production_companies",
        "type": "List",
        "ofType": "Company"
      },
      {
        "name": "seasons",
        "type": "Connection",
        "description": "A connection to all the seasons of this TV series.",
        "ofType": "TvSeason",
        "reverseName": "series"
      },
      {
        "name": "status",
        "type": "String"
      },
      {
        "name": "type",
        "type": "String"
      },
      {
        "name": "vote_average",
        "type": "Float",
        "description": "Average rating of this TV series. (0-10)"
      },
      {
        "name": "vote_count",
        "type": "Int"
      }
    ]
  },
  {
    "name": "Collection",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "backdrop_path",
        "type": "String"
      },
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      },
      {
        "name": "poster_path",
        "type": "String"
      }
    ]
  },
  {
    "name": "Credit",
    "kind": "OBJECT",
    "interfaces": [
      "Node"
    ],
    "fields": [
      {
        "name": "character",
        "type": "String",
        "description": "Name of a character. Included in cast credits."
      },
      {
        "name": "credit_type",
        "type": "String",
        "description": "Credit type. Possible values are \"cast\" and \"crew\"."
      },
      {
        "name": "department",
        "type": "String"
      },
      {
        "name": "id",
        "type": "ID",
        "nonNull": true,
        "unique": true
      },
      {
        "name": "job",
        "type": "String",
        "description": "Job title. Included in crew credits."
      },
      {
        "name": "media_type",
        "type": "String",
        "description": "Media type of this Credit. (`tv` or `movie`)."
      },
      {
        "name": "movie",
        "type": "Movie",
        "description": "For movie credits, includes the movie of this Credit.",
        "reverseName": "credits"
      },
      {
        "name": "name",
        "type": "String",
        "description": "Name of the person this Credit belongs to."
      },
      {
        "name": "order",
        "type": "Int",
        "description": "A sequence number for default ordering of credits"
      },
      {
        "name": "person",
        "type": "Person",
        "description": "The person this Credit belongs to.",
        "reverseName": "credits"
      },
      {
        "name": "profile_path",
        "type": "String",
        "description": "The file path for the profile image URL."
      },
      {
        "name": "series",
        "type": "TvSeries",
        "description": "For TV credits, includes the TV series of this Credit.",
        "reverseName": "credits"
      }
    ]
  },
  {
    "name": "TvNetwork",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  },
  {
    "name": "Company",
    "kind": "OBJECT",
    "interfaces": [],
    "fields": [
      {
        "name": "id",
        "type": "String"
      },
      {
        "name": "name",
        "type": "String"
      }
    ]
  }
]