Quellcode durchsuchen

merged with lab version

Tomislav Cvetic vor 5 Jahren
Ursprung
Commit
cff2825320

+ 10 - 0
backend/.graphqlconfig.yml

@@ -0,0 +1,10 @@
+projects:
+  app:
+    schemaPath: "schema.graphql"
+    extensions:
+      endpoints:
+        default: "http://localhost:4444"
+  prisma:
+    schemaPath: "database/generated/prisma.graphql"
+    extensions:
+      prisma: prisma.yml

+ 50 - 28
backend/database/generated/prisma-client/index.d.ts

@@ -1132,6 +1132,8 @@ export type InstrumentInstanceOrderByInput =
   | "id_DESC"
   | "identifier_ASC"
   | "identifier_DESC"
+  | "interface_ASC"
+  | "interface_DESC"
   | "label_ASC"
   | "label_DESC"
   | "location_ASC"
@@ -1477,9 +1479,9 @@ export interface ProjectWhereInput {
   description_not_starts_with?: String;
   description_ends_with?: String;
   description_not_ends_with?: String;
-  images_every?: FileWhereInput;
-  images_some?: FileWhereInput;
-  images_none?: FileWhereInput;
+  files_every?: FileWhereInput;
+  files_some?: FileWhereInput;
+  files_none?: FileWhereInput;
   versions_every?: ProjectVersionWhereInput;
   versions_some?: ProjectVersionWhereInput;
   versions_none?: ProjectVersionWhereInput;
@@ -1974,6 +1976,20 @@ export interface InstrumentInstanceWhereInput {
   identifier_not_starts_with?: String;
   identifier_ends_with?: String;
   identifier_not_ends_with?: String;
+  interface?: String;
+  interface_not?: String;
+  interface_in?: String[] | String;
+  interface_not_in?: String[] | String;
+  interface_lt?: String;
+  interface_lte?: String;
+  interface_gt?: String;
+  interface_gte?: String;
+  interface_contains?: String;
+  interface_not_contains?: String;
+  interface_starts_with?: String;
+  interface_not_starts_with?: String;
+  interface_ends_with?: String;
+  interface_not_ends_with?: String;
   label?: String;
   label_not?: String;
   label_in?: String[] | String;
@@ -2550,7 +2566,7 @@ export interface ProjectCreateWithoutVersionsInput {
   name: String;
   abbreviation: String;
   description?: String;
-  images?: FileCreateManyInput;
+  files?: FileCreateManyInput;
 }
 
 export interface FileCreateManyInput {
@@ -2684,7 +2700,7 @@ export interface InstrumentInstanceCreateManyInput {
 export interface InstrumentInstanceCreateInput {
   instrument: InstrumentCreateOneInput;
   identifier: String;
-  interface?: InstrumentInstanceCreateinterfaceInput;
+  interface: String;
   label?: String;
   location?: String;
 }
@@ -2787,10 +2803,6 @@ export interface InstrumentCreateWithoutCommandsInput {
   subsystems?: InstrumentSubsystemCreateManyInput;
 }
 
-export interface InstrumentInstanceCreateinterfaceInput {
-  set?: String[] | String;
-}
-
 export interface CharacterizationUpdateInput {
   name?: String;
   projectVersion?: ProjectVersionUpdateOneRequiredInput;
@@ -2826,7 +2838,7 @@ export interface ProjectUpdateWithoutVersionsDataInput {
   name?: String;
   abbreviation?: String;
   description?: String;
-  images?: FileUpdateManyInput;
+  files?: FileUpdateManyInput;
 }
 
 export interface FileUpdateManyInput {
@@ -3609,7 +3621,7 @@ export interface InstrumentInstanceUpdateWithWhereUniqueNestedInput {
 export interface InstrumentInstanceUpdateDataInput {
   instrument?: InstrumentUpdateOneRequiredInput;
   identifier?: String;
-  interface?: InstrumentInstanceUpdateinterfaceInput;
+  interface?: String;
   label?: String;
   location?: String;
 }
@@ -4126,10 +4138,6 @@ export interface InstrumentUpsertNestedInput {
   create: InstrumentCreateInput;
 }
 
-export interface InstrumentInstanceUpdateinterfaceInput {
-  set?: String[] | String;
-}
-
 export interface InstrumentInstanceUpsertWithWhereUniqueNestedInput {
   where: InstrumentInstanceWhereUniqueInput;
   update: InstrumentInstanceUpdateDataInput;
@@ -4165,6 +4173,20 @@ export interface InstrumentInstanceScalarWhereInput {
   identifier_not_starts_with?: String;
   identifier_ends_with?: String;
   identifier_not_ends_with?: String;
+  interface?: String;
+  interface_not?: String;
+  interface_in?: String[] | String;
+  interface_not_in?: String[] | String;
+  interface_lt?: String;
+  interface_lte?: String;
+  interface_gt?: String;
+  interface_gte?: String;
+  interface_contains?: String;
+  interface_not_contains?: String;
+  interface_starts_with?: String;
+  interface_not_starts_with?: String;
+  interface_ends_with?: String;
+  interface_not_ends_with?: String;
   label?: String;
   label_not?: String;
   label_in?: String[] | String;
@@ -4211,7 +4233,7 @@ export interface InstrumentInstanceUpdateManyWithWhereNestedInput {
 
 export interface InstrumentInstanceUpdateManyDataInput {
   identifier?: String;
-  interface?: InstrumentInstanceUpdateinterfaceInput;
+  interface?: String;
   label?: String;
   location?: String;
 }
@@ -4418,14 +4440,14 @@ export interface InstrumentCommandUpdateManyMutationInput {
 export interface InstrumentInstanceUpdateInput {
   instrument?: InstrumentUpdateOneRequiredInput;
   identifier?: String;
-  interface?: InstrumentInstanceUpdateinterfaceInput;
+  interface?: String;
   label?: String;
   location?: String;
 }
 
 export interface InstrumentInstanceUpdateManyMutationInput {
   identifier?: String;
-  interface?: InstrumentInstanceUpdateinterfaceInput;
+  interface?: String;
   label?: String;
   location?: String;
 }
@@ -4511,7 +4533,7 @@ export interface ProjectCreateInput {
   name: String;
   abbreviation: String;
   description?: String;
-  images?: FileCreateManyInput;
+  files?: FileCreateManyInput;
   versions?: ProjectVersionCreateManyWithoutProjectInput;
 }
 
@@ -4532,7 +4554,7 @@ export interface ProjectUpdateInput {
   name?: String;
   abbreviation?: String;
   description?: String;
-  images?: FileUpdateManyInput;
+  files?: FileUpdateManyInput;
   versions?: ProjectVersionUpdateManyWithoutProjectInput;
 }
 
@@ -5048,7 +5070,7 @@ export interface ProjectPromise extends Promise<Project>, Fragmentable {
   name: () => Promise<String>;
   abbreviation: () => Promise<String>;
   description: () => Promise<String>;
-  images: <T = FragmentableArray<File>>(
+  files: <T = FragmentableArray<File>>(
     args?: {
       where?: FileWhereInput;
       orderBy?: FileOrderByInput;
@@ -5079,7 +5101,7 @@ export interface ProjectSubscription
   name: () => Promise<AsyncIterator<String>>;
   abbreviation: () => Promise<AsyncIterator<String>>;
   description: () => Promise<AsyncIterator<String>>;
-  images: <T = Promise<AsyncIterator<FileSubscription>>>(
+  files: <T = Promise<AsyncIterator<FileSubscription>>>(
     args?: {
       where?: FileWhereInput;
       orderBy?: FileOrderByInput;
@@ -5572,7 +5594,7 @@ export interface SetupHardwareSubscription
 export interface InstrumentInstance {
   id: ID_Output;
   identifier: String;
-  interface: String[];
+  interface: String;
   label?: String;
   location?: String;
 }
@@ -5583,7 +5605,7 @@ export interface InstrumentInstancePromise
   id: () => Promise<ID_Output>;
   instrument: <T = InstrumentPromise>() => T;
   identifier: () => Promise<String>;
-  interface: () => Promise<String[]>;
+  interface: () => Promise<String>;
   label: () => Promise<String>;
   location: () => Promise<String>;
 }
@@ -5594,7 +5616,7 @@ export interface InstrumentInstanceSubscription
   id: () => Promise<AsyncIterator<ID_Output>>;
   instrument: <T = InstrumentSubscription>() => T;
   identifier: () => Promise<AsyncIterator<String>>;
-  interface: () => Promise<AsyncIterator<String[]>>;
+  interface: () => Promise<AsyncIterator<String>>;
   label: () => Promise<AsyncIterator<String>>;
   location: () => Promise<AsyncIterator<String>>;
 }
@@ -7405,7 +7427,7 @@ export interface InstrumentInstanceSubscriptionPayloadSubscription
 export interface InstrumentInstancePreviousValues {
   id: ID_Output;
   identifier: String;
-  interface: String[];
+  interface: String;
   label?: String;
   location?: String;
 }
@@ -7415,7 +7437,7 @@ export interface InstrumentInstancePreviousValuesPromise
     Fragmentable {
   id: () => Promise<ID_Output>;
   identifier: () => Promise<String>;
-  interface: () => Promise<String[]>;
+  interface: () => Promise<String>;
   label: () => Promise<String>;
   location: () => Promise<String>;
 }
@@ -7425,7 +7447,7 @@ export interface InstrumentInstancePreviousValuesSubscription
     Fragmentable {
   id: () => Promise<AsyncIterator<ID_Output>>;
   identifier: () => Promise<AsyncIterator<String>>;
-  interface: () => Promise<AsyncIterator<String[]>>;
+  interface: () => Promise<AsyncIterator<String>>;
   label: () => Promise<AsyncIterator<String>>;
   location: () => Promise<AsyncIterator<String>>;
 }

+ 45 - 23
backend/database/generated/prisma-client/prisma-schema.js

@@ -1538,7 +1538,7 @@ type InstrumentInstance {
   id: ID!
   instrument: Instrument!
   identifier: String!
-  interface: [String!]!
+  interface: String!
   label: String
   location: String
 }
@@ -1552,15 +1552,11 @@ type InstrumentInstanceConnection {
 input InstrumentInstanceCreateInput {
   instrument: InstrumentCreateOneInput!
   identifier: String!
-  interface: InstrumentInstanceCreateinterfaceInput
+  interface: String!
   label: String
   location: String
 }
 
-input InstrumentInstanceCreateinterfaceInput {
-  set: [String!]
-}
-
 input InstrumentInstanceCreateManyInput {
   create: [InstrumentInstanceCreateInput!]
   connect: [InstrumentInstanceWhereUniqueInput!]
@@ -1576,6 +1572,8 @@ enum InstrumentInstanceOrderByInput {
   id_DESC
   identifier_ASC
   identifier_DESC
+  interface_ASC
+  interface_DESC
   label_ASC
   label_DESC
   location_ASC
@@ -1589,7 +1587,7 @@ enum InstrumentInstanceOrderByInput {
 type InstrumentInstancePreviousValues {
   id: ID!
   identifier: String!
-  interface: [String!]!
+  interface: String!
   label: String
   location: String
 }
@@ -1623,6 +1621,20 @@ input InstrumentInstanceScalarWhereInput {
   identifier_not_starts_with: String
   identifier_ends_with: String
   identifier_not_ends_with: String
+  interface: String
+  interface_not: String
+  interface_in: [String!]
+  interface_not_in: [String!]
+  interface_lt: String
+  interface_lte: String
+  interface_gt: String
+  interface_gte: String
+  interface_contains: String
+  interface_not_contains: String
+  interface_starts_with: String
+  interface_not_starts_with: String
+  interface_ends_with: String
+  interface_not_ends_with: String
   label: String
   label_not: String
   label_in: [String!]
@@ -1677,7 +1689,7 @@ input InstrumentInstanceSubscriptionWhereInput {
 input InstrumentInstanceUpdateDataInput {
   instrument: InstrumentUpdateOneRequiredInput
   identifier: String
-  interface: InstrumentInstanceUpdateinterfaceInput
+  interface: String
   label: String
   location: String
 }
@@ -1685,18 +1697,14 @@ input InstrumentInstanceUpdateDataInput {
 input InstrumentInstanceUpdateInput {
   instrument: InstrumentUpdateOneRequiredInput
   identifier: String
-  interface: InstrumentInstanceUpdateinterfaceInput
+  interface: String
   label: String
   location: String
 }
 
-input InstrumentInstanceUpdateinterfaceInput {
-  set: [String!]
-}
-
 input InstrumentInstanceUpdateManyDataInput {
   identifier: String
-  interface: InstrumentInstanceUpdateinterfaceInput
+  interface: String
   label: String
   location: String
 }
@@ -1715,7 +1723,7 @@ input InstrumentInstanceUpdateManyInput {
 
 input InstrumentInstanceUpdateManyMutationInput {
   identifier: String
-  interface: InstrumentInstanceUpdateinterfaceInput
+  interface: String
   label: String
   location: String
 }
@@ -1766,6 +1774,20 @@ input InstrumentInstanceWhereInput {
   identifier_not_starts_with: String
   identifier_ends_with: String
   identifier_not_ends_with: String
+  interface: String
+  interface_not: String
+  interface_in: [String!]
+  interface_not_in: [String!]
+  interface_lt: String
+  interface_lte: String
+  interface_gt: String
+  interface_gte: String
+  interface_contains: String
+  interface_not_contains: String
+  interface_starts_with: String
+  interface_not_starts_with: String
+  interface_ends_with: String
+  interface_not_ends_with: String
   label: String
   label_not: String
   label_in: [String!]
@@ -3349,7 +3371,7 @@ type Project {
   name: String!
   abbreviation: String!
   description: String
-  images(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File!]
+  files(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File!]
   versions(where: ProjectVersionWhereInput, orderBy: ProjectVersionOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [ProjectVersion!]
 }
 
@@ -3363,7 +3385,7 @@ input ProjectCreateInput {
   name: String!
   abbreviation: String!
   description: String
-  images: FileCreateManyInput
+  files: FileCreateManyInput
   versions: ProjectVersionCreateManyWithoutProjectInput
 }
 
@@ -3376,7 +3398,7 @@ input ProjectCreateWithoutVersionsInput {
   name: String!
   abbreviation: String!
   description: String
-  images: FileCreateManyInput
+  files: FileCreateManyInput
 }
 
 type ProjectEdge {
@@ -3428,7 +3450,7 @@ input ProjectUpdateInput {
   name: String
   abbreviation: String
   description: String
-  images: FileUpdateManyInput
+  files: FileUpdateManyInput
   versions: ProjectVersionUpdateManyWithoutProjectInput
 }
 
@@ -3449,7 +3471,7 @@ input ProjectUpdateWithoutVersionsDataInput {
   name: String
   abbreviation: String
   description: String
-  images: FileUpdateManyInput
+  files: FileUpdateManyInput
 }
 
 input ProjectUpsertWithoutVersionsInput {
@@ -3764,9 +3786,9 @@ input ProjectWhereInput {
   description_not_starts_with: String
   description_ends_with: String
   description_not_ends_with: String
-  images_every: FileWhereInput
-  images_some: FileWhereInput
-  images_none: FileWhereInput
+  files_every: FileWhereInput
+  files_some: FileWhereInput
+  files_none: FileWhereInput
   versions_every: ProjectVersionWhereInput
   versions_some: ProjectVersionWhereInput
   versions_none: ProjectVersionWhereInput

+ 8489 - 0
backend/database/generated/prisma.graphql

@@ -0,0 +1,8489 @@
+# source: http://localhost:4466
+# timestamp: Wed Apr 24 2019 17:07:32 GMT+0200 (Central European Summer Time)
+
+type AggregateCharacterization {
+  count: Int!
+}
+
+type AggregateComment {
+  count: Int!
+}
+
+type AggregateDUT {
+  count: Int!
+}
+
+type AggregateEvent {
+  count: Int!
+}
+
+type AggregateFile {
+  count: Int!
+}
+
+type AggregateInstrument {
+  count: Int!
+}
+
+type AggregateInstrumentCommand {
+  count: Int!
+}
+
+type AggregateInstrumentInstance {
+  count: Int!
+}
+
+type AggregateInstrumentParameter {
+  count: Int!
+}
+
+type AggregateInstrumentSubsystem {
+  count: Int!
+}
+
+type AggregateMeasurement {
+  count: Int!
+}
+
+type AggregateMeasurementRun {
+  count: Int!
+}
+
+type AggregateMeta {
+  count: Int!
+}
+
+type AggregateProject {
+  count: Int!
+}
+
+type AggregateProjectVersion {
+  count: Int!
+}
+
+type AggregateSetup {
+  count: Int!
+}
+
+type AggregateSetupHardware {
+  count: Int!
+}
+
+type AggregateSetupHardwareInstance {
+  count: Int!
+}
+
+type AggregateUser {
+  count: Int!
+}
+
+type BatchPayload {
+  """The number of nodes that have been affected by the Batch operation."""
+  count: Long!
+}
+
+type Characterization implements Node {
+  id: ID!
+  name: String!
+  projectVersion: ProjectVersion!
+  measurementRuns(where: MeasurementRunWhereInput, orderBy: MeasurementRunOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [MeasurementRun!]
+}
+
+"""A connection to a list of items."""
+type CharacterizationConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [CharacterizationEdge]!
+  aggregate: AggregateCharacterization!
+}
+
+input CharacterizationCreateInput {
+  name: String!
+  projectVersion: ProjectVersionCreateOneInput!
+  measurementRuns: MeasurementRunCreateManyInput
+}
+
+"""An edge in a connection."""
+type CharacterizationEdge {
+  """The item at the end of the edge."""
+  node: Characterization!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum CharacterizationOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type CharacterizationPreviousValues {
+  id: ID!
+  name: String!
+}
+
+type CharacterizationSubscriptionPayload {
+  mutation: MutationType!
+  node: Characterization
+  updatedFields: [String!]
+  previousValues: CharacterizationPreviousValues
+}
+
+input CharacterizationSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [CharacterizationSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [CharacterizationSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [CharacterizationSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: CharacterizationWhereInput
+}
+
+input CharacterizationUpdateInput {
+  name: String
+  projectVersion: ProjectVersionUpdateOneRequiredInput
+  measurementRuns: MeasurementRunUpdateManyInput
+}
+
+input CharacterizationUpdateManyMutationInput {
+  name: String
+}
+
+input CharacterizationWhereInput {
+  """Logical AND on all given filters."""
+  AND: [CharacterizationWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [CharacterizationWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [CharacterizationWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  projectVersion: ProjectVersionWhereInput
+  measurementRuns_every: MeasurementRunWhereInput
+  measurementRuns_some: MeasurementRunWhereInput
+  measurementRuns_none: MeasurementRunWhereInput
+}
+
+input CharacterizationWhereUniqueInput {
+  id: ID
+}
+
+type Comment implements Node {
+  id: ID!
+  text: String
+  createdAt: DateTime!
+  previousVersion: Comment
+}
+
+"""A connection to a list of items."""
+type CommentConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [CommentEdge]!
+  aggregate: AggregateComment!
+}
+
+input CommentCreateInput {
+  text: String
+  previousVersion: CommentCreateOneInput
+}
+
+input CommentCreateManyInput {
+  create: [CommentCreateInput!]
+  connect: [CommentWhereUniqueInput!]
+}
+
+input CommentCreateOneInput {
+  create: CommentCreateInput
+  connect: CommentWhereUniqueInput
+}
+
+"""An edge in a connection."""
+type CommentEdge {
+  """The item at the end of the edge."""
+  node: Comment!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum CommentOrderByInput {
+  id_ASC
+  id_DESC
+  text_ASC
+  text_DESC
+  createdAt_ASC
+  createdAt_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+}
+
+type CommentPreviousValues {
+  id: ID!
+  text: String
+  createdAt: DateTime!
+}
+
+input CommentScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [CommentScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [CommentScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [CommentScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  text: String
+
+  """All values that are not equal to given value."""
+  text_not: String
+
+  """All values that are contained in given list."""
+  text_in: [String!]
+
+  """All values that are not contained in given list."""
+  text_not_in: [String!]
+
+  """All values less than the given value."""
+  text_lt: String
+
+  """All values less than or equal the given value."""
+  text_lte: String
+
+  """All values greater than the given value."""
+  text_gt: String
+
+  """All values greater than or equal the given value."""
+  text_gte: String
+
+  """All values containing the given string."""
+  text_contains: String
+
+  """All values not containing the given string."""
+  text_not_contains: String
+
+  """All values starting with the given string."""
+  text_starts_with: String
+
+  """All values not starting with the given string."""
+  text_not_starts_with: String
+
+  """All values ending with the given string."""
+  text_ends_with: String
+
+  """All values not ending with the given string."""
+  text_not_ends_with: String
+  createdAt: DateTime
+
+  """All values that are not equal to given value."""
+  createdAt_not: DateTime
+
+  """All values that are contained in given list."""
+  createdAt_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  createdAt_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  createdAt_lt: DateTime
+
+  """All values less than or equal the given value."""
+  createdAt_lte: DateTime
+
+  """All values greater than the given value."""
+  createdAt_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  createdAt_gte: DateTime
+}
+
+type CommentSubscriptionPayload {
+  mutation: MutationType!
+  node: Comment
+  updatedFields: [String!]
+  previousValues: CommentPreviousValues
+}
+
+input CommentSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [CommentSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [CommentSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [CommentSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: CommentWhereInput
+}
+
+input CommentUpdateDataInput {
+  text: String
+  previousVersion: CommentUpdateOneInput
+}
+
+input CommentUpdateInput {
+  text: String
+  previousVersion: CommentUpdateOneInput
+}
+
+input CommentUpdateManyDataInput {
+  text: String
+}
+
+input CommentUpdateManyInput {
+  create: [CommentCreateInput!]
+  connect: [CommentWhereUniqueInput!]
+  set: [CommentWhereUniqueInput!]
+  disconnect: [CommentWhereUniqueInput!]
+  delete: [CommentWhereUniqueInput!]
+  update: [CommentUpdateWithWhereUniqueNestedInput!]
+  updateMany: [CommentUpdateManyWithWhereNestedInput!]
+  deleteMany: [CommentScalarWhereInput!]
+  upsert: [CommentUpsertWithWhereUniqueNestedInput!]
+}
+
+input CommentUpdateManyMutationInput {
+  text: String
+}
+
+input CommentUpdateManyWithWhereNestedInput {
+  where: CommentScalarWhereInput!
+  data: CommentUpdateManyDataInput!
+}
+
+input CommentUpdateOneInput {
+  create: CommentCreateInput
+  connect: CommentWhereUniqueInput
+  disconnect: Boolean
+  delete: Boolean
+  update: CommentUpdateDataInput
+  upsert: CommentUpsertNestedInput
+}
+
+input CommentUpdateWithWhereUniqueNestedInput {
+  where: CommentWhereUniqueInput!
+  data: CommentUpdateDataInput!
+}
+
+input CommentUpsertNestedInput {
+  update: CommentUpdateDataInput!
+  create: CommentCreateInput!
+}
+
+input CommentUpsertWithWhereUniqueNestedInput {
+  where: CommentWhereUniqueInput!
+  update: CommentUpdateDataInput!
+  create: CommentCreateInput!
+}
+
+input CommentWhereInput {
+  """Logical AND on all given filters."""
+  AND: [CommentWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [CommentWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [CommentWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  text: String
+
+  """All values that are not equal to given value."""
+  text_not: String
+
+  """All values that are contained in given list."""
+  text_in: [String!]
+
+  """All values that are not contained in given list."""
+  text_not_in: [String!]
+
+  """All values less than the given value."""
+  text_lt: String
+
+  """All values less than or equal the given value."""
+  text_lte: String
+
+  """All values greater than the given value."""
+  text_gt: String
+
+  """All values greater than or equal the given value."""
+  text_gte: String
+
+  """All values containing the given string."""
+  text_contains: String
+
+  """All values not containing the given string."""
+  text_not_contains: String
+
+  """All values starting with the given string."""
+  text_starts_with: String
+
+  """All values not starting with the given string."""
+  text_not_starts_with: String
+
+  """All values ending with the given string."""
+  text_ends_with: String
+
+  """All values not ending with the given string."""
+  text_not_ends_with: String
+  createdAt: DateTime
+
+  """All values that are not equal to given value."""
+  createdAt_not: DateTime
+
+  """All values that are contained in given list."""
+  createdAt_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  createdAt_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  createdAt_lt: DateTime
+
+  """All values less than or equal the given value."""
+  createdAt_lte: DateTime
+
+  """All values greater than the given value."""
+  createdAt_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  createdAt_gte: DateTime
+  previousVersion: CommentWhereInput
+}
+
+input CommentWhereUniqueInput {
+  id: ID
+}
+
+scalar DateTime
+
+type DUT implements Node {
+  id: ID!
+  name: String!
+  description: String
+  project: ProjectVersion!
+  modifications: [String!]!
+}
+
+"""A connection to a list of items."""
+type DUTConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [DUTEdge]!
+  aggregate: AggregateDUT!
+}
+
+input DUTCreateInput {
+  name: String!
+  description: String
+  modifications: DUTCreatemodificationsInput
+  project: ProjectVersionCreateOneInput!
+}
+
+input DUTCreatemodificationsInput {
+  set: [String!]
+}
+
+"""An edge in a connection."""
+type DUTEdge {
+  """The item at the end of the edge."""
+  node: DUT!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum DUTOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  description_ASC
+  description_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type DUTPreviousValues {
+  id: ID!
+  name: String!
+  description: String
+  modifications: [String!]!
+}
+
+type DUTSubscriptionPayload {
+  mutation: MutationType!
+  node: DUT
+  updatedFields: [String!]
+  previousValues: DUTPreviousValues
+}
+
+input DUTSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [DUTSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [DUTSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [DUTSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: DUTWhereInput
+}
+
+input DUTUpdateInput {
+  name: String
+  description: String
+  modifications: DUTUpdatemodificationsInput
+  project: ProjectVersionUpdateOneRequiredInput
+}
+
+input DUTUpdateManyMutationInput {
+  name: String
+  description: String
+  modifications: DUTUpdatemodificationsInput
+}
+
+input DUTUpdatemodificationsInput {
+  set: [String!]
+}
+
+input DUTWhereInput {
+  """Logical AND on all given filters."""
+  AND: [DUTWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [DUTWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [DUTWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  project: ProjectVersionWhereInput
+}
+
+input DUTWhereUniqueInput {
+  id: ID
+}
+
+type Event implements Node {
+  id: ID!
+  json: String!
+  when: DateTime!
+}
+
+"""A connection to a list of items."""
+type EventConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [EventEdge]!
+  aggregate: AggregateEvent!
+}
+
+input EventCreateInput {
+  json: String!
+  when: DateTime!
+}
+
+input EventCreateManyInput {
+  create: [EventCreateInput!]
+  connect: [EventWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type EventEdge {
+  """The item at the end of the edge."""
+  node: Event!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum EventOrderByInput {
+  id_ASC
+  id_DESC
+  json_ASC
+  json_DESC
+  when_ASC
+  when_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type EventPreviousValues {
+  id: ID!
+  json: String!
+  when: DateTime!
+}
+
+input EventScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [EventScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [EventScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [EventScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  json: String
+
+  """All values that are not equal to given value."""
+  json_not: String
+
+  """All values that are contained in given list."""
+  json_in: [String!]
+
+  """All values that are not contained in given list."""
+  json_not_in: [String!]
+
+  """All values less than the given value."""
+  json_lt: String
+
+  """All values less than or equal the given value."""
+  json_lte: String
+
+  """All values greater than the given value."""
+  json_gt: String
+
+  """All values greater than or equal the given value."""
+  json_gte: String
+
+  """All values containing the given string."""
+  json_contains: String
+
+  """All values not containing the given string."""
+  json_not_contains: String
+
+  """All values starting with the given string."""
+  json_starts_with: String
+
+  """All values not starting with the given string."""
+  json_not_starts_with: String
+
+  """All values ending with the given string."""
+  json_ends_with: String
+
+  """All values not ending with the given string."""
+  json_not_ends_with: String
+  when: DateTime
+
+  """All values that are not equal to given value."""
+  when_not: DateTime
+
+  """All values that are contained in given list."""
+  when_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  when_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  when_lt: DateTime
+
+  """All values less than or equal the given value."""
+  when_lte: DateTime
+
+  """All values greater than the given value."""
+  when_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  when_gte: DateTime
+}
+
+type EventSubscriptionPayload {
+  mutation: MutationType!
+  node: Event
+  updatedFields: [String!]
+  previousValues: EventPreviousValues
+}
+
+input EventSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [EventSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [EventSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [EventSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: EventWhereInput
+}
+
+input EventUpdateDataInput {
+  json: String
+  when: DateTime
+}
+
+input EventUpdateInput {
+  json: String
+  when: DateTime
+}
+
+input EventUpdateManyDataInput {
+  json: String
+  when: DateTime
+}
+
+input EventUpdateManyInput {
+  create: [EventCreateInput!]
+  connect: [EventWhereUniqueInput!]
+  set: [EventWhereUniqueInput!]
+  disconnect: [EventWhereUniqueInput!]
+  delete: [EventWhereUniqueInput!]
+  update: [EventUpdateWithWhereUniqueNestedInput!]
+  updateMany: [EventUpdateManyWithWhereNestedInput!]
+  deleteMany: [EventScalarWhereInput!]
+  upsert: [EventUpsertWithWhereUniqueNestedInput!]
+}
+
+input EventUpdateManyMutationInput {
+  json: String
+  when: DateTime
+}
+
+input EventUpdateManyWithWhereNestedInput {
+  where: EventScalarWhereInput!
+  data: EventUpdateManyDataInput!
+}
+
+input EventUpdateWithWhereUniqueNestedInput {
+  where: EventWhereUniqueInput!
+  data: EventUpdateDataInput!
+}
+
+input EventUpsertWithWhereUniqueNestedInput {
+  where: EventWhereUniqueInput!
+  update: EventUpdateDataInput!
+  create: EventCreateInput!
+}
+
+input EventWhereInput {
+  """Logical AND on all given filters."""
+  AND: [EventWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [EventWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [EventWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  json: String
+
+  """All values that are not equal to given value."""
+  json_not: String
+
+  """All values that are contained in given list."""
+  json_in: [String!]
+
+  """All values that are not contained in given list."""
+  json_not_in: [String!]
+
+  """All values less than the given value."""
+  json_lt: String
+
+  """All values less than or equal the given value."""
+  json_lte: String
+
+  """All values greater than the given value."""
+  json_gt: String
+
+  """All values greater than or equal the given value."""
+  json_gte: String
+
+  """All values containing the given string."""
+  json_contains: String
+
+  """All values not containing the given string."""
+  json_not_contains: String
+
+  """All values starting with the given string."""
+  json_starts_with: String
+
+  """All values not starting with the given string."""
+  json_not_starts_with: String
+
+  """All values ending with the given string."""
+  json_ends_with: String
+
+  """All values not ending with the given string."""
+  json_not_ends_with: String
+  when: DateTime
+
+  """All values that are not equal to given value."""
+  when_not: DateTime
+
+  """All values that are contained in given list."""
+  when_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  when_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  when_lt: DateTime
+
+  """All values less than or equal the given value."""
+  when_lte: DateTime
+
+  """All values greater than the given value."""
+  when_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  when_gte: DateTime
+}
+
+input EventWhereUniqueInput {
+  id: ID
+}
+
+type File implements Node {
+  id: ID!
+  path: String!
+  name: String
+  description: String
+  filename: String!
+  mimetype: String!
+  size: Int!
+}
+
+"""A connection to a list of items."""
+type FileConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [FileEdge]!
+  aggregate: AggregateFile!
+}
+
+input FileCreateInput {
+  path: String!
+  name: String
+  description: String
+  filename: String!
+  mimetype: String!
+  size: Int!
+}
+
+input FileCreateManyInput {
+  create: [FileCreateInput!]
+  connect: [FileWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type FileEdge {
+  """The item at the end of the edge."""
+  node: File!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum FileOrderByInput {
+  id_ASC
+  id_DESC
+  path_ASC
+  path_DESC
+  name_ASC
+  name_DESC
+  description_ASC
+  description_DESC
+  filename_ASC
+  filename_DESC
+  mimetype_ASC
+  mimetype_DESC
+  size_ASC
+  size_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type FilePreviousValues {
+  id: ID!
+  path: String!
+  name: String
+  description: String
+  filename: String!
+  mimetype: String!
+  size: Int!
+}
+
+input FileScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [FileScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [FileScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [FileScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  path: String
+
+  """All values that are not equal to given value."""
+  path_not: String
+
+  """All values that are contained in given list."""
+  path_in: [String!]
+
+  """All values that are not contained in given list."""
+  path_not_in: [String!]
+
+  """All values less than the given value."""
+  path_lt: String
+
+  """All values less than or equal the given value."""
+  path_lte: String
+
+  """All values greater than the given value."""
+  path_gt: String
+
+  """All values greater than or equal the given value."""
+  path_gte: String
+
+  """All values containing the given string."""
+  path_contains: String
+
+  """All values not containing the given string."""
+  path_not_contains: String
+
+  """All values starting with the given string."""
+  path_starts_with: String
+
+  """All values not starting with the given string."""
+  path_not_starts_with: String
+
+  """All values ending with the given string."""
+  path_ends_with: String
+
+  """All values not ending with the given string."""
+  path_not_ends_with: String
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  filename: String
+
+  """All values that are not equal to given value."""
+  filename_not: String
+
+  """All values that are contained in given list."""
+  filename_in: [String!]
+
+  """All values that are not contained in given list."""
+  filename_not_in: [String!]
+
+  """All values less than the given value."""
+  filename_lt: String
+
+  """All values less than or equal the given value."""
+  filename_lte: String
+
+  """All values greater than the given value."""
+  filename_gt: String
+
+  """All values greater than or equal the given value."""
+  filename_gte: String
+
+  """All values containing the given string."""
+  filename_contains: String
+
+  """All values not containing the given string."""
+  filename_not_contains: String
+
+  """All values starting with the given string."""
+  filename_starts_with: String
+
+  """All values not starting with the given string."""
+  filename_not_starts_with: String
+
+  """All values ending with the given string."""
+  filename_ends_with: String
+
+  """All values not ending with the given string."""
+  filename_not_ends_with: String
+  mimetype: String
+
+  """All values that are not equal to given value."""
+  mimetype_not: String
+
+  """All values that are contained in given list."""
+  mimetype_in: [String!]
+
+  """All values that are not contained in given list."""
+  mimetype_not_in: [String!]
+
+  """All values less than the given value."""
+  mimetype_lt: String
+
+  """All values less than or equal the given value."""
+  mimetype_lte: String
+
+  """All values greater than the given value."""
+  mimetype_gt: String
+
+  """All values greater than or equal the given value."""
+  mimetype_gte: String
+
+  """All values containing the given string."""
+  mimetype_contains: String
+
+  """All values not containing the given string."""
+  mimetype_not_contains: String
+
+  """All values starting with the given string."""
+  mimetype_starts_with: String
+
+  """All values not starting with the given string."""
+  mimetype_not_starts_with: String
+
+  """All values ending with the given string."""
+  mimetype_ends_with: String
+
+  """All values not ending with the given string."""
+  mimetype_not_ends_with: String
+  size: Int
+
+  """All values that are not equal to given value."""
+  size_not: Int
+
+  """All values that are contained in given list."""
+  size_in: [Int!]
+
+  """All values that are not contained in given list."""
+  size_not_in: [Int!]
+
+  """All values less than the given value."""
+  size_lt: Int
+
+  """All values less than or equal the given value."""
+  size_lte: Int
+
+  """All values greater than the given value."""
+  size_gt: Int
+
+  """All values greater than or equal the given value."""
+  size_gte: Int
+}
+
+type FileSubscriptionPayload {
+  mutation: MutationType!
+  node: File
+  updatedFields: [String!]
+  previousValues: FilePreviousValues
+}
+
+input FileSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [FileSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [FileSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [FileSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: FileWhereInput
+}
+
+input FileUpdateDataInput {
+  path: String
+  name: String
+  description: String
+  filename: String
+  mimetype: String
+  size: Int
+}
+
+input FileUpdateInput {
+  path: String
+  name: String
+  description: String
+  filename: String
+  mimetype: String
+  size: Int
+}
+
+input FileUpdateManyDataInput {
+  path: String
+  name: String
+  description: String
+  filename: String
+  mimetype: String
+  size: Int
+}
+
+input FileUpdateManyInput {
+  create: [FileCreateInput!]
+  connect: [FileWhereUniqueInput!]
+  set: [FileWhereUniqueInput!]
+  disconnect: [FileWhereUniqueInput!]
+  delete: [FileWhereUniqueInput!]
+  update: [FileUpdateWithWhereUniqueNestedInput!]
+  updateMany: [FileUpdateManyWithWhereNestedInput!]
+  deleteMany: [FileScalarWhereInput!]
+  upsert: [FileUpsertWithWhereUniqueNestedInput!]
+}
+
+input FileUpdateManyMutationInput {
+  path: String
+  name: String
+  description: String
+  filename: String
+  mimetype: String
+  size: Int
+}
+
+input FileUpdateManyWithWhereNestedInput {
+  where: FileScalarWhereInput!
+  data: FileUpdateManyDataInput!
+}
+
+input FileUpdateWithWhereUniqueNestedInput {
+  where: FileWhereUniqueInput!
+  data: FileUpdateDataInput!
+}
+
+input FileUpsertWithWhereUniqueNestedInput {
+  where: FileWhereUniqueInput!
+  update: FileUpdateDataInput!
+  create: FileCreateInput!
+}
+
+input FileWhereInput {
+  """Logical AND on all given filters."""
+  AND: [FileWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [FileWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [FileWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  path: String
+
+  """All values that are not equal to given value."""
+  path_not: String
+
+  """All values that are contained in given list."""
+  path_in: [String!]
+
+  """All values that are not contained in given list."""
+  path_not_in: [String!]
+
+  """All values less than the given value."""
+  path_lt: String
+
+  """All values less than or equal the given value."""
+  path_lte: String
+
+  """All values greater than the given value."""
+  path_gt: String
+
+  """All values greater than or equal the given value."""
+  path_gte: String
+
+  """All values containing the given string."""
+  path_contains: String
+
+  """All values not containing the given string."""
+  path_not_contains: String
+
+  """All values starting with the given string."""
+  path_starts_with: String
+
+  """All values not starting with the given string."""
+  path_not_starts_with: String
+
+  """All values ending with the given string."""
+  path_ends_with: String
+
+  """All values not ending with the given string."""
+  path_not_ends_with: String
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  filename: String
+
+  """All values that are not equal to given value."""
+  filename_not: String
+
+  """All values that are contained in given list."""
+  filename_in: [String!]
+
+  """All values that are not contained in given list."""
+  filename_not_in: [String!]
+
+  """All values less than the given value."""
+  filename_lt: String
+
+  """All values less than or equal the given value."""
+  filename_lte: String
+
+  """All values greater than the given value."""
+  filename_gt: String
+
+  """All values greater than or equal the given value."""
+  filename_gte: String
+
+  """All values containing the given string."""
+  filename_contains: String
+
+  """All values not containing the given string."""
+  filename_not_contains: String
+
+  """All values starting with the given string."""
+  filename_starts_with: String
+
+  """All values not starting with the given string."""
+  filename_not_starts_with: String
+
+  """All values ending with the given string."""
+  filename_ends_with: String
+
+  """All values not ending with the given string."""
+  filename_not_ends_with: String
+  mimetype: String
+
+  """All values that are not equal to given value."""
+  mimetype_not: String
+
+  """All values that are contained in given list."""
+  mimetype_in: [String!]
+
+  """All values that are not contained in given list."""
+  mimetype_not_in: [String!]
+
+  """All values less than the given value."""
+  mimetype_lt: String
+
+  """All values less than or equal the given value."""
+  mimetype_lte: String
+
+  """All values greater than the given value."""
+  mimetype_gt: String
+
+  """All values greater than or equal the given value."""
+  mimetype_gte: String
+
+  """All values containing the given string."""
+  mimetype_contains: String
+
+  """All values not containing the given string."""
+  mimetype_not_contains: String
+
+  """All values starting with the given string."""
+  mimetype_starts_with: String
+
+  """All values not starting with the given string."""
+  mimetype_not_starts_with: String
+
+  """All values ending with the given string."""
+  mimetype_ends_with: String
+
+  """All values not ending with the given string."""
+  mimetype_not_ends_with: String
+  size: Int
+
+  """All values that are not equal to given value."""
+  size_not: Int
+
+  """All values that are contained in given list."""
+  size_in: [Int!]
+
+  """All values that are not contained in given list."""
+  size_not_in: [Int!]
+
+  """All values less than the given value."""
+  size_lt: Int
+
+  """All values less than or equal the given value."""
+  size_lte: Int
+
+  """All values greater than the given value."""
+  size_gt: Int
+
+  """All values greater than or equal the given value."""
+  size_gte: Int
+}
+
+input FileWhereUniqueInput {
+  id: ID
+}
+
+type Instrument implements Node {
+  id: ID!
+  name: String!
+  description: String
+  documents(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File!]
+  interfaces: [String!]!
+  commands(where: InstrumentCommandWhereInput, orderBy: InstrumentCommandOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentCommand!]
+  parameters(where: InstrumentParameterWhereInput, orderBy: InstrumentParameterOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentParameter!]
+  subsystems(where: InstrumentSubsystemWhereInput, orderBy: InstrumentSubsystemOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentSubsystem!]
+}
+
+type InstrumentCommand implements Node {
+  id: ID!
+  tag: String!
+  name: String
+  description: String!
+  instrument: Instrument!
+  readString: String
+  writeString: String
+  parameters(where: InstrumentParameterWhereInput, orderBy: InstrumentParameterOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentParameter!]
+}
+
+"""A connection to a list of items."""
+type InstrumentCommandConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [InstrumentCommandEdge]!
+  aggregate: AggregateInstrumentCommand!
+}
+
+input InstrumentCommandCreateInput {
+  tag: String!
+  name: String
+  description: String!
+  readString: String
+  writeString: String
+  instrument: InstrumentCreateOneWithoutCommandsInput!
+  parameters: InstrumentParameterCreateManyInput
+}
+
+input InstrumentCommandCreateManyInput {
+  create: [InstrumentCommandCreateInput!]
+  connect: [InstrumentCommandWhereUniqueInput!]
+}
+
+input InstrumentCommandCreateManyWithoutInstrumentInput {
+  create: [InstrumentCommandCreateWithoutInstrumentInput!]
+  connect: [InstrumentCommandWhereUniqueInput!]
+}
+
+input InstrumentCommandCreateWithoutInstrumentInput {
+  tag: String!
+  name: String
+  description: String!
+  readString: String
+  writeString: String
+  parameters: InstrumentParameterCreateManyInput
+}
+
+"""An edge in a connection."""
+type InstrumentCommandEdge {
+  """The item at the end of the edge."""
+  node: InstrumentCommand!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum InstrumentCommandOrderByInput {
+  id_ASC
+  id_DESC
+  tag_ASC
+  tag_DESC
+  name_ASC
+  name_DESC
+  description_ASC
+  description_DESC
+  readString_ASC
+  readString_DESC
+  writeString_ASC
+  writeString_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type InstrumentCommandPreviousValues {
+  id: ID!
+  tag: String!
+  name: String
+  description: String!
+  readString: String
+  writeString: String
+}
+
+input InstrumentCommandScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentCommandScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentCommandScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentCommandScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  tag: String
+
+  """All values that are not equal to given value."""
+  tag_not: String
+
+  """All values that are contained in given list."""
+  tag_in: [String!]
+
+  """All values that are not contained in given list."""
+  tag_not_in: [String!]
+
+  """All values less than the given value."""
+  tag_lt: String
+
+  """All values less than or equal the given value."""
+  tag_lte: String
+
+  """All values greater than the given value."""
+  tag_gt: String
+
+  """All values greater than or equal the given value."""
+  tag_gte: String
+
+  """All values containing the given string."""
+  tag_contains: String
+
+  """All values not containing the given string."""
+  tag_not_contains: String
+
+  """All values starting with the given string."""
+  tag_starts_with: String
+
+  """All values not starting with the given string."""
+  tag_not_starts_with: String
+
+  """All values ending with the given string."""
+  tag_ends_with: String
+
+  """All values not ending with the given string."""
+  tag_not_ends_with: String
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  readString: String
+
+  """All values that are not equal to given value."""
+  readString_not: String
+
+  """All values that are contained in given list."""
+  readString_in: [String!]
+
+  """All values that are not contained in given list."""
+  readString_not_in: [String!]
+
+  """All values less than the given value."""
+  readString_lt: String
+
+  """All values less than or equal the given value."""
+  readString_lte: String
+
+  """All values greater than the given value."""
+  readString_gt: String
+
+  """All values greater than or equal the given value."""
+  readString_gte: String
+
+  """All values containing the given string."""
+  readString_contains: String
+
+  """All values not containing the given string."""
+  readString_not_contains: String
+
+  """All values starting with the given string."""
+  readString_starts_with: String
+
+  """All values not starting with the given string."""
+  readString_not_starts_with: String
+
+  """All values ending with the given string."""
+  readString_ends_with: String
+
+  """All values not ending with the given string."""
+  readString_not_ends_with: String
+  writeString: String
+
+  """All values that are not equal to given value."""
+  writeString_not: String
+
+  """All values that are contained in given list."""
+  writeString_in: [String!]
+
+  """All values that are not contained in given list."""
+  writeString_not_in: [String!]
+
+  """All values less than the given value."""
+  writeString_lt: String
+
+  """All values less than or equal the given value."""
+  writeString_lte: String
+
+  """All values greater than the given value."""
+  writeString_gt: String
+
+  """All values greater than or equal the given value."""
+  writeString_gte: String
+
+  """All values containing the given string."""
+  writeString_contains: String
+
+  """All values not containing the given string."""
+  writeString_not_contains: String
+
+  """All values starting with the given string."""
+  writeString_starts_with: String
+
+  """All values not starting with the given string."""
+  writeString_not_starts_with: String
+
+  """All values ending with the given string."""
+  writeString_ends_with: String
+
+  """All values not ending with the given string."""
+  writeString_not_ends_with: String
+}
+
+type InstrumentCommandSubscriptionPayload {
+  mutation: MutationType!
+  node: InstrumentCommand
+  updatedFields: [String!]
+  previousValues: InstrumentCommandPreviousValues
+}
+
+input InstrumentCommandSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentCommandSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentCommandSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentCommandSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: InstrumentCommandWhereInput
+}
+
+input InstrumentCommandUpdateDataInput {
+  tag: String
+  name: String
+  description: String
+  readString: String
+  writeString: String
+  instrument: InstrumentUpdateOneRequiredWithoutCommandsInput
+  parameters: InstrumentParameterUpdateManyInput
+}
+
+input InstrumentCommandUpdateInput {
+  tag: String
+  name: String
+  description: String
+  readString: String
+  writeString: String
+  instrument: InstrumentUpdateOneRequiredWithoutCommandsInput
+  parameters: InstrumentParameterUpdateManyInput
+}
+
+input InstrumentCommandUpdateManyDataInput {
+  tag: String
+  name: String
+  description: String
+  readString: String
+  writeString: String
+}
+
+input InstrumentCommandUpdateManyInput {
+  create: [InstrumentCommandCreateInput!]
+  connect: [InstrumentCommandWhereUniqueInput!]
+  set: [InstrumentCommandWhereUniqueInput!]
+  disconnect: [InstrumentCommandWhereUniqueInput!]
+  delete: [InstrumentCommandWhereUniqueInput!]
+  update: [InstrumentCommandUpdateWithWhereUniqueNestedInput!]
+  updateMany: [InstrumentCommandUpdateManyWithWhereNestedInput!]
+  deleteMany: [InstrumentCommandScalarWhereInput!]
+  upsert: [InstrumentCommandUpsertWithWhereUniqueNestedInput!]
+}
+
+input InstrumentCommandUpdateManyMutationInput {
+  tag: String
+  name: String
+  description: String
+  readString: String
+  writeString: String
+}
+
+input InstrumentCommandUpdateManyWithoutInstrumentInput {
+  create: [InstrumentCommandCreateWithoutInstrumentInput!]
+  connect: [InstrumentCommandWhereUniqueInput!]
+  set: [InstrumentCommandWhereUniqueInput!]
+  disconnect: [InstrumentCommandWhereUniqueInput!]
+  delete: [InstrumentCommandWhereUniqueInput!]
+  update: [InstrumentCommandUpdateWithWhereUniqueWithoutInstrumentInput!]
+  updateMany: [InstrumentCommandUpdateManyWithWhereNestedInput!]
+  deleteMany: [InstrumentCommandScalarWhereInput!]
+  upsert: [InstrumentCommandUpsertWithWhereUniqueWithoutInstrumentInput!]
+}
+
+input InstrumentCommandUpdateManyWithWhereNestedInput {
+  where: InstrumentCommandScalarWhereInput!
+  data: InstrumentCommandUpdateManyDataInput!
+}
+
+input InstrumentCommandUpdateWithoutInstrumentDataInput {
+  tag: String
+  name: String
+  description: String
+  readString: String
+  writeString: String
+  parameters: InstrumentParameterUpdateManyInput
+}
+
+input InstrumentCommandUpdateWithWhereUniqueNestedInput {
+  where: InstrumentCommandWhereUniqueInput!
+  data: InstrumentCommandUpdateDataInput!
+}
+
+input InstrumentCommandUpdateWithWhereUniqueWithoutInstrumentInput {
+  where: InstrumentCommandWhereUniqueInput!
+  data: InstrumentCommandUpdateWithoutInstrumentDataInput!
+}
+
+input InstrumentCommandUpsertWithWhereUniqueNestedInput {
+  where: InstrumentCommandWhereUniqueInput!
+  update: InstrumentCommandUpdateDataInput!
+  create: InstrumentCommandCreateInput!
+}
+
+input InstrumentCommandUpsertWithWhereUniqueWithoutInstrumentInput {
+  where: InstrumentCommandWhereUniqueInput!
+  update: InstrumentCommandUpdateWithoutInstrumentDataInput!
+  create: InstrumentCommandCreateWithoutInstrumentInput!
+}
+
+input InstrumentCommandWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentCommandWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentCommandWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentCommandWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  tag: String
+
+  """All values that are not equal to given value."""
+  tag_not: String
+
+  """All values that are contained in given list."""
+  tag_in: [String!]
+
+  """All values that are not contained in given list."""
+  tag_not_in: [String!]
+
+  """All values less than the given value."""
+  tag_lt: String
+
+  """All values less than or equal the given value."""
+  tag_lte: String
+
+  """All values greater than the given value."""
+  tag_gt: String
+
+  """All values greater than or equal the given value."""
+  tag_gte: String
+
+  """All values containing the given string."""
+  tag_contains: String
+
+  """All values not containing the given string."""
+  tag_not_contains: String
+
+  """All values starting with the given string."""
+  tag_starts_with: String
+
+  """All values not starting with the given string."""
+  tag_not_starts_with: String
+
+  """All values ending with the given string."""
+  tag_ends_with: String
+
+  """All values not ending with the given string."""
+  tag_not_ends_with: String
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  readString: String
+
+  """All values that are not equal to given value."""
+  readString_not: String
+
+  """All values that are contained in given list."""
+  readString_in: [String!]
+
+  """All values that are not contained in given list."""
+  readString_not_in: [String!]
+
+  """All values less than the given value."""
+  readString_lt: String
+
+  """All values less than or equal the given value."""
+  readString_lte: String
+
+  """All values greater than the given value."""
+  readString_gt: String
+
+  """All values greater than or equal the given value."""
+  readString_gte: String
+
+  """All values containing the given string."""
+  readString_contains: String
+
+  """All values not containing the given string."""
+  readString_not_contains: String
+
+  """All values starting with the given string."""
+  readString_starts_with: String
+
+  """All values not starting with the given string."""
+  readString_not_starts_with: String
+
+  """All values ending with the given string."""
+  readString_ends_with: String
+
+  """All values not ending with the given string."""
+  readString_not_ends_with: String
+  writeString: String
+
+  """All values that are not equal to given value."""
+  writeString_not: String
+
+  """All values that are contained in given list."""
+  writeString_in: [String!]
+
+  """All values that are not contained in given list."""
+  writeString_not_in: [String!]
+
+  """All values less than the given value."""
+  writeString_lt: String
+
+  """All values less than or equal the given value."""
+  writeString_lte: String
+
+  """All values greater than the given value."""
+  writeString_gt: String
+
+  """All values greater than or equal the given value."""
+  writeString_gte: String
+
+  """All values containing the given string."""
+  writeString_contains: String
+
+  """All values not containing the given string."""
+  writeString_not_contains: String
+
+  """All values starting with the given string."""
+  writeString_starts_with: String
+
+  """All values not starting with the given string."""
+  writeString_not_starts_with: String
+
+  """All values ending with the given string."""
+  writeString_ends_with: String
+
+  """All values not ending with the given string."""
+  writeString_not_ends_with: String
+  instrument: InstrumentWhereInput
+  parameters_every: InstrumentParameterWhereInput
+  parameters_some: InstrumentParameterWhereInput
+  parameters_none: InstrumentParameterWhereInput
+}
+
+input InstrumentCommandWhereUniqueInput {
+  id: ID
+}
+
+"""A connection to a list of items."""
+type InstrumentConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [InstrumentEdge]!
+  aggregate: AggregateInstrument!
+}
+
+input InstrumentCreateInput {
+  name: String!
+  description: String
+  interfaces: InstrumentCreateinterfacesInput
+  documents: FileCreateManyInput
+  commands: InstrumentCommandCreateManyWithoutInstrumentInput
+  parameters: InstrumentParameterCreateManyInput
+  subsystems: InstrumentSubsystemCreateManyInput
+}
+
+input InstrumentCreateinterfacesInput {
+  set: [String!]
+}
+
+input InstrumentCreateOneInput {
+  create: InstrumentCreateInput
+  connect: InstrumentWhereUniqueInput
+}
+
+input InstrumentCreateOneWithoutCommandsInput {
+  create: InstrumentCreateWithoutCommandsInput
+  connect: InstrumentWhereUniqueInput
+}
+
+input InstrumentCreateWithoutCommandsInput {
+  name: String!
+  description: String
+  interfaces: InstrumentCreateinterfacesInput
+  documents: FileCreateManyInput
+  parameters: InstrumentParameterCreateManyInput
+  subsystems: InstrumentSubsystemCreateManyInput
+}
+
+"""An edge in a connection."""
+type InstrumentEdge {
+  """The item at the end of the edge."""
+  node: Instrument!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+type InstrumentInstance implements Node {
+  id: ID!
+  instrument: Instrument!
+  identifier: String!
+  interface: String!
+  label: String
+  location: String
+}
+
+"""A connection to a list of items."""
+type InstrumentInstanceConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [InstrumentInstanceEdge]!
+  aggregate: AggregateInstrumentInstance!
+}
+
+input InstrumentInstanceCreateInput {
+  identifier: String!
+  interface: String!
+  label: String
+  location: String
+  instrument: InstrumentCreateOneInput!
+}
+
+input InstrumentInstanceCreateManyInput {
+  create: [InstrumentInstanceCreateInput!]
+  connect: [InstrumentInstanceWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type InstrumentInstanceEdge {
+  """The item at the end of the edge."""
+  node: InstrumentInstance!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum InstrumentInstanceOrderByInput {
+  id_ASC
+  id_DESC
+  identifier_ASC
+  identifier_DESC
+  interface_ASC
+  interface_DESC
+  label_ASC
+  label_DESC
+  location_ASC
+  location_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type InstrumentInstancePreviousValues {
+  id: ID!
+  identifier: String!
+  interface: String!
+  label: String
+  location: String
+}
+
+input InstrumentInstanceScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentInstanceScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentInstanceScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentInstanceScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  identifier: String
+
+  """All values that are not equal to given value."""
+  identifier_not: String
+
+  """All values that are contained in given list."""
+  identifier_in: [String!]
+
+  """All values that are not contained in given list."""
+  identifier_not_in: [String!]
+
+  """All values less than the given value."""
+  identifier_lt: String
+
+  """All values less than or equal the given value."""
+  identifier_lte: String
+
+  """All values greater than the given value."""
+  identifier_gt: String
+
+  """All values greater than or equal the given value."""
+  identifier_gte: String
+
+  """All values containing the given string."""
+  identifier_contains: String
+
+  """All values not containing the given string."""
+  identifier_not_contains: String
+
+  """All values starting with the given string."""
+  identifier_starts_with: String
+
+  """All values not starting with the given string."""
+  identifier_not_starts_with: String
+
+  """All values ending with the given string."""
+  identifier_ends_with: String
+
+  """All values not ending with the given string."""
+  identifier_not_ends_with: String
+  interface: String
+
+  """All values that are not equal to given value."""
+  interface_not: String
+
+  """All values that are contained in given list."""
+  interface_in: [String!]
+
+  """All values that are not contained in given list."""
+  interface_not_in: [String!]
+
+  """All values less than the given value."""
+  interface_lt: String
+
+  """All values less than or equal the given value."""
+  interface_lte: String
+
+  """All values greater than the given value."""
+  interface_gt: String
+
+  """All values greater than or equal the given value."""
+  interface_gte: String
+
+  """All values containing the given string."""
+  interface_contains: String
+
+  """All values not containing the given string."""
+  interface_not_contains: String
+
+  """All values starting with the given string."""
+  interface_starts_with: String
+
+  """All values not starting with the given string."""
+  interface_not_starts_with: String
+
+  """All values ending with the given string."""
+  interface_ends_with: String
+
+  """All values not ending with the given string."""
+  interface_not_ends_with: String
+  label: String
+
+  """All values that are not equal to given value."""
+  label_not: String
+
+  """All values that are contained in given list."""
+  label_in: [String!]
+
+  """All values that are not contained in given list."""
+  label_not_in: [String!]
+
+  """All values less than the given value."""
+  label_lt: String
+
+  """All values less than or equal the given value."""
+  label_lte: String
+
+  """All values greater than the given value."""
+  label_gt: String
+
+  """All values greater than or equal the given value."""
+  label_gte: String
+
+  """All values containing the given string."""
+  label_contains: String
+
+  """All values not containing the given string."""
+  label_not_contains: String
+
+  """All values starting with the given string."""
+  label_starts_with: String
+
+  """All values not starting with the given string."""
+  label_not_starts_with: String
+
+  """All values ending with the given string."""
+  label_ends_with: String
+
+  """All values not ending with the given string."""
+  label_not_ends_with: String
+  location: String
+
+  """All values that are not equal to given value."""
+  location_not: String
+
+  """All values that are contained in given list."""
+  location_in: [String!]
+
+  """All values that are not contained in given list."""
+  location_not_in: [String!]
+
+  """All values less than the given value."""
+  location_lt: String
+
+  """All values less than or equal the given value."""
+  location_lte: String
+
+  """All values greater than the given value."""
+  location_gt: String
+
+  """All values greater than or equal the given value."""
+  location_gte: String
+
+  """All values containing the given string."""
+  location_contains: String
+
+  """All values not containing the given string."""
+  location_not_contains: String
+
+  """All values starting with the given string."""
+  location_starts_with: String
+
+  """All values not starting with the given string."""
+  location_not_starts_with: String
+
+  """All values ending with the given string."""
+  location_ends_with: String
+
+  """All values not ending with the given string."""
+  location_not_ends_with: String
+}
+
+type InstrumentInstanceSubscriptionPayload {
+  mutation: MutationType!
+  node: InstrumentInstance
+  updatedFields: [String!]
+  previousValues: InstrumentInstancePreviousValues
+}
+
+input InstrumentInstanceSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentInstanceSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentInstanceSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentInstanceSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: InstrumentInstanceWhereInput
+}
+
+input InstrumentInstanceUpdateDataInput {
+  identifier: String
+  interface: String
+  label: String
+  location: String
+  instrument: InstrumentUpdateOneRequiredInput
+}
+
+input InstrumentInstanceUpdateInput {
+  identifier: String
+  interface: String
+  label: String
+  location: String
+  instrument: InstrumentUpdateOneRequiredInput
+}
+
+input InstrumentInstanceUpdateManyDataInput {
+  identifier: String
+  interface: String
+  label: String
+  location: String
+}
+
+input InstrumentInstanceUpdateManyInput {
+  create: [InstrumentInstanceCreateInput!]
+  connect: [InstrumentInstanceWhereUniqueInput!]
+  set: [InstrumentInstanceWhereUniqueInput!]
+  disconnect: [InstrumentInstanceWhereUniqueInput!]
+  delete: [InstrumentInstanceWhereUniqueInput!]
+  update: [InstrumentInstanceUpdateWithWhereUniqueNestedInput!]
+  updateMany: [InstrumentInstanceUpdateManyWithWhereNestedInput!]
+  deleteMany: [InstrumentInstanceScalarWhereInput!]
+  upsert: [InstrumentInstanceUpsertWithWhereUniqueNestedInput!]
+}
+
+input InstrumentInstanceUpdateManyMutationInput {
+  identifier: String
+  interface: String
+  label: String
+  location: String
+}
+
+input InstrumentInstanceUpdateManyWithWhereNestedInput {
+  where: InstrumentInstanceScalarWhereInput!
+  data: InstrumentInstanceUpdateManyDataInput!
+}
+
+input InstrumentInstanceUpdateWithWhereUniqueNestedInput {
+  where: InstrumentInstanceWhereUniqueInput!
+  data: InstrumentInstanceUpdateDataInput!
+}
+
+input InstrumentInstanceUpsertWithWhereUniqueNestedInput {
+  where: InstrumentInstanceWhereUniqueInput!
+  update: InstrumentInstanceUpdateDataInput!
+  create: InstrumentInstanceCreateInput!
+}
+
+input InstrumentInstanceWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentInstanceWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentInstanceWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentInstanceWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  identifier: String
+
+  """All values that are not equal to given value."""
+  identifier_not: String
+
+  """All values that are contained in given list."""
+  identifier_in: [String!]
+
+  """All values that are not contained in given list."""
+  identifier_not_in: [String!]
+
+  """All values less than the given value."""
+  identifier_lt: String
+
+  """All values less than or equal the given value."""
+  identifier_lte: String
+
+  """All values greater than the given value."""
+  identifier_gt: String
+
+  """All values greater than or equal the given value."""
+  identifier_gte: String
+
+  """All values containing the given string."""
+  identifier_contains: String
+
+  """All values not containing the given string."""
+  identifier_not_contains: String
+
+  """All values starting with the given string."""
+  identifier_starts_with: String
+
+  """All values not starting with the given string."""
+  identifier_not_starts_with: String
+
+  """All values ending with the given string."""
+  identifier_ends_with: String
+
+  """All values not ending with the given string."""
+  identifier_not_ends_with: String
+  interface: String
+
+  """All values that are not equal to given value."""
+  interface_not: String
+
+  """All values that are contained in given list."""
+  interface_in: [String!]
+
+  """All values that are not contained in given list."""
+  interface_not_in: [String!]
+
+  """All values less than the given value."""
+  interface_lt: String
+
+  """All values less than or equal the given value."""
+  interface_lte: String
+
+  """All values greater than the given value."""
+  interface_gt: String
+
+  """All values greater than or equal the given value."""
+  interface_gte: String
+
+  """All values containing the given string."""
+  interface_contains: String
+
+  """All values not containing the given string."""
+  interface_not_contains: String
+
+  """All values starting with the given string."""
+  interface_starts_with: String
+
+  """All values not starting with the given string."""
+  interface_not_starts_with: String
+
+  """All values ending with the given string."""
+  interface_ends_with: String
+
+  """All values not ending with the given string."""
+  interface_not_ends_with: String
+  label: String
+
+  """All values that are not equal to given value."""
+  label_not: String
+
+  """All values that are contained in given list."""
+  label_in: [String!]
+
+  """All values that are not contained in given list."""
+  label_not_in: [String!]
+
+  """All values less than the given value."""
+  label_lt: String
+
+  """All values less than or equal the given value."""
+  label_lte: String
+
+  """All values greater than the given value."""
+  label_gt: String
+
+  """All values greater than or equal the given value."""
+  label_gte: String
+
+  """All values containing the given string."""
+  label_contains: String
+
+  """All values not containing the given string."""
+  label_not_contains: String
+
+  """All values starting with the given string."""
+  label_starts_with: String
+
+  """All values not starting with the given string."""
+  label_not_starts_with: String
+
+  """All values ending with the given string."""
+  label_ends_with: String
+
+  """All values not ending with the given string."""
+  label_not_ends_with: String
+  location: String
+
+  """All values that are not equal to given value."""
+  location_not: String
+
+  """All values that are contained in given list."""
+  location_in: [String!]
+
+  """All values that are not contained in given list."""
+  location_not_in: [String!]
+
+  """All values less than the given value."""
+  location_lt: String
+
+  """All values less than or equal the given value."""
+  location_lte: String
+
+  """All values greater than the given value."""
+  location_gt: String
+
+  """All values greater than or equal the given value."""
+  location_gte: String
+
+  """All values containing the given string."""
+  location_contains: String
+
+  """All values not containing the given string."""
+  location_not_contains: String
+
+  """All values starting with the given string."""
+  location_starts_with: String
+
+  """All values not starting with the given string."""
+  location_not_starts_with: String
+
+  """All values ending with the given string."""
+  location_ends_with: String
+
+  """All values not ending with the given string."""
+  location_not_ends_with: String
+  instrument: InstrumentWhereInput
+}
+
+input InstrumentInstanceWhereUniqueInput {
+  id: ID
+}
+
+enum InstrumentOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  description_ASC
+  description_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type InstrumentParameter implements Node {
+  id: ID!
+  tag: String!
+  name: String
+  description: String
+  type: String!
+  values: String
+}
+
+"""A connection to a list of items."""
+type InstrumentParameterConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [InstrumentParameterEdge]!
+  aggregate: AggregateInstrumentParameter!
+}
+
+input InstrumentParameterCreateInput {
+  tag: String!
+  name: String
+  description: String
+  type: String!
+  values: String
+}
+
+input InstrumentParameterCreateManyInput {
+  create: [InstrumentParameterCreateInput!]
+  connect: [InstrumentParameterWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type InstrumentParameterEdge {
+  """The item at the end of the edge."""
+  node: InstrumentParameter!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum InstrumentParameterOrderByInput {
+  id_ASC
+  id_DESC
+  tag_ASC
+  tag_DESC
+  name_ASC
+  name_DESC
+  description_ASC
+  description_DESC
+  type_ASC
+  type_DESC
+  values_ASC
+  values_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type InstrumentParameterPreviousValues {
+  id: ID!
+  tag: String!
+  name: String
+  description: String
+  type: String!
+  values: String
+}
+
+input InstrumentParameterScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentParameterScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentParameterScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentParameterScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  tag: String
+
+  """All values that are not equal to given value."""
+  tag_not: String
+
+  """All values that are contained in given list."""
+  tag_in: [String!]
+
+  """All values that are not contained in given list."""
+  tag_not_in: [String!]
+
+  """All values less than the given value."""
+  tag_lt: String
+
+  """All values less than or equal the given value."""
+  tag_lte: String
+
+  """All values greater than the given value."""
+  tag_gt: String
+
+  """All values greater than or equal the given value."""
+  tag_gte: String
+
+  """All values containing the given string."""
+  tag_contains: String
+
+  """All values not containing the given string."""
+  tag_not_contains: String
+
+  """All values starting with the given string."""
+  tag_starts_with: String
+
+  """All values not starting with the given string."""
+  tag_not_starts_with: String
+
+  """All values ending with the given string."""
+  tag_ends_with: String
+
+  """All values not ending with the given string."""
+  tag_not_ends_with: String
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  type: String
+
+  """All values that are not equal to given value."""
+  type_not: String
+
+  """All values that are contained in given list."""
+  type_in: [String!]
+
+  """All values that are not contained in given list."""
+  type_not_in: [String!]
+
+  """All values less than the given value."""
+  type_lt: String
+
+  """All values less than or equal the given value."""
+  type_lte: String
+
+  """All values greater than the given value."""
+  type_gt: String
+
+  """All values greater than or equal the given value."""
+  type_gte: String
+
+  """All values containing the given string."""
+  type_contains: String
+
+  """All values not containing the given string."""
+  type_not_contains: String
+
+  """All values starting with the given string."""
+  type_starts_with: String
+
+  """All values not starting with the given string."""
+  type_not_starts_with: String
+
+  """All values ending with the given string."""
+  type_ends_with: String
+
+  """All values not ending with the given string."""
+  type_not_ends_with: String
+  values: String
+
+  """All values that are not equal to given value."""
+  values_not: String
+
+  """All values that are contained in given list."""
+  values_in: [String!]
+
+  """All values that are not contained in given list."""
+  values_not_in: [String!]
+
+  """All values less than the given value."""
+  values_lt: String
+
+  """All values less than or equal the given value."""
+  values_lte: String
+
+  """All values greater than the given value."""
+  values_gt: String
+
+  """All values greater than or equal the given value."""
+  values_gte: String
+
+  """All values containing the given string."""
+  values_contains: String
+
+  """All values not containing the given string."""
+  values_not_contains: String
+
+  """All values starting with the given string."""
+  values_starts_with: String
+
+  """All values not starting with the given string."""
+  values_not_starts_with: String
+
+  """All values ending with the given string."""
+  values_ends_with: String
+
+  """All values not ending with the given string."""
+  values_not_ends_with: String
+}
+
+type InstrumentParameterSubscriptionPayload {
+  mutation: MutationType!
+  node: InstrumentParameter
+  updatedFields: [String!]
+  previousValues: InstrumentParameterPreviousValues
+}
+
+input InstrumentParameterSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentParameterSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentParameterSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentParameterSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: InstrumentParameterWhereInput
+}
+
+input InstrumentParameterUpdateDataInput {
+  tag: String
+  name: String
+  description: String
+  type: String
+  values: String
+}
+
+input InstrumentParameterUpdateInput {
+  tag: String
+  name: String
+  description: String
+  type: String
+  values: String
+}
+
+input InstrumentParameterUpdateManyDataInput {
+  tag: String
+  name: String
+  description: String
+  type: String
+  values: String
+}
+
+input InstrumentParameterUpdateManyInput {
+  create: [InstrumentParameterCreateInput!]
+  connect: [InstrumentParameterWhereUniqueInput!]
+  set: [InstrumentParameterWhereUniqueInput!]
+  disconnect: [InstrumentParameterWhereUniqueInput!]
+  delete: [InstrumentParameterWhereUniqueInput!]
+  update: [InstrumentParameterUpdateWithWhereUniqueNestedInput!]
+  updateMany: [InstrumentParameterUpdateManyWithWhereNestedInput!]
+  deleteMany: [InstrumentParameterScalarWhereInput!]
+  upsert: [InstrumentParameterUpsertWithWhereUniqueNestedInput!]
+}
+
+input InstrumentParameterUpdateManyMutationInput {
+  tag: String
+  name: String
+  description: String
+  type: String
+  values: String
+}
+
+input InstrumentParameterUpdateManyWithWhereNestedInput {
+  where: InstrumentParameterScalarWhereInput!
+  data: InstrumentParameterUpdateManyDataInput!
+}
+
+input InstrumentParameterUpdateWithWhereUniqueNestedInput {
+  where: InstrumentParameterWhereUniqueInput!
+  data: InstrumentParameterUpdateDataInput!
+}
+
+input InstrumentParameterUpsertWithWhereUniqueNestedInput {
+  where: InstrumentParameterWhereUniqueInput!
+  update: InstrumentParameterUpdateDataInput!
+  create: InstrumentParameterCreateInput!
+}
+
+input InstrumentParameterWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentParameterWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentParameterWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentParameterWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  tag: String
+
+  """All values that are not equal to given value."""
+  tag_not: String
+
+  """All values that are contained in given list."""
+  tag_in: [String!]
+
+  """All values that are not contained in given list."""
+  tag_not_in: [String!]
+
+  """All values less than the given value."""
+  tag_lt: String
+
+  """All values less than or equal the given value."""
+  tag_lte: String
+
+  """All values greater than the given value."""
+  tag_gt: String
+
+  """All values greater than or equal the given value."""
+  tag_gte: String
+
+  """All values containing the given string."""
+  tag_contains: String
+
+  """All values not containing the given string."""
+  tag_not_contains: String
+
+  """All values starting with the given string."""
+  tag_starts_with: String
+
+  """All values not starting with the given string."""
+  tag_not_starts_with: String
+
+  """All values ending with the given string."""
+  tag_ends_with: String
+
+  """All values not ending with the given string."""
+  tag_not_ends_with: String
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  type: String
+
+  """All values that are not equal to given value."""
+  type_not: String
+
+  """All values that are contained in given list."""
+  type_in: [String!]
+
+  """All values that are not contained in given list."""
+  type_not_in: [String!]
+
+  """All values less than the given value."""
+  type_lt: String
+
+  """All values less than or equal the given value."""
+  type_lte: String
+
+  """All values greater than the given value."""
+  type_gt: String
+
+  """All values greater than or equal the given value."""
+  type_gte: String
+
+  """All values containing the given string."""
+  type_contains: String
+
+  """All values not containing the given string."""
+  type_not_contains: String
+
+  """All values starting with the given string."""
+  type_starts_with: String
+
+  """All values not starting with the given string."""
+  type_not_starts_with: String
+
+  """All values ending with the given string."""
+  type_ends_with: String
+
+  """All values not ending with the given string."""
+  type_not_ends_with: String
+  values: String
+
+  """All values that are not equal to given value."""
+  values_not: String
+
+  """All values that are contained in given list."""
+  values_in: [String!]
+
+  """All values that are not contained in given list."""
+  values_not_in: [String!]
+
+  """All values less than the given value."""
+  values_lt: String
+
+  """All values less than or equal the given value."""
+  values_lte: String
+
+  """All values greater than the given value."""
+  values_gt: String
+
+  """All values greater than or equal the given value."""
+  values_gte: String
+
+  """All values containing the given string."""
+  values_contains: String
+
+  """All values not containing the given string."""
+  values_not_contains: String
+
+  """All values starting with the given string."""
+  values_starts_with: String
+
+  """All values not starting with the given string."""
+  values_not_starts_with: String
+
+  """All values ending with the given string."""
+  values_ends_with: String
+
+  """All values not ending with the given string."""
+  values_not_ends_with: String
+}
+
+input InstrumentParameterWhereUniqueInput {
+  id: ID
+}
+
+type InstrumentPreviousValues {
+  id: ID!
+  name: String!
+  description: String
+  interfaces: [String!]!
+}
+
+type InstrumentSubscriptionPayload {
+  mutation: MutationType!
+  node: Instrument
+  updatedFields: [String!]
+  previousValues: InstrumentPreviousValues
+}
+
+input InstrumentSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: InstrumentWhereInput
+}
+
+type InstrumentSubsystem implements Node {
+  id: ID!
+  name: String
+  description: String!
+  commands(where: InstrumentCommandWhereInput, orderBy: InstrumentCommandOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentCommand!]
+  parameters(where: InstrumentParameterWhereInput, orderBy: InstrumentParameterOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentParameter!]
+  subsystems(where: InstrumentSubsystemWhereInput, orderBy: InstrumentSubsystemOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentSubsystem!]
+}
+
+"""A connection to a list of items."""
+type InstrumentSubsystemConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [InstrumentSubsystemEdge]!
+  aggregate: AggregateInstrumentSubsystem!
+}
+
+input InstrumentSubsystemCreateInput {
+  name: String
+  description: String!
+  commands: InstrumentCommandCreateManyInput
+  parameters: InstrumentParameterCreateManyInput
+  subsystems: InstrumentSubsystemCreateManyInput
+}
+
+input InstrumentSubsystemCreateManyInput {
+  create: [InstrumentSubsystemCreateInput!]
+  connect: [InstrumentSubsystemWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type InstrumentSubsystemEdge {
+  """The item at the end of the edge."""
+  node: InstrumentSubsystem!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum InstrumentSubsystemOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  description_ASC
+  description_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type InstrumentSubsystemPreviousValues {
+  id: ID!
+  name: String
+  description: String!
+}
+
+input InstrumentSubsystemScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentSubsystemScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentSubsystemScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentSubsystemScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+}
+
+type InstrumentSubsystemSubscriptionPayload {
+  mutation: MutationType!
+  node: InstrumentSubsystem
+  updatedFields: [String!]
+  previousValues: InstrumentSubsystemPreviousValues
+}
+
+input InstrumentSubsystemSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentSubsystemSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentSubsystemSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentSubsystemSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: InstrumentSubsystemWhereInput
+}
+
+input InstrumentSubsystemUpdateDataInput {
+  name: String
+  description: String
+  commands: InstrumentCommandUpdateManyInput
+  parameters: InstrumentParameterUpdateManyInput
+  subsystems: InstrumentSubsystemUpdateManyInput
+}
+
+input InstrumentSubsystemUpdateInput {
+  name: String
+  description: String
+  commands: InstrumentCommandUpdateManyInput
+  parameters: InstrumentParameterUpdateManyInput
+  subsystems: InstrumentSubsystemUpdateManyInput
+}
+
+input InstrumentSubsystemUpdateManyDataInput {
+  name: String
+  description: String
+}
+
+input InstrumentSubsystemUpdateManyInput {
+  create: [InstrumentSubsystemCreateInput!]
+  connect: [InstrumentSubsystemWhereUniqueInput!]
+  set: [InstrumentSubsystemWhereUniqueInput!]
+  disconnect: [InstrumentSubsystemWhereUniqueInput!]
+  delete: [InstrumentSubsystemWhereUniqueInput!]
+  update: [InstrumentSubsystemUpdateWithWhereUniqueNestedInput!]
+  updateMany: [InstrumentSubsystemUpdateManyWithWhereNestedInput!]
+  deleteMany: [InstrumentSubsystemScalarWhereInput!]
+  upsert: [InstrumentSubsystemUpsertWithWhereUniqueNestedInput!]
+}
+
+input InstrumentSubsystemUpdateManyMutationInput {
+  name: String
+  description: String
+}
+
+input InstrumentSubsystemUpdateManyWithWhereNestedInput {
+  where: InstrumentSubsystemScalarWhereInput!
+  data: InstrumentSubsystemUpdateManyDataInput!
+}
+
+input InstrumentSubsystemUpdateWithWhereUniqueNestedInput {
+  where: InstrumentSubsystemWhereUniqueInput!
+  data: InstrumentSubsystemUpdateDataInput!
+}
+
+input InstrumentSubsystemUpsertWithWhereUniqueNestedInput {
+  where: InstrumentSubsystemWhereUniqueInput!
+  update: InstrumentSubsystemUpdateDataInput!
+  create: InstrumentSubsystemCreateInput!
+}
+
+input InstrumentSubsystemWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentSubsystemWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentSubsystemWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentSubsystemWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  commands_every: InstrumentCommandWhereInput
+  commands_some: InstrumentCommandWhereInput
+  commands_none: InstrumentCommandWhereInput
+  parameters_every: InstrumentParameterWhereInput
+  parameters_some: InstrumentParameterWhereInput
+  parameters_none: InstrumentParameterWhereInput
+  subsystems_every: InstrumentSubsystemWhereInput
+  subsystems_some: InstrumentSubsystemWhereInput
+  subsystems_none: InstrumentSubsystemWhereInput
+}
+
+input InstrumentSubsystemWhereUniqueInput {
+  id: ID
+}
+
+input InstrumentUpdateDataInput {
+  name: String
+  description: String
+  interfaces: InstrumentUpdateinterfacesInput
+  documents: FileUpdateManyInput
+  commands: InstrumentCommandUpdateManyWithoutInstrumentInput
+  parameters: InstrumentParameterUpdateManyInput
+  subsystems: InstrumentSubsystemUpdateManyInput
+}
+
+input InstrumentUpdateInput {
+  name: String
+  description: String
+  interfaces: InstrumentUpdateinterfacesInput
+  documents: FileUpdateManyInput
+  commands: InstrumentCommandUpdateManyWithoutInstrumentInput
+  parameters: InstrumentParameterUpdateManyInput
+  subsystems: InstrumentSubsystemUpdateManyInput
+}
+
+input InstrumentUpdateinterfacesInput {
+  set: [String!]
+}
+
+input InstrumentUpdateManyMutationInput {
+  name: String
+  description: String
+  interfaces: InstrumentUpdateinterfacesInput
+}
+
+input InstrumentUpdateOneRequiredInput {
+  create: InstrumentCreateInput
+  connect: InstrumentWhereUniqueInput
+  update: InstrumentUpdateDataInput
+  upsert: InstrumentUpsertNestedInput
+}
+
+input InstrumentUpdateOneRequiredWithoutCommandsInput {
+  create: InstrumentCreateWithoutCommandsInput
+  connect: InstrumentWhereUniqueInput
+  update: InstrumentUpdateWithoutCommandsDataInput
+  upsert: InstrumentUpsertWithoutCommandsInput
+}
+
+input InstrumentUpdateWithoutCommandsDataInput {
+  name: String
+  description: String
+  interfaces: InstrumentUpdateinterfacesInput
+  documents: FileUpdateManyInput
+  parameters: InstrumentParameterUpdateManyInput
+  subsystems: InstrumentSubsystemUpdateManyInput
+}
+
+input InstrumentUpsertNestedInput {
+  update: InstrumentUpdateDataInput!
+  create: InstrumentCreateInput!
+}
+
+input InstrumentUpsertWithoutCommandsInput {
+  update: InstrumentUpdateWithoutCommandsDataInput!
+  create: InstrumentCreateWithoutCommandsInput!
+}
+
+input InstrumentWhereInput {
+  """Logical AND on all given filters."""
+  AND: [InstrumentWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [InstrumentWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [InstrumentWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  documents_every: FileWhereInput
+  documents_some: FileWhereInput
+  documents_none: FileWhereInput
+  commands_every: InstrumentCommandWhereInput
+  commands_some: InstrumentCommandWhereInput
+  commands_none: InstrumentCommandWhereInput
+  parameters_every: InstrumentParameterWhereInput
+  parameters_some: InstrumentParameterWhereInput
+  parameters_none: InstrumentParameterWhereInput
+  subsystems_every: InstrumentSubsystemWhereInput
+  subsystems_some: InstrumentSubsystemWhereInput
+  subsystems_none: InstrumentSubsystemWhereInput
+}
+
+input InstrumentWhereUniqueInput {
+  id: ID
+}
+
+"""
+The `Long` scalar type represents non-fractional signed whole numeric values.
+Long can represent values between -(2^63) and 2^63 - 1.
+"""
+scalar Long
+
+type Measurement implements Node {
+  id: ID!
+  createdAt: DateTime!
+  intValue: Int
+  floatValue: Float
+  stringValue: String
+}
+
+"""A connection to a list of items."""
+type MeasurementConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [MeasurementEdge]!
+  aggregate: AggregateMeasurement!
+}
+
+input MeasurementCreateInput {
+  intValue: Int
+  floatValue: Float
+  stringValue: String
+}
+
+input MeasurementCreateManyInput {
+  create: [MeasurementCreateInput!]
+  connect: [MeasurementWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type MeasurementEdge {
+  """The item at the end of the edge."""
+  node: Measurement!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum MeasurementOrderByInput {
+  id_ASC
+  id_DESC
+  createdAt_ASC
+  createdAt_DESC
+  intValue_ASC
+  intValue_DESC
+  floatValue_ASC
+  floatValue_DESC
+  stringValue_ASC
+  stringValue_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+}
+
+type MeasurementPreviousValues {
+  id: ID!
+  createdAt: DateTime!
+  intValue: Int
+  floatValue: Float
+  stringValue: String
+}
+
+type MeasurementRun implements Node {
+  id: ID!
+  name: String!
+  operators(where: UserWhereInput, orderBy: UserOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [User!]
+  location: String!
+  temperature: Float
+  startTime: DateTime!
+  endTime: DateTime!
+  log(where: EventWhereInput, orderBy: EventOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Event!]
+  comments(where: CommentWhereInput, orderBy: CommentOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Comment!]
+  measurements(where: MeasurementWhereInput, orderBy: MeasurementOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Measurement!]
+  setup: Setup!
+}
+
+"""A connection to a list of items."""
+type MeasurementRunConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [MeasurementRunEdge]!
+  aggregate: AggregateMeasurementRun!
+}
+
+input MeasurementRunCreateInput {
+  name: String!
+  location: String!
+  temperature: Float
+  startTime: DateTime!
+  endTime: DateTime!
+  operators: UserCreateManyInput
+  log: EventCreateManyInput
+  comments: CommentCreateManyInput
+  measurements: MeasurementCreateManyInput
+  setup: SetupCreateOneInput!
+}
+
+input MeasurementRunCreateManyInput {
+  create: [MeasurementRunCreateInput!]
+  connect: [MeasurementRunWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type MeasurementRunEdge {
+  """The item at the end of the edge."""
+  node: MeasurementRun!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum MeasurementRunOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  location_ASC
+  location_DESC
+  temperature_ASC
+  temperature_DESC
+  startTime_ASC
+  startTime_DESC
+  endTime_ASC
+  endTime_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type MeasurementRunPreviousValues {
+  id: ID!
+  name: String!
+  location: String!
+  temperature: Float
+  startTime: DateTime!
+  endTime: DateTime!
+}
+
+input MeasurementRunScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [MeasurementRunScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [MeasurementRunScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [MeasurementRunScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  location: String
+
+  """All values that are not equal to given value."""
+  location_not: String
+
+  """All values that are contained in given list."""
+  location_in: [String!]
+
+  """All values that are not contained in given list."""
+  location_not_in: [String!]
+
+  """All values less than the given value."""
+  location_lt: String
+
+  """All values less than or equal the given value."""
+  location_lte: String
+
+  """All values greater than the given value."""
+  location_gt: String
+
+  """All values greater than or equal the given value."""
+  location_gte: String
+
+  """All values containing the given string."""
+  location_contains: String
+
+  """All values not containing the given string."""
+  location_not_contains: String
+
+  """All values starting with the given string."""
+  location_starts_with: String
+
+  """All values not starting with the given string."""
+  location_not_starts_with: String
+
+  """All values ending with the given string."""
+  location_ends_with: String
+
+  """All values not ending with the given string."""
+  location_not_ends_with: String
+  temperature: Float
+
+  """All values that are not equal to given value."""
+  temperature_not: Float
+
+  """All values that are contained in given list."""
+  temperature_in: [Float!]
+
+  """All values that are not contained in given list."""
+  temperature_not_in: [Float!]
+
+  """All values less than the given value."""
+  temperature_lt: Float
+
+  """All values less than or equal the given value."""
+  temperature_lte: Float
+
+  """All values greater than the given value."""
+  temperature_gt: Float
+
+  """All values greater than or equal the given value."""
+  temperature_gte: Float
+  startTime: DateTime
+
+  """All values that are not equal to given value."""
+  startTime_not: DateTime
+
+  """All values that are contained in given list."""
+  startTime_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  startTime_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  startTime_lt: DateTime
+
+  """All values less than or equal the given value."""
+  startTime_lte: DateTime
+
+  """All values greater than the given value."""
+  startTime_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  startTime_gte: DateTime
+  endTime: DateTime
+
+  """All values that are not equal to given value."""
+  endTime_not: DateTime
+
+  """All values that are contained in given list."""
+  endTime_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  endTime_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  endTime_lt: DateTime
+
+  """All values less than or equal the given value."""
+  endTime_lte: DateTime
+
+  """All values greater than the given value."""
+  endTime_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  endTime_gte: DateTime
+}
+
+type MeasurementRunSubscriptionPayload {
+  mutation: MutationType!
+  node: MeasurementRun
+  updatedFields: [String!]
+  previousValues: MeasurementRunPreviousValues
+}
+
+input MeasurementRunSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [MeasurementRunSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [MeasurementRunSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [MeasurementRunSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: MeasurementRunWhereInput
+}
+
+input MeasurementRunUpdateDataInput {
+  name: String
+  location: String
+  temperature: Float
+  startTime: DateTime
+  endTime: DateTime
+  operators: UserUpdateManyInput
+  log: EventUpdateManyInput
+  comments: CommentUpdateManyInput
+  measurements: MeasurementUpdateManyInput
+  setup: SetupUpdateOneRequiredInput
+}
+
+input MeasurementRunUpdateInput {
+  name: String
+  location: String
+  temperature: Float
+  startTime: DateTime
+  endTime: DateTime
+  operators: UserUpdateManyInput
+  log: EventUpdateManyInput
+  comments: CommentUpdateManyInput
+  measurements: MeasurementUpdateManyInput
+  setup: SetupUpdateOneRequiredInput
+}
+
+input MeasurementRunUpdateManyDataInput {
+  name: String
+  location: String
+  temperature: Float
+  startTime: DateTime
+  endTime: DateTime
+}
+
+input MeasurementRunUpdateManyInput {
+  create: [MeasurementRunCreateInput!]
+  connect: [MeasurementRunWhereUniqueInput!]
+  set: [MeasurementRunWhereUniqueInput!]
+  disconnect: [MeasurementRunWhereUniqueInput!]
+  delete: [MeasurementRunWhereUniqueInput!]
+  update: [MeasurementRunUpdateWithWhereUniqueNestedInput!]
+  updateMany: [MeasurementRunUpdateManyWithWhereNestedInput!]
+  deleteMany: [MeasurementRunScalarWhereInput!]
+  upsert: [MeasurementRunUpsertWithWhereUniqueNestedInput!]
+}
+
+input MeasurementRunUpdateManyMutationInput {
+  name: String
+  location: String
+  temperature: Float
+  startTime: DateTime
+  endTime: DateTime
+}
+
+input MeasurementRunUpdateManyWithWhereNestedInput {
+  where: MeasurementRunScalarWhereInput!
+  data: MeasurementRunUpdateManyDataInput!
+}
+
+input MeasurementRunUpdateWithWhereUniqueNestedInput {
+  where: MeasurementRunWhereUniqueInput!
+  data: MeasurementRunUpdateDataInput!
+}
+
+input MeasurementRunUpsertWithWhereUniqueNestedInput {
+  where: MeasurementRunWhereUniqueInput!
+  update: MeasurementRunUpdateDataInput!
+  create: MeasurementRunCreateInput!
+}
+
+input MeasurementRunWhereInput {
+  """Logical AND on all given filters."""
+  AND: [MeasurementRunWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [MeasurementRunWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [MeasurementRunWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  location: String
+
+  """All values that are not equal to given value."""
+  location_not: String
+
+  """All values that are contained in given list."""
+  location_in: [String!]
+
+  """All values that are not contained in given list."""
+  location_not_in: [String!]
+
+  """All values less than the given value."""
+  location_lt: String
+
+  """All values less than or equal the given value."""
+  location_lte: String
+
+  """All values greater than the given value."""
+  location_gt: String
+
+  """All values greater than or equal the given value."""
+  location_gte: String
+
+  """All values containing the given string."""
+  location_contains: String
+
+  """All values not containing the given string."""
+  location_not_contains: String
+
+  """All values starting with the given string."""
+  location_starts_with: String
+
+  """All values not starting with the given string."""
+  location_not_starts_with: String
+
+  """All values ending with the given string."""
+  location_ends_with: String
+
+  """All values not ending with the given string."""
+  location_not_ends_with: String
+  temperature: Float
+
+  """All values that are not equal to given value."""
+  temperature_not: Float
+
+  """All values that are contained in given list."""
+  temperature_in: [Float!]
+
+  """All values that are not contained in given list."""
+  temperature_not_in: [Float!]
+
+  """All values less than the given value."""
+  temperature_lt: Float
+
+  """All values less than or equal the given value."""
+  temperature_lte: Float
+
+  """All values greater than the given value."""
+  temperature_gt: Float
+
+  """All values greater than or equal the given value."""
+  temperature_gte: Float
+  startTime: DateTime
+
+  """All values that are not equal to given value."""
+  startTime_not: DateTime
+
+  """All values that are contained in given list."""
+  startTime_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  startTime_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  startTime_lt: DateTime
+
+  """All values less than or equal the given value."""
+  startTime_lte: DateTime
+
+  """All values greater than the given value."""
+  startTime_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  startTime_gte: DateTime
+  endTime: DateTime
+
+  """All values that are not equal to given value."""
+  endTime_not: DateTime
+
+  """All values that are contained in given list."""
+  endTime_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  endTime_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  endTime_lt: DateTime
+
+  """All values less than or equal the given value."""
+  endTime_lte: DateTime
+
+  """All values greater than the given value."""
+  endTime_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  endTime_gte: DateTime
+  operators_every: UserWhereInput
+  operators_some: UserWhereInput
+  operators_none: UserWhereInput
+  log_every: EventWhereInput
+  log_some: EventWhereInput
+  log_none: EventWhereInput
+  comments_every: CommentWhereInput
+  comments_some: CommentWhereInput
+  comments_none: CommentWhereInput
+  measurements_every: MeasurementWhereInput
+  measurements_some: MeasurementWhereInput
+  measurements_none: MeasurementWhereInput
+  setup: SetupWhereInput
+}
+
+input MeasurementRunWhereUniqueInput {
+  id: ID
+}
+
+input MeasurementScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [MeasurementScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [MeasurementScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [MeasurementScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  createdAt: DateTime
+
+  """All values that are not equal to given value."""
+  createdAt_not: DateTime
+
+  """All values that are contained in given list."""
+  createdAt_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  createdAt_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  createdAt_lt: DateTime
+
+  """All values less than or equal the given value."""
+  createdAt_lte: DateTime
+
+  """All values greater than the given value."""
+  createdAt_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  createdAt_gte: DateTime
+  intValue: Int
+
+  """All values that are not equal to given value."""
+  intValue_not: Int
+
+  """All values that are contained in given list."""
+  intValue_in: [Int!]
+
+  """All values that are not contained in given list."""
+  intValue_not_in: [Int!]
+
+  """All values less than the given value."""
+  intValue_lt: Int
+
+  """All values less than or equal the given value."""
+  intValue_lte: Int
+
+  """All values greater than the given value."""
+  intValue_gt: Int
+
+  """All values greater than or equal the given value."""
+  intValue_gte: Int
+  floatValue: Float
+
+  """All values that are not equal to given value."""
+  floatValue_not: Float
+
+  """All values that are contained in given list."""
+  floatValue_in: [Float!]
+
+  """All values that are not contained in given list."""
+  floatValue_not_in: [Float!]
+
+  """All values less than the given value."""
+  floatValue_lt: Float
+
+  """All values less than or equal the given value."""
+  floatValue_lte: Float
+
+  """All values greater than the given value."""
+  floatValue_gt: Float
+
+  """All values greater than or equal the given value."""
+  floatValue_gte: Float
+  stringValue: String
+
+  """All values that are not equal to given value."""
+  stringValue_not: String
+
+  """All values that are contained in given list."""
+  stringValue_in: [String!]
+
+  """All values that are not contained in given list."""
+  stringValue_not_in: [String!]
+
+  """All values less than the given value."""
+  stringValue_lt: String
+
+  """All values less than or equal the given value."""
+  stringValue_lte: String
+
+  """All values greater than the given value."""
+  stringValue_gt: String
+
+  """All values greater than or equal the given value."""
+  stringValue_gte: String
+
+  """All values containing the given string."""
+  stringValue_contains: String
+
+  """All values not containing the given string."""
+  stringValue_not_contains: String
+
+  """All values starting with the given string."""
+  stringValue_starts_with: String
+
+  """All values not starting with the given string."""
+  stringValue_not_starts_with: String
+
+  """All values ending with the given string."""
+  stringValue_ends_with: String
+
+  """All values not ending with the given string."""
+  stringValue_not_ends_with: String
+}
+
+type MeasurementSubscriptionPayload {
+  mutation: MutationType!
+  node: Measurement
+  updatedFields: [String!]
+  previousValues: MeasurementPreviousValues
+}
+
+input MeasurementSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [MeasurementSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [MeasurementSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [MeasurementSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: MeasurementWhereInput
+}
+
+input MeasurementUpdateDataInput {
+  intValue: Int
+  floatValue: Float
+  stringValue: String
+}
+
+input MeasurementUpdateInput {
+  intValue: Int
+  floatValue: Float
+  stringValue: String
+}
+
+input MeasurementUpdateManyDataInput {
+  intValue: Int
+  floatValue: Float
+  stringValue: String
+}
+
+input MeasurementUpdateManyInput {
+  create: [MeasurementCreateInput!]
+  connect: [MeasurementWhereUniqueInput!]
+  set: [MeasurementWhereUniqueInput!]
+  disconnect: [MeasurementWhereUniqueInput!]
+  delete: [MeasurementWhereUniqueInput!]
+  update: [MeasurementUpdateWithWhereUniqueNestedInput!]
+  updateMany: [MeasurementUpdateManyWithWhereNestedInput!]
+  deleteMany: [MeasurementScalarWhereInput!]
+  upsert: [MeasurementUpsertWithWhereUniqueNestedInput!]
+}
+
+input MeasurementUpdateManyMutationInput {
+  intValue: Int
+  floatValue: Float
+  stringValue: String
+}
+
+input MeasurementUpdateManyWithWhereNestedInput {
+  where: MeasurementScalarWhereInput!
+  data: MeasurementUpdateManyDataInput!
+}
+
+input MeasurementUpdateWithWhereUniqueNestedInput {
+  where: MeasurementWhereUniqueInput!
+  data: MeasurementUpdateDataInput!
+}
+
+input MeasurementUpsertWithWhereUniqueNestedInput {
+  where: MeasurementWhereUniqueInput!
+  update: MeasurementUpdateDataInput!
+  create: MeasurementCreateInput!
+}
+
+input MeasurementWhereInput {
+  """Logical AND on all given filters."""
+  AND: [MeasurementWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [MeasurementWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [MeasurementWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  createdAt: DateTime
+
+  """All values that are not equal to given value."""
+  createdAt_not: DateTime
+
+  """All values that are contained in given list."""
+  createdAt_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  createdAt_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  createdAt_lt: DateTime
+
+  """All values less than or equal the given value."""
+  createdAt_lte: DateTime
+
+  """All values greater than the given value."""
+  createdAt_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  createdAt_gte: DateTime
+  intValue: Int
+
+  """All values that are not equal to given value."""
+  intValue_not: Int
+
+  """All values that are contained in given list."""
+  intValue_in: [Int!]
+
+  """All values that are not contained in given list."""
+  intValue_not_in: [Int!]
+
+  """All values less than the given value."""
+  intValue_lt: Int
+
+  """All values less than or equal the given value."""
+  intValue_lte: Int
+
+  """All values greater than the given value."""
+  intValue_gt: Int
+
+  """All values greater than or equal the given value."""
+  intValue_gte: Int
+  floatValue: Float
+
+  """All values that are not equal to given value."""
+  floatValue_not: Float
+
+  """All values that are contained in given list."""
+  floatValue_in: [Float!]
+
+  """All values that are not contained in given list."""
+  floatValue_not_in: [Float!]
+
+  """All values less than the given value."""
+  floatValue_lt: Float
+
+  """All values less than or equal the given value."""
+  floatValue_lte: Float
+
+  """All values greater than the given value."""
+  floatValue_gt: Float
+
+  """All values greater than or equal the given value."""
+  floatValue_gte: Float
+  stringValue: String
+
+  """All values that are not equal to given value."""
+  stringValue_not: String
+
+  """All values that are contained in given list."""
+  stringValue_in: [String!]
+
+  """All values that are not contained in given list."""
+  stringValue_not_in: [String!]
+
+  """All values less than the given value."""
+  stringValue_lt: String
+
+  """All values less than or equal the given value."""
+  stringValue_lte: String
+
+  """All values greater than the given value."""
+  stringValue_gt: String
+
+  """All values greater than or equal the given value."""
+  stringValue_gte: String
+
+  """All values containing the given string."""
+  stringValue_contains: String
+
+  """All values not containing the given string."""
+  stringValue_not_contains: String
+
+  """All values starting with the given string."""
+  stringValue_starts_with: String
+
+  """All values not starting with the given string."""
+  stringValue_not_starts_with: String
+
+  """All values ending with the given string."""
+  stringValue_ends_with: String
+
+  """All values not ending with the given string."""
+  stringValue_not_ends_with: String
+}
+
+input MeasurementWhereUniqueInput {
+  id: ID
+}
+
+type Meta implements Node {
+  id: ID!
+  key: String!
+  value: String!
+}
+
+"""A connection to a list of items."""
+type MetaConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [MetaEdge]!
+  aggregate: AggregateMeta!
+}
+
+input MetaCreateInput {
+  key: String!
+  value: String!
+}
+
+"""An edge in a connection."""
+type MetaEdge {
+  """The item at the end of the edge."""
+  node: Meta!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum MetaOrderByInput {
+  id_ASC
+  id_DESC
+  key_ASC
+  key_DESC
+  value_ASC
+  value_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type MetaPreviousValues {
+  id: ID!
+  key: String!
+  value: String!
+}
+
+type MetaSubscriptionPayload {
+  mutation: MutationType!
+  node: Meta
+  updatedFields: [String!]
+  previousValues: MetaPreviousValues
+}
+
+input MetaSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [MetaSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [MetaSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [MetaSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: MetaWhereInput
+}
+
+input MetaUpdateInput {
+  key: String
+  value: String
+}
+
+input MetaUpdateManyMutationInput {
+  key: String
+  value: String
+}
+
+input MetaWhereInput {
+  """Logical AND on all given filters."""
+  AND: [MetaWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [MetaWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [MetaWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  key: String
+
+  """All values that are not equal to given value."""
+  key_not: String
+
+  """All values that are contained in given list."""
+  key_in: [String!]
+
+  """All values that are not contained in given list."""
+  key_not_in: [String!]
+
+  """All values less than the given value."""
+  key_lt: String
+
+  """All values less than or equal the given value."""
+  key_lte: String
+
+  """All values greater than the given value."""
+  key_gt: String
+
+  """All values greater than or equal the given value."""
+  key_gte: String
+
+  """All values containing the given string."""
+  key_contains: String
+
+  """All values not containing the given string."""
+  key_not_contains: String
+
+  """All values starting with the given string."""
+  key_starts_with: String
+
+  """All values not starting with the given string."""
+  key_not_starts_with: String
+
+  """All values ending with the given string."""
+  key_ends_with: String
+
+  """All values not ending with the given string."""
+  key_not_ends_with: String
+  value: String
+
+  """All values that are not equal to given value."""
+  value_not: String
+
+  """All values that are contained in given list."""
+  value_in: [String!]
+
+  """All values that are not contained in given list."""
+  value_not_in: [String!]
+
+  """All values less than the given value."""
+  value_lt: String
+
+  """All values less than or equal the given value."""
+  value_lte: String
+
+  """All values greater than the given value."""
+  value_gt: String
+
+  """All values greater than or equal the given value."""
+  value_gte: String
+
+  """All values containing the given string."""
+  value_contains: String
+
+  """All values not containing the given string."""
+  value_not_contains: String
+
+  """All values starting with the given string."""
+  value_starts_with: String
+
+  """All values not starting with the given string."""
+  value_not_starts_with: String
+
+  """All values ending with the given string."""
+  value_ends_with: String
+
+  """All values not ending with the given string."""
+  value_not_ends_with: String
+}
+
+input MetaWhereUniqueInput {
+  id: ID
+}
+
+type Mutation {
+  createMeta(data: MetaCreateInput!): Meta!
+  createProject(data: ProjectCreateInput!): Project!
+  createDUT(data: DUTCreateInput!): DUT!
+  createCharacterization(data: CharacterizationCreateInput!): Characterization!
+  createProjectVersion(data: ProjectVersionCreateInput!): ProjectVersion!
+  createSetupHardware(data: SetupHardwareCreateInput!): SetupHardware!
+  createMeasurement(data: MeasurementCreateInput!): Measurement!
+  createSetupHardwareInstance(data: SetupHardwareInstanceCreateInput!): SetupHardwareInstance!
+  createMeasurementRun(data: MeasurementRunCreateInput!): MeasurementRun!
+  createSetup(data: SetupCreateInput!): Setup!
+  createInstrumentParameter(data: InstrumentParameterCreateInput!): InstrumentParameter!
+  createInstrumentSubsystem(data: InstrumentSubsystemCreateInput!): InstrumentSubsystem!
+  createInstrumentInstance(data: InstrumentInstanceCreateInput!): InstrumentInstance!
+  createInstrumentCommand(data: InstrumentCommandCreateInput!): InstrumentCommand!
+  createEvent(data: EventCreateInput!): Event!
+  createUser(data: UserCreateInput!): User!
+  createComment(data: CommentCreateInput!): Comment!
+  createInstrument(data: InstrumentCreateInput!): Instrument!
+  createFile(data: FileCreateInput!): File!
+  updateMeta(data: MetaUpdateInput!, where: MetaWhereUniqueInput!): Meta
+  updateProject(data: ProjectUpdateInput!, where: ProjectWhereUniqueInput!): Project
+  updateDUT(data: DUTUpdateInput!, where: DUTWhereUniqueInput!): DUT
+  updateCharacterization(data: CharacterizationUpdateInput!, where: CharacterizationWhereUniqueInput!): Characterization
+  updateProjectVersion(data: ProjectVersionUpdateInput!, where: ProjectVersionWhereUniqueInput!): ProjectVersion
+  updateSetupHardware(data: SetupHardwareUpdateInput!, where: SetupHardwareWhereUniqueInput!): SetupHardware
+  updateMeasurement(data: MeasurementUpdateInput!, where: MeasurementWhereUniqueInput!): Measurement
+  updateSetupHardwareInstance(data: SetupHardwareInstanceUpdateInput!, where: SetupHardwareInstanceWhereUniqueInput!): SetupHardwareInstance
+  updateMeasurementRun(data: MeasurementRunUpdateInput!, where: MeasurementRunWhereUniqueInput!): MeasurementRun
+  updateSetup(data: SetupUpdateInput!, where: SetupWhereUniqueInput!): Setup
+  updateInstrumentParameter(data: InstrumentParameterUpdateInput!, where: InstrumentParameterWhereUniqueInput!): InstrumentParameter
+  updateInstrumentSubsystem(data: InstrumentSubsystemUpdateInput!, where: InstrumentSubsystemWhereUniqueInput!): InstrumentSubsystem
+  updateInstrumentInstance(data: InstrumentInstanceUpdateInput!, where: InstrumentInstanceWhereUniqueInput!): InstrumentInstance
+  updateInstrumentCommand(data: InstrumentCommandUpdateInput!, where: InstrumentCommandWhereUniqueInput!): InstrumentCommand
+  updateEvent(data: EventUpdateInput!, where: EventWhereUniqueInput!): Event
+  updateUser(data: UserUpdateInput!, where: UserWhereUniqueInput!): User
+  updateComment(data: CommentUpdateInput!, where: CommentWhereUniqueInput!): Comment
+  updateInstrument(data: InstrumentUpdateInput!, where: InstrumentWhereUniqueInput!): Instrument
+  updateFile(data: FileUpdateInput!, where: FileWhereUniqueInput!): File
+  deleteMeta(where: MetaWhereUniqueInput!): Meta
+  deleteProject(where: ProjectWhereUniqueInput!): Project
+  deleteDUT(where: DUTWhereUniqueInput!): DUT
+  deleteCharacterization(where: CharacterizationWhereUniqueInput!): Characterization
+  deleteProjectVersion(where: ProjectVersionWhereUniqueInput!): ProjectVersion
+  deleteSetupHardware(where: SetupHardwareWhereUniqueInput!): SetupHardware
+  deleteMeasurement(where: MeasurementWhereUniqueInput!): Measurement
+  deleteSetupHardwareInstance(where: SetupHardwareInstanceWhereUniqueInput!): SetupHardwareInstance
+  deleteMeasurementRun(where: MeasurementRunWhereUniqueInput!): MeasurementRun
+  deleteSetup(where: SetupWhereUniqueInput!): Setup
+  deleteInstrumentParameter(where: InstrumentParameterWhereUniqueInput!): InstrumentParameter
+  deleteInstrumentSubsystem(where: InstrumentSubsystemWhereUniqueInput!): InstrumentSubsystem
+  deleteInstrumentInstance(where: InstrumentInstanceWhereUniqueInput!): InstrumentInstance
+  deleteInstrumentCommand(where: InstrumentCommandWhereUniqueInput!): InstrumentCommand
+  deleteEvent(where: EventWhereUniqueInput!): Event
+  deleteUser(where: UserWhereUniqueInput!): User
+  deleteComment(where: CommentWhereUniqueInput!): Comment
+  deleteInstrument(where: InstrumentWhereUniqueInput!): Instrument
+  deleteFile(where: FileWhereUniqueInput!): File
+  upsertMeta(where: MetaWhereUniqueInput!, create: MetaCreateInput!, update: MetaUpdateInput!): Meta!
+  upsertProject(where: ProjectWhereUniqueInput!, create: ProjectCreateInput!, update: ProjectUpdateInput!): Project!
+  upsertDUT(where: DUTWhereUniqueInput!, create: DUTCreateInput!, update: DUTUpdateInput!): DUT!
+  upsertCharacterization(where: CharacterizationWhereUniqueInput!, create: CharacterizationCreateInput!, update: CharacterizationUpdateInput!): Characterization!
+  upsertProjectVersion(where: ProjectVersionWhereUniqueInput!, create: ProjectVersionCreateInput!, update: ProjectVersionUpdateInput!): ProjectVersion!
+  upsertSetupHardware(where: SetupHardwareWhereUniqueInput!, create: SetupHardwareCreateInput!, update: SetupHardwareUpdateInput!): SetupHardware!
+  upsertMeasurement(where: MeasurementWhereUniqueInput!, create: MeasurementCreateInput!, update: MeasurementUpdateInput!): Measurement!
+  upsertSetupHardwareInstance(where: SetupHardwareInstanceWhereUniqueInput!, create: SetupHardwareInstanceCreateInput!, update: SetupHardwareInstanceUpdateInput!): SetupHardwareInstance!
+  upsertMeasurementRun(where: MeasurementRunWhereUniqueInput!, create: MeasurementRunCreateInput!, update: MeasurementRunUpdateInput!): MeasurementRun!
+  upsertSetup(where: SetupWhereUniqueInput!, create: SetupCreateInput!, update: SetupUpdateInput!): Setup!
+  upsertInstrumentParameter(where: InstrumentParameterWhereUniqueInput!, create: InstrumentParameterCreateInput!, update: InstrumentParameterUpdateInput!): InstrumentParameter!
+  upsertInstrumentSubsystem(where: InstrumentSubsystemWhereUniqueInput!, create: InstrumentSubsystemCreateInput!, update: InstrumentSubsystemUpdateInput!): InstrumentSubsystem!
+  upsertInstrumentInstance(where: InstrumentInstanceWhereUniqueInput!, create: InstrumentInstanceCreateInput!, update: InstrumentInstanceUpdateInput!): InstrumentInstance!
+  upsertInstrumentCommand(where: InstrumentCommandWhereUniqueInput!, create: InstrumentCommandCreateInput!, update: InstrumentCommandUpdateInput!): InstrumentCommand!
+  upsertEvent(where: EventWhereUniqueInput!, create: EventCreateInput!, update: EventUpdateInput!): Event!
+  upsertUser(where: UserWhereUniqueInput!, create: UserCreateInput!, update: UserUpdateInput!): User!
+  upsertComment(where: CommentWhereUniqueInput!, create: CommentCreateInput!, update: CommentUpdateInput!): Comment!
+  upsertInstrument(where: InstrumentWhereUniqueInput!, create: InstrumentCreateInput!, update: InstrumentUpdateInput!): Instrument!
+  upsertFile(where: FileWhereUniqueInput!, create: FileCreateInput!, update: FileUpdateInput!): File!
+  updateManyMetas(data: MetaUpdateManyMutationInput!, where: MetaWhereInput): BatchPayload!
+  updateManyProjects(data: ProjectUpdateManyMutationInput!, where: ProjectWhereInput): BatchPayload!
+  updateManyDUTs(data: DUTUpdateManyMutationInput!, where: DUTWhereInput): BatchPayload!
+  updateManyCharacterizations(data: CharacterizationUpdateManyMutationInput!, where: CharacterizationWhereInput): BatchPayload!
+  updateManyProjectVersions(data: ProjectVersionUpdateManyMutationInput!, where: ProjectVersionWhereInput): BatchPayload!
+  updateManySetupHardwares(data: SetupHardwareUpdateManyMutationInput!, where: SetupHardwareWhereInput): BatchPayload!
+  updateManyMeasurements(data: MeasurementUpdateManyMutationInput!, where: MeasurementWhereInput): BatchPayload!
+  updateManySetupHardwareInstances(data: SetupHardwareInstanceUpdateManyMutationInput!, where: SetupHardwareInstanceWhereInput): BatchPayload!
+  updateManyMeasurementRuns(data: MeasurementRunUpdateManyMutationInput!, where: MeasurementRunWhereInput): BatchPayload!
+  updateManySetups(data: SetupUpdateManyMutationInput!, where: SetupWhereInput): BatchPayload!
+  updateManyInstrumentParameters(data: InstrumentParameterUpdateManyMutationInput!, where: InstrumentParameterWhereInput): BatchPayload!
+  updateManyInstrumentSubsystems(data: InstrumentSubsystemUpdateManyMutationInput!, where: InstrumentSubsystemWhereInput): BatchPayload!
+  updateManyInstrumentInstances(data: InstrumentInstanceUpdateManyMutationInput!, where: InstrumentInstanceWhereInput): BatchPayload!
+  updateManyInstrumentCommands(data: InstrumentCommandUpdateManyMutationInput!, where: InstrumentCommandWhereInput): BatchPayload!
+  updateManyEvents(data: EventUpdateManyMutationInput!, where: EventWhereInput): BatchPayload!
+  updateManyUsers(data: UserUpdateManyMutationInput!, where: UserWhereInput): BatchPayload!
+  updateManyComments(data: CommentUpdateManyMutationInput!, where: CommentWhereInput): BatchPayload!
+  updateManyInstruments(data: InstrumentUpdateManyMutationInput!, where: InstrumentWhereInput): BatchPayload!
+  updateManyFiles(data: FileUpdateManyMutationInput!, where: FileWhereInput): BatchPayload!
+  deleteManyMetas(where: MetaWhereInput): BatchPayload!
+  deleteManyProjects(where: ProjectWhereInput): BatchPayload!
+  deleteManyDUTs(where: DUTWhereInput): BatchPayload!
+  deleteManyCharacterizations(where: CharacterizationWhereInput): BatchPayload!
+  deleteManyProjectVersions(where: ProjectVersionWhereInput): BatchPayload!
+  deleteManySetupHardwares(where: SetupHardwareWhereInput): BatchPayload!
+  deleteManyMeasurements(where: MeasurementWhereInput): BatchPayload!
+  deleteManySetupHardwareInstances(where: SetupHardwareInstanceWhereInput): BatchPayload!
+  deleteManyMeasurementRuns(where: MeasurementRunWhereInput): BatchPayload!
+  deleteManySetups(where: SetupWhereInput): BatchPayload!
+  deleteManyInstrumentParameters(where: InstrumentParameterWhereInput): BatchPayload!
+  deleteManyInstrumentSubsystems(where: InstrumentSubsystemWhereInput): BatchPayload!
+  deleteManyInstrumentInstances(where: InstrumentInstanceWhereInput): BatchPayload!
+  deleteManyInstrumentCommands(where: InstrumentCommandWhereInput): BatchPayload!
+  deleteManyEvents(where: EventWhereInput): BatchPayload!
+  deleteManyUsers(where: UserWhereInput): BatchPayload!
+  deleteManyComments(where: CommentWhereInput): BatchPayload!
+  deleteManyInstruments(where: InstrumentWhereInput): BatchPayload!
+  deleteManyFiles(where: FileWhereInput): BatchPayload!
+}
+
+enum MutationType {
+  CREATED
+  UPDATED
+  DELETED
+}
+
+"""An object with an ID"""
+interface Node {
+  """The id of the object."""
+  id: ID!
+}
+
+"""Information about pagination in a connection."""
+type PageInfo {
+  """When paginating forwards, are there more items?"""
+  hasNextPage: Boolean!
+
+  """When paginating backwards, are there more items?"""
+  hasPreviousPage: Boolean!
+
+  """When paginating backwards, the cursor to continue."""
+  startCursor: String
+
+  """When paginating forwards, the cursor to continue."""
+  endCursor: String
+}
+
+type Project implements Node {
+  id: ID!
+  name: String!
+  abbreviation: String!
+  description: String
+  files(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File!]
+  versions(where: ProjectVersionWhereInput, orderBy: ProjectVersionOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [ProjectVersion!]
+}
+
+"""A connection to a list of items."""
+type ProjectConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [ProjectEdge]!
+  aggregate: AggregateProject!
+}
+
+input ProjectCreateInput {
+  name: String!
+  abbreviation: String!
+  description: String
+  files: FileCreateManyInput
+  versions: ProjectVersionCreateManyWithoutProjectInput
+}
+
+input ProjectCreateOneWithoutVersionsInput {
+  create: ProjectCreateWithoutVersionsInput
+  connect: ProjectWhereUniqueInput
+}
+
+input ProjectCreateWithoutVersionsInput {
+  name: String!
+  abbreviation: String!
+  description: String
+  files: FileCreateManyInput
+}
+
+"""An edge in a connection."""
+type ProjectEdge {
+  """The item at the end of the edge."""
+  node: Project!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum ProjectOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  abbreviation_ASC
+  abbreviation_DESC
+  description_ASC
+  description_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type ProjectPreviousValues {
+  id: ID!
+  name: String!
+  abbreviation: String!
+  description: String
+}
+
+type ProjectSubscriptionPayload {
+  mutation: MutationType!
+  node: Project
+  updatedFields: [String!]
+  previousValues: ProjectPreviousValues
+}
+
+input ProjectSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [ProjectSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [ProjectSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [ProjectSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: ProjectWhereInput
+}
+
+input ProjectUpdateInput {
+  name: String
+  abbreviation: String
+  description: String
+  files: FileUpdateManyInput
+  versions: ProjectVersionUpdateManyWithoutProjectInput
+}
+
+input ProjectUpdateManyMutationInput {
+  name: String
+  abbreviation: String
+  description: String
+}
+
+input ProjectUpdateOneRequiredWithoutVersionsInput {
+  create: ProjectCreateWithoutVersionsInput
+  connect: ProjectWhereUniqueInput
+  update: ProjectUpdateWithoutVersionsDataInput
+  upsert: ProjectUpsertWithoutVersionsInput
+}
+
+input ProjectUpdateWithoutVersionsDataInput {
+  name: String
+  abbreviation: String
+  description: String
+  files: FileUpdateManyInput
+}
+
+input ProjectUpsertWithoutVersionsInput {
+  update: ProjectUpdateWithoutVersionsDataInput!
+  create: ProjectCreateWithoutVersionsInput!
+}
+
+type ProjectVersion implements Node {
+  id: ID!
+  name: String!
+  changes: [String!]!
+  date: DateTime!
+  project: Project!
+}
+
+"""A connection to a list of items."""
+type ProjectVersionConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [ProjectVersionEdge]!
+  aggregate: AggregateProjectVersion!
+}
+
+input ProjectVersionCreatechangesInput {
+  set: [String!]
+}
+
+input ProjectVersionCreateInput {
+  name: String!
+  date: DateTime!
+  changes: ProjectVersionCreatechangesInput
+  project: ProjectCreateOneWithoutVersionsInput!
+}
+
+input ProjectVersionCreateManyWithoutProjectInput {
+  create: [ProjectVersionCreateWithoutProjectInput!]
+  connect: [ProjectVersionWhereUniqueInput!]
+}
+
+input ProjectVersionCreateOneInput {
+  create: ProjectVersionCreateInput
+  connect: ProjectVersionWhereUniqueInput
+}
+
+input ProjectVersionCreateWithoutProjectInput {
+  name: String!
+  date: DateTime!
+  changes: ProjectVersionCreatechangesInput
+}
+
+"""An edge in a connection."""
+type ProjectVersionEdge {
+  """The item at the end of the edge."""
+  node: ProjectVersion!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum ProjectVersionOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  date_ASC
+  date_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type ProjectVersionPreviousValues {
+  id: ID!
+  name: String!
+  changes: [String!]!
+  date: DateTime!
+}
+
+input ProjectVersionScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [ProjectVersionScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [ProjectVersionScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [ProjectVersionScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  date: DateTime
+
+  """All values that are not equal to given value."""
+  date_not: DateTime
+
+  """All values that are contained in given list."""
+  date_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  date_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  date_lt: DateTime
+
+  """All values less than or equal the given value."""
+  date_lte: DateTime
+
+  """All values greater than the given value."""
+  date_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  date_gte: DateTime
+}
+
+type ProjectVersionSubscriptionPayload {
+  mutation: MutationType!
+  node: ProjectVersion
+  updatedFields: [String!]
+  previousValues: ProjectVersionPreviousValues
+}
+
+input ProjectVersionSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [ProjectVersionSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [ProjectVersionSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [ProjectVersionSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: ProjectVersionWhereInput
+}
+
+input ProjectVersionUpdatechangesInput {
+  set: [String!]
+}
+
+input ProjectVersionUpdateDataInput {
+  name: String
+  date: DateTime
+  changes: ProjectVersionUpdatechangesInput
+  project: ProjectUpdateOneRequiredWithoutVersionsInput
+}
+
+input ProjectVersionUpdateInput {
+  name: String
+  date: DateTime
+  changes: ProjectVersionUpdatechangesInput
+  project: ProjectUpdateOneRequiredWithoutVersionsInput
+}
+
+input ProjectVersionUpdateManyDataInput {
+  name: String
+  date: DateTime
+  changes: ProjectVersionUpdatechangesInput
+}
+
+input ProjectVersionUpdateManyMutationInput {
+  name: String
+  date: DateTime
+  changes: ProjectVersionUpdatechangesInput
+}
+
+input ProjectVersionUpdateManyWithoutProjectInput {
+  create: [ProjectVersionCreateWithoutProjectInput!]
+  connect: [ProjectVersionWhereUniqueInput!]
+  set: [ProjectVersionWhereUniqueInput!]
+  disconnect: [ProjectVersionWhereUniqueInput!]
+  delete: [ProjectVersionWhereUniqueInput!]
+  update: [ProjectVersionUpdateWithWhereUniqueWithoutProjectInput!]
+  updateMany: [ProjectVersionUpdateManyWithWhereNestedInput!]
+  deleteMany: [ProjectVersionScalarWhereInput!]
+  upsert: [ProjectVersionUpsertWithWhereUniqueWithoutProjectInput!]
+}
+
+input ProjectVersionUpdateManyWithWhereNestedInput {
+  where: ProjectVersionScalarWhereInput!
+  data: ProjectVersionUpdateManyDataInput!
+}
+
+input ProjectVersionUpdateOneRequiredInput {
+  create: ProjectVersionCreateInput
+  connect: ProjectVersionWhereUniqueInput
+  update: ProjectVersionUpdateDataInput
+  upsert: ProjectVersionUpsertNestedInput
+}
+
+input ProjectVersionUpdateWithoutProjectDataInput {
+  name: String
+  date: DateTime
+  changes: ProjectVersionUpdatechangesInput
+}
+
+input ProjectVersionUpdateWithWhereUniqueWithoutProjectInput {
+  where: ProjectVersionWhereUniqueInput!
+  data: ProjectVersionUpdateWithoutProjectDataInput!
+}
+
+input ProjectVersionUpsertNestedInput {
+  update: ProjectVersionUpdateDataInput!
+  create: ProjectVersionCreateInput!
+}
+
+input ProjectVersionUpsertWithWhereUniqueWithoutProjectInput {
+  where: ProjectVersionWhereUniqueInput!
+  update: ProjectVersionUpdateWithoutProjectDataInput!
+  create: ProjectVersionCreateWithoutProjectInput!
+}
+
+input ProjectVersionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [ProjectVersionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [ProjectVersionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [ProjectVersionWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  date: DateTime
+
+  """All values that are not equal to given value."""
+  date_not: DateTime
+
+  """All values that are contained in given list."""
+  date_in: [DateTime!]
+
+  """All values that are not contained in given list."""
+  date_not_in: [DateTime!]
+
+  """All values less than the given value."""
+  date_lt: DateTime
+
+  """All values less than or equal the given value."""
+  date_lte: DateTime
+
+  """All values greater than the given value."""
+  date_gt: DateTime
+
+  """All values greater than or equal the given value."""
+  date_gte: DateTime
+  project: ProjectWhereInput
+}
+
+input ProjectVersionWhereUniqueInput {
+  id: ID
+  name: String
+}
+
+input ProjectWhereInput {
+  """Logical AND on all given filters."""
+  AND: [ProjectWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [ProjectWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [ProjectWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  abbreviation: String
+
+  """All values that are not equal to given value."""
+  abbreviation_not: String
+
+  """All values that are contained in given list."""
+  abbreviation_in: [String!]
+
+  """All values that are not contained in given list."""
+  abbreviation_not_in: [String!]
+
+  """All values less than the given value."""
+  abbreviation_lt: String
+
+  """All values less than or equal the given value."""
+  abbreviation_lte: String
+
+  """All values greater than the given value."""
+  abbreviation_gt: String
+
+  """All values greater than or equal the given value."""
+  abbreviation_gte: String
+
+  """All values containing the given string."""
+  abbreviation_contains: String
+
+  """All values not containing the given string."""
+  abbreviation_not_contains: String
+
+  """All values starting with the given string."""
+  abbreviation_starts_with: String
+
+  """All values not starting with the given string."""
+  abbreviation_not_starts_with: String
+
+  """All values ending with the given string."""
+  abbreviation_ends_with: String
+
+  """All values not ending with the given string."""
+  abbreviation_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  files_every: FileWhereInput
+  files_some: FileWhereInput
+  files_none: FileWhereInput
+  versions_every: ProjectVersionWhereInput
+  versions_some: ProjectVersionWhereInput
+  versions_none: ProjectVersionWhereInput
+}
+
+input ProjectWhereUniqueInput {
+  id: ID
+  name: String
+  abbreviation: String
+}
+
+type Query {
+  metas(where: MetaWhereInput, orderBy: MetaOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Meta]!
+  projects(where: ProjectWhereInput, orderBy: ProjectOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Project]!
+  dUTs(where: DUTWhereInput, orderBy: DUTOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [DUT]!
+  characterizations(where: CharacterizationWhereInput, orderBy: CharacterizationOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Characterization]!
+  projectVersions(where: ProjectVersionWhereInput, orderBy: ProjectVersionOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [ProjectVersion]!
+  setupHardwares(where: SetupHardwareWhereInput, orderBy: SetupHardwareOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [SetupHardware]!
+  measurements(where: MeasurementWhereInput, orderBy: MeasurementOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Measurement]!
+  setupHardwareInstances(where: SetupHardwareInstanceWhereInput, orderBy: SetupHardwareInstanceOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [SetupHardwareInstance]!
+  measurementRuns(where: MeasurementRunWhereInput, orderBy: MeasurementRunOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [MeasurementRun]!
+  setups(where: SetupWhereInput, orderBy: SetupOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Setup]!
+  instrumentParameters(where: InstrumentParameterWhereInput, orderBy: InstrumentParameterOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentParameter]!
+  instrumentSubsystems(where: InstrumentSubsystemWhereInput, orderBy: InstrumentSubsystemOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentSubsystem]!
+  instrumentInstances(where: InstrumentInstanceWhereInput, orderBy: InstrumentInstanceOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentInstance]!
+  instrumentCommands(where: InstrumentCommandWhereInput, orderBy: InstrumentCommandOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentCommand]!
+  events(where: EventWhereInput, orderBy: EventOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Event]!
+  users(where: UserWhereInput, orderBy: UserOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [User]!
+  comments(where: CommentWhereInput, orderBy: CommentOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Comment]!
+  instruments(where: InstrumentWhereInput, orderBy: InstrumentOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Instrument]!
+  files(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File]!
+  meta(where: MetaWhereUniqueInput!): Meta
+  project(where: ProjectWhereUniqueInput!): Project
+  dUT(where: DUTWhereUniqueInput!): DUT
+  characterization(where: CharacterizationWhereUniqueInput!): Characterization
+  projectVersion(where: ProjectVersionWhereUniqueInput!): ProjectVersion
+  setupHardware(where: SetupHardwareWhereUniqueInput!): SetupHardware
+  measurement(where: MeasurementWhereUniqueInput!): Measurement
+  setupHardwareInstance(where: SetupHardwareInstanceWhereUniqueInput!): SetupHardwareInstance
+  measurementRun(where: MeasurementRunWhereUniqueInput!): MeasurementRun
+  setup(where: SetupWhereUniqueInput!): Setup
+  instrumentParameter(where: InstrumentParameterWhereUniqueInput!): InstrumentParameter
+  instrumentSubsystem(where: InstrumentSubsystemWhereUniqueInput!): InstrumentSubsystem
+  instrumentInstance(where: InstrumentInstanceWhereUniqueInput!): InstrumentInstance
+  instrumentCommand(where: InstrumentCommandWhereUniqueInput!): InstrumentCommand
+  event(where: EventWhereUniqueInput!): Event
+  user(where: UserWhereUniqueInput!): User
+  comment(where: CommentWhereUniqueInput!): Comment
+  instrument(where: InstrumentWhereUniqueInput!): Instrument
+  file(where: FileWhereUniqueInput!): File
+  metasConnection(where: MetaWhereInput, orderBy: MetaOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): MetaConnection!
+  projectsConnection(where: ProjectWhereInput, orderBy: ProjectOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): ProjectConnection!
+  dUTsConnection(where: DUTWhereInput, orderBy: DUTOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): DUTConnection!
+  characterizationsConnection(where: CharacterizationWhereInput, orderBy: CharacterizationOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): CharacterizationConnection!
+  projectVersionsConnection(where: ProjectVersionWhereInput, orderBy: ProjectVersionOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): ProjectVersionConnection!
+  setupHardwaresConnection(where: SetupHardwareWhereInput, orderBy: SetupHardwareOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): SetupHardwareConnection!
+  measurementsConnection(where: MeasurementWhereInput, orderBy: MeasurementOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): MeasurementConnection!
+  setupHardwareInstancesConnection(where: SetupHardwareInstanceWhereInput, orderBy: SetupHardwareInstanceOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): SetupHardwareInstanceConnection!
+  measurementRunsConnection(where: MeasurementRunWhereInput, orderBy: MeasurementRunOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): MeasurementRunConnection!
+  setupsConnection(where: SetupWhereInput, orderBy: SetupOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): SetupConnection!
+  instrumentParametersConnection(where: InstrumentParameterWhereInput, orderBy: InstrumentParameterOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): InstrumentParameterConnection!
+  instrumentSubsystemsConnection(where: InstrumentSubsystemWhereInput, orderBy: InstrumentSubsystemOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): InstrumentSubsystemConnection!
+  instrumentInstancesConnection(where: InstrumentInstanceWhereInput, orderBy: InstrumentInstanceOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): InstrumentInstanceConnection!
+  instrumentCommandsConnection(where: InstrumentCommandWhereInput, orderBy: InstrumentCommandOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): InstrumentCommandConnection!
+  eventsConnection(where: EventWhereInput, orderBy: EventOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): EventConnection!
+  usersConnection(where: UserWhereInput, orderBy: UserOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): UserConnection!
+  commentsConnection(where: CommentWhereInput, orderBy: CommentOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): CommentConnection!
+  instrumentsConnection(where: InstrumentWhereInput, orderBy: InstrumentOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): InstrumentConnection!
+  filesConnection(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): FileConnection!
+
+  """Fetches an object given its ID"""
+  node(
+    """The ID of an object"""
+    id: ID!
+  ): Node
+}
+
+type Setup implements Node {
+  id: ID!
+  name: String!
+  description: String!
+  images(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File!]
+  comments(where: CommentWhereInput, orderBy: CommentOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Comment!]
+  setupHardware(where: SetupHardwareInstanceWhereInput, orderBy: SetupHardwareInstanceOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [SetupHardwareInstance!]
+  instruments(where: InstrumentInstanceWhereInput, orderBy: InstrumentInstanceOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [InstrumentInstance!]
+}
+
+"""A connection to a list of items."""
+type SetupConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [SetupEdge]!
+  aggregate: AggregateSetup!
+}
+
+input SetupCreateInput {
+  name: String!
+  description: String!
+  images: FileCreateManyInput
+  comments: CommentCreateManyInput
+  setupHardware: SetupHardwareInstanceCreateManyInput
+  instruments: InstrumentInstanceCreateManyInput
+}
+
+input SetupCreateOneInput {
+  create: SetupCreateInput
+  connect: SetupWhereUniqueInput
+}
+
+"""An edge in a connection."""
+type SetupEdge {
+  """The item at the end of the edge."""
+  node: Setup!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+type SetupHardware implements Node {
+  id: ID!
+  name: String!
+  description: String
+  images(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File!]
+}
+
+"""A connection to a list of items."""
+type SetupHardwareConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [SetupHardwareEdge]!
+  aggregate: AggregateSetupHardware!
+}
+
+input SetupHardwareCreateInput {
+  name: String!
+  description: String
+  images: FileCreateManyInput
+}
+
+input SetupHardwareCreateOneInput {
+  create: SetupHardwareCreateInput
+  connect: SetupHardwareWhereUniqueInput
+}
+
+"""An edge in a connection."""
+type SetupHardwareEdge {
+  """The item at the end of the edge."""
+  node: SetupHardware!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+type SetupHardwareInstance implements Node {
+  id: ID!
+  setupHardware: SetupHardware!
+  identifier: String!
+  images(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File!]
+}
+
+"""A connection to a list of items."""
+type SetupHardwareInstanceConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [SetupHardwareInstanceEdge]!
+  aggregate: AggregateSetupHardwareInstance!
+}
+
+input SetupHardwareInstanceCreateInput {
+  identifier: String!
+  setupHardware: SetupHardwareCreateOneInput!
+  images: FileCreateManyInput
+}
+
+input SetupHardwareInstanceCreateManyInput {
+  create: [SetupHardwareInstanceCreateInput!]
+  connect: [SetupHardwareInstanceWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type SetupHardwareInstanceEdge {
+  """The item at the end of the edge."""
+  node: SetupHardwareInstance!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum SetupHardwareInstanceOrderByInput {
+  id_ASC
+  id_DESC
+  identifier_ASC
+  identifier_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type SetupHardwareInstancePreviousValues {
+  id: ID!
+  identifier: String!
+}
+
+input SetupHardwareInstanceScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [SetupHardwareInstanceScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [SetupHardwareInstanceScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [SetupHardwareInstanceScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  identifier: String
+
+  """All values that are not equal to given value."""
+  identifier_not: String
+
+  """All values that are contained in given list."""
+  identifier_in: [String!]
+
+  """All values that are not contained in given list."""
+  identifier_not_in: [String!]
+
+  """All values less than the given value."""
+  identifier_lt: String
+
+  """All values less than or equal the given value."""
+  identifier_lte: String
+
+  """All values greater than the given value."""
+  identifier_gt: String
+
+  """All values greater than or equal the given value."""
+  identifier_gte: String
+
+  """All values containing the given string."""
+  identifier_contains: String
+
+  """All values not containing the given string."""
+  identifier_not_contains: String
+
+  """All values starting with the given string."""
+  identifier_starts_with: String
+
+  """All values not starting with the given string."""
+  identifier_not_starts_with: String
+
+  """All values ending with the given string."""
+  identifier_ends_with: String
+
+  """All values not ending with the given string."""
+  identifier_not_ends_with: String
+}
+
+type SetupHardwareInstanceSubscriptionPayload {
+  mutation: MutationType!
+  node: SetupHardwareInstance
+  updatedFields: [String!]
+  previousValues: SetupHardwareInstancePreviousValues
+}
+
+input SetupHardwareInstanceSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [SetupHardwareInstanceSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [SetupHardwareInstanceSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [SetupHardwareInstanceSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: SetupHardwareInstanceWhereInput
+}
+
+input SetupHardwareInstanceUpdateDataInput {
+  identifier: String
+  setupHardware: SetupHardwareUpdateOneRequiredInput
+  images: FileUpdateManyInput
+}
+
+input SetupHardwareInstanceUpdateInput {
+  identifier: String
+  setupHardware: SetupHardwareUpdateOneRequiredInput
+  images: FileUpdateManyInput
+}
+
+input SetupHardwareInstanceUpdateManyDataInput {
+  identifier: String
+}
+
+input SetupHardwareInstanceUpdateManyInput {
+  create: [SetupHardwareInstanceCreateInput!]
+  connect: [SetupHardwareInstanceWhereUniqueInput!]
+  set: [SetupHardwareInstanceWhereUniqueInput!]
+  disconnect: [SetupHardwareInstanceWhereUniqueInput!]
+  delete: [SetupHardwareInstanceWhereUniqueInput!]
+  update: [SetupHardwareInstanceUpdateWithWhereUniqueNestedInput!]
+  updateMany: [SetupHardwareInstanceUpdateManyWithWhereNestedInput!]
+  deleteMany: [SetupHardwareInstanceScalarWhereInput!]
+  upsert: [SetupHardwareInstanceUpsertWithWhereUniqueNestedInput!]
+}
+
+input SetupHardwareInstanceUpdateManyMutationInput {
+  identifier: String
+}
+
+input SetupHardwareInstanceUpdateManyWithWhereNestedInput {
+  where: SetupHardwareInstanceScalarWhereInput!
+  data: SetupHardwareInstanceUpdateManyDataInput!
+}
+
+input SetupHardwareInstanceUpdateWithWhereUniqueNestedInput {
+  where: SetupHardwareInstanceWhereUniqueInput!
+  data: SetupHardwareInstanceUpdateDataInput!
+}
+
+input SetupHardwareInstanceUpsertWithWhereUniqueNestedInput {
+  where: SetupHardwareInstanceWhereUniqueInput!
+  update: SetupHardwareInstanceUpdateDataInput!
+  create: SetupHardwareInstanceCreateInput!
+}
+
+input SetupHardwareInstanceWhereInput {
+  """Logical AND on all given filters."""
+  AND: [SetupHardwareInstanceWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [SetupHardwareInstanceWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [SetupHardwareInstanceWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  identifier: String
+
+  """All values that are not equal to given value."""
+  identifier_not: String
+
+  """All values that are contained in given list."""
+  identifier_in: [String!]
+
+  """All values that are not contained in given list."""
+  identifier_not_in: [String!]
+
+  """All values less than the given value."""
+  identifier_lt: String
+
+  """All values less than or equal the given value."""
+  identifier_lte: String
+
+  """All values greater than the given value."""
+  identifier_gt: String
+
+  """All values greater than or equal the given value."""
+  identifier_gte: String
+
+  """All values containing the given string."""
+  identifier_contains: String
+
+  """All values not containing the given string."""
+  identifier_not_contains: String
+
+  """All values starting with the given string."""
+  identifier_starts_with: String
+
+  """All values not starting with the given string."""
+  identifier_not_starts_with: String
+
+  """All values ending with the given string."""
+  identifier_ends_with: String
+
+  """All values not ending with the given string."""
+  identifier_not_ends_with: String
+  setupHardware: SetupHardwareWhereInput
+  images_every: FileWhereInput
+  images_some: FileWhereInput
+  images_none: FileWhereInput
+}
+
+input SetupHardwareInstanceWhereUniqueInput {
+  id: ID
+}
+
+enum SetupHardwareOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  description_ASC
+  description_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type SetupHardwarePreviousValues {
+  id: ID!
+  name: String!
+  description: String
+}
+
+type SetupHardwareSubscriptionPayload {
+  mutation: MutationType!
+  node: SetupHardware
+  updatedFields: [String!]
+  previousValues: SetupHardwarePreviousValues
+}
+
+input SetupHardwareSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [SetupHardwareSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [SetupHardwareSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [SetupHardwareSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: SetupHardwareWhereInput
+}
+
+input SetupHardwareUpdateDataInput {
+  name: String
+  description: String
+  images: FileUpdateManyInput
+}
+
+input SetupHardwareUpdateInput {
+  name: String
+  description: String
+  images: FileUpdateManyInput
+}
+
+input SetupHardwareUpdateManyMutationInput {
+  name: String
+  description: String
+}
+
+input SetupHardwareUpdateOneRequiredInput {
+  create: SetupHardwareCreateInput
+  connect: SetupHardwareWhereUniqueInput
+  update: SetupHardwareUpdateDataInput
+  upsert: SetupHardwareUpsertNestedInput
+}
+
+input SetupHardwareUpsertNestedInput {
+  update: SetupHardwareUpdateDataInput!
+  create: SetupHardwareCreateInput!
+}
+
+input SetupHardwareWhereInput {
+  """Logical AND on all given filters."""
+  AND: [SetupHardwareWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [SetupHardwareWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [SetupHardwareWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  images_every: FileWhereInput
+  images_some: FileWhereInput
+  images_none: FileWhereInput
+}
+
+input SetupHardwareWhereUniqueInput {
+  id: ID
+}
+
+enum SetupOrderByInput {
+  id_ASC
+  id_DESC
+  name_ASC
+  name_DESC
+  description_ASC
+  description_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type SetupPreviousValues {
+  id: ID!
+  name: String!
+  description: String!
+}
+
+type SetupSubscriptionPayload {
+  mutation: MutationType!
+  node: Setup
+  updatedFields: [String!]
+  previousValues: SetupPreviousValues
+}
+
+input SetupSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [SetupSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [SetupSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [SetupSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: SetupWhereInput
+}
+
+input SetupUpdateDataInput {
+  name: String
+  description: String
+  images: FileUpdateManyInput
+  comments: CommentUpdateManyInput
+  setupHardware: SetupHardwareInstanceUpdateManyInput
+  instruments: InstrumentInstanceUpdateManyInput
+}
+
+input SetupUpdateInput {
+  name: String
+  description: String
+  images: FileUpdateManyInput
+  comments: CommentUpdateManyInput
+  setupHardware: SetupHardwareInstanceUpdateManyInput
+  instruments: InstrumentInstanceUpdateManyInput
+}
+
+input SetupUpdateManyMutationInput {
+  name: String
+  description: String
+}
+
+input SetupUpdateOneRequiredInput {
+  create: SetupCreateInput
+  connect: SetupWhereUniqueInput
+  update: SetupUpdateDataInput
+  upsert: SetupUpsertNestedInput
+}
+
+input SetupUpsertNestedInput {
+  update: SetupUpdateDataInput!
+  create: SetupCreateInput!
+}
+
+input SetupWhereInput {
+  """Logical AND on all given filters."""
+  AND: [SetupWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [SetupWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [SetupWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  description: String
+
+  """All values that are not equal to given value."""
+  description_not: String
+
+  """All values that are contained in given list."""
+  description_in: [String!]
+
+  """All values that are not contained in given list."""
+  description_not_in: [String!]
+
+  """All values less than the given value."""
+  description_lt: String
+
+  """All values less than or equal the given value."""
+  description_lte: String
+
+  """All values greater than the given value."""
+  description_gt: String
+
+  """All values greater than or equal the given value."""
+  description_gte: String
+
+  """All values containing the given string."""
+  description_contains: String
+
+  """All values not containing the given string."""
+  description_not_contains: String
+
+  """All values starting with the given string."""
+  description_starts_with: String
+
+  """All values not starting with the given string."""
+  description_not_starts_with: String
+
+  """All values ending with the given string."""
+  description_ends_with: String
+
+  """All values not ending with the given string."""
+  description_not_ends_with: String
+  images_every: FileWhereInput
+  images_some: FileWhereInput
+  images_none: FileWhereInput
+  comments_every: CommentWhereInput
+  comments_some: CommentWhereInput
+  comments_none: CommentWhereInput
+  setupHardware_every: SetupHardwareInstanceWhereInput
+  setupHardware_some: SetupHardwareInstanceWhereInput
+  setupHardware_none: SetupHardwareInstanceWhereInput
+  instruments_every: InstrumentInstanceWhereInput
+  instruments_some: InstrumentInstanceWhereInput
+  instruments_none: InstrumentInstanceWhereInput
+}
+
+input SetupWhereUniqueInput {
+  id: ID
+}
+
+type Subscription {
+  meta(where: MetaSubscriptionWhereInput): MetaSubscriptionPayload
+  project(where: ProjectSubscriptionWhereInput): ProjectSubscriptionPayload
+  dUT(where: DUTSubscriptionWhereInput): DUTSubscriptionPayload
+  characterization(where: CharacterizationSubscriptionWhereInput): CharacterizationSubscriptionPayload
+  projectVersion(where: ProjectVersionSubscriptionWhereInput): ProjectVersionSubscriptionPayload
+  setupHardware(where: SetupHardwareSubscriptionWhereInput): SetupHardwareSubscriptionPayload
+  measurement(where: MeasurementSubscriptionWhereInput): MeasurementSubscriptionPayload
+  setupHardwareInstance(where: SetupHardwareInstanceSubscriptionWhereInput): SetupHardwareInstanceSubscriptionPayload
+  measurementRun(where: MeasurementRunSubscriptionWhereInput): MeasurementRunSubscriptionPayload
+  setup(where: SetupSubscriptionWhereInput): SetupSubscriptionPayload
+  instrumentParameter(where: InstrumentParameterSubscriptionWhereInput): InstrumentParameterSubscriptionPayload
+  instrumentSubsystem(where: InstrumentSubsystemSubscriptionWhereInput): InstrumentSubsystemSubscriptionPayload
+  instrumentInstance(where: InstrumentInstanceSubscriptionWhereInput): InstrumentInstanceSubscriptionPayload
+  instrumentCommand(where: InstrumentCommandSubscriptionWhereInput): InstrumentCommandSubscriptionPayload
+  event(where: EventSubscriptionWhereInput): EventSubscriptionPayload
+  user(where: UserSubscriptionWhereInput): UserSubscriptionPayload
+  comment(where: CommentSubscriptionWhereInput): CommentSubscriptionPayload
+  instrument(where: InstrumentSubscriptionWhereInput): InstrumentSubscriptionPayload
+  file(where: FileSubscriptionWhereInput): FileSubscriptionPayload
+}
+
+type User implements Node {
+  id: ID!
+  email: String!
+  name: String!
+  abbreviation: String!
+  password: String!
+  images(where: FileWhereInput, orderBy: FileOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [File!]
+}
+
+"""A connection to a list of items."""
+type UserConnection {
+  """Information to aid in pagination."""
+  pageInfo: PageInfo!
+
+  """A list of edges."""
+  edges: [UserEdge]!
+  aggregate: AggregateUser!
+}
+
+input UserCreateInput {
+  email: String!
+  name: String!
+  abbreviation: String!
+  password: String!
+  images: FileCreateManyInput
+}
+
+input UserCreateManyInput {
+  create: [UserCreateInput!]
+  connect: [UserWhereUniqueInput!]
+}
+
+"""An edge in a connection."""
+type UserEdge {
+  """The item at the end of the edge."""
+  node: User!
+
+  """A cursor for use in pagination."""
+  cursor: String!
+}
+
+enum UserOrderByInput {
+  id_ASC
+  id_DESC
+  email_ASC
+  email_DESC
+  name_ASC
+  name_DESC
+  abbreviation_ASC
+  abbreviation_DESC
+  password_ASC
+  password_DESC
+  updatedAt_ASC
+  updatedAt_DESC
+  createdAt_ASC
+  createdAt_DESC
+}
+
+type UserPreviousValues {
+  id: ID!
+  email: String!
+  name: String!
+  abbreviation: String!
+  password: String!
+}
+
+input UserScalarWhereInput {
+  """Logical AND on all given filters."""
+  AND: [UserScalarWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [UserScalarWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [UserScalarWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  email: String
+
+  """All values that are not equal to given value."""
+  email_not: String
+
+  """All values that are contained in given list."""
+  email_in: [String!]
+
+  """All values that are not contained in given list."""
+  email_not_in: [String!]
+
+  """All values less than the given value."""
+  email_lt: String
+
+  """All values less than or equal the given value."""
+  email_lte: String
+
+  """All values greater than the given value."""
+  email_gt: String
+
+  """All values greater than or equal the given value."""
+  email_gte: String
+
+  """All values containing the given string."""
+  email_contains: String
+
+  """All values not containing the given string."""
+  email_not_contains: String
+
+  """All values starting with the given string."""
+  email_starts_with: String
+
+  """All values not starting with the given string."""
+  email_not_starts_with: String
+
+  """All values ending with the given string."""
+  email_ends_with: String
+
+  """All values not ending with the given string."""
+  email_not_ends_with: String
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  abbreviation: String
+
+  """All values that are not equal to given value."""
+  abbreviation_not: String
+
+  """All values that are contained in given list."""
+  abbreviation_in: [String!]
+
+  """All values that are not contained in given list."""
+  abbreviation_not_in: [String!]
+
+  """All values less than the given value."""
+  abbreviation_lt: String
+
+  """All values less than or equal the given value."""
+  abbreviation_lte: String
+
+  """All values greater than the given value."""
+  abbreviation_gt: String
+
+  """All values greater than or equal the given value."""
+  abbreviation_gte: String
+
+  """All values containing the given string."""
+  abbreviation_contains: String
+
+  """All values not containing the given string."""
+  abbreviation_not_contains: String
+
+  """All values starting with the given string."""
+  abbreviation_starts_with: String
+
+  """All values not starting with the given string."""
+  abbreviation_not_starts_with: String
+
+  """All values ending with the given string."""
+  abbreviation_ends_with: String
+
+  """All values not ending with the given string."""
+  abbreviation_not_ends_with: String
+  password: String
+
+  """All values that are not equal to given value."""
+  password_not: String
+
+  """All values that are contained in given list."""
+  password_in: [String!]
+
+  """All values that are not contained in given list."""
+  password_not_in: [String!]
+
+  """All values less than the given value."""
+  password_lt: String
+
+  """All values less than or equal the given value."""
+  password_lte: String
+
+  """All values greater than the given value."""
+  password_gt: String
+
+  """All values greater than or equal the given value."""
+  password_gte: String
+
+  """All values containing the given string."""
+  password_contains: String
+
+  """All values not containing the given string."""
+  password_not_contains: String
+
+  """All values starting with the given string."""
+  password_starts_with: String
+
+  """All values not starting with the given string."""
+  password_not_starts_with: String
+
+  """All values ending with the given string."""
+  password_ends_with: String
+
+  """All values not ending with the given string."""
+  password_not_ends_with: String
+}
+
+type UserSubscriptionPayload {
+  mutation: MutationType!
+  node: User
+  updatedFields: [String!]
+  previousValues: UserPreviousValues
+}
+
+input UserSubscriptionWhereInput {
+  """Logical AND on all given filters."""
+  AND: [UserSubscriptionWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [UserSubscriptionWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [UserSubscriptionWhereInput!]
+
+  """The subscription event gets dispatched when it's listed in mutation_in"""
+  mutation_in: [MutationType!]
+
+  """
+  The subscription event gets only dispatched when one of the updated fields names is included in this list
+  """
+  updatedFields_contains: String
+
+  """
+  The subscription event gets only dispatched when all of the field names included in this list have been updated
+  """
+  updatedFields_contains_every: [String!]
+
+  """
+  The subscription event gets only dispatched when some of the field names included in this list have been updated
+  """
+  updatedFields_contains_some: [String!]
+  node: UserWhereInput
+}
+
+input UserUpdateDataInput {
+  email: String
+  name: String
+  abbreviation: String
+  password: String
+  images: FileUpdateManyInput
+}
+
+input UserUpdateInput {
+  email: String
+  name: String
+  abbreviation: String
+  password: String
+  images: FileUpdateManyInput
+}
+
+input UserUpdateManyDataInput {
+  email: String
+  name: String
+  abbreviation: String
+  password: String
+}
+
+input UserUpdateManyInput {
+  create: [UserCreateInput!]
+  connect: [UserWhereUniqueInput!]
+  set: [UserWhereUniqueInput!]
+  disconnect: [UserWhereUniqueInput!]
+  delete: [UserWhereUniqueInput!]
+  update: [UserUpdateWithWhereUniqueNestedInput!]
+  updateMany: [UserUpdateManyWithWhereNestedInput!]
+  deleteMany: [UserScalarWhereInput!]
+  upsert: [UserUpsertWithWhereUniqueNestedInput!]
+}
+
+input UserUpdateManyMutationInput {
+  email: String
+  name: String
+  abbreviation: String
+  password: String
+}
+
+input UserUpdateManyWithWhereNestedInput {
+  where: UserScalarWhereInput!
+  data: UserUpdateManyDataInput!
+}
+
+input UserUpdateWithWhereUniqueNestedInput {
+  where: UserWhereUniqueInput!
+  data: UserUpdateDataInput!
+}
+
+input UserUpsertWithWhereUniqueNestedInput {
+  where: UserWhereUniqueInput!
+  update: UserUpdateDataInput!
+  create: UserCreateInput!
+}
+
+input UserWhereInput {
+  """Logical AND on all given filters."""
+  AND: [UserWhereInput!]
+
+  """Logical OR on all given filters."""
+  OR: [UserWhereInput!]
+
+  """Logical NOT on all given filters combined by AND."""
+  NOT: [UserWhereInput!]
+  id: ID
+
+  """All values that are not equal to given value."""
+  id_not: ID
+
+  """All values that are contained in given list."""
+  id_in: [ID!]
+
+  """All values that are not contained in given list."""
+  id_not_in: [ID!]
+
+  """All values less than the given value."""
+  id_lt: ID
+
+  """All values less than or equal the given value."""
+  id_lte: ID
+
+  """All values greater than the given value."""
+  id_gt: ID
+
+  """All values greater than or equal the given value."""
+  id_gte: ID
+
+  """All values containing the given string."""
+  id_contains: ID
+
+  """All values not containing the given string."""
+  id_not_contains: ID
+
+  """All values starting with the given string."""
+  id_starts_with: ID
+
+  """All values not starting with the given string."""
+  id_not_starts_with: ID
+
+  """All values ending with the given string."""
+  id_ends_with: ID
+
+  """All values not ending with the given string."""
+  id_not_ends_with: ID
+  email: String
+
+  """All values that are not equal to given value."""
+  email_not: String
+
+  """All values that are contained in given list."""
+  email_in: [String!]
+
+  """All values that are not contained in given list."""
+  email_not_in: [String!]
+
+  """All values less than the given value."""
+  email_lt: String
+
+  """All values less than or equal the given value."""
+  email_lte: String
+
+  """All values greater than the given value."""
+  email_gt: String
+
+  """All values greater than or equal the given value."""
+  email_gte: String
+
+  """All values containing the given string."""
+  email_contains: String
+
+  """All values not containing the given string."""
+  email_not_contains: String
+
+  """All values starting with the given string."""
+  email_starts_with: String
+
+  """All values not starting with the given string."""
+  email_not_starts_with: String
+
+  """All values ending with the given string."""
+  email_ends_with: String
+
+  """All values not ending with the given string."""
+  email_not_ends_with: String
+  name: String
+
+  """All values that are not equal to given value."""
+  name_not: String
+
+  """All values that are contained in given list."""
+  name_in: [String!]
+
+  """All values that are not contained in given list."""
+  name_not_in: [String!]
+
+  """All values less than the given value."""
+  name_lt: String
+
+  """All values less than or equal the given value."""
+  name_lte: String
+
+  """All values greater than the given value."""
+  name_gt: String
+
+  """All values greater than or equal the given value."""
+  name_gte: String
+
+  """All values containing the given string."""
+  name_contains: String
+
+  """All values not containing the given string."""
+  name_not_contains: String
+
+  """All values starting with the given string."""
+  name_starts_with: String
+
+  """All values not starting with the given string."""
+  name_not_starts_with: String
+
+  """All values ending with the given string."""
+  name_ends_with: String
+
+  """All values not ending with the given string."""
+  name_not_ends_with: String
+  abbreviation: String
+
+  """All values that are not equal to given value."""
+  abbreviation_not: String
+
+  """All values that are contained in given list."""
+  abbreviation_in: [String!]
+
+  """All values that are not contained in given list."""
+  abbreviation_not_in: [String!]
+
+  """All values less than the given value."""
+  abbreviation_lt: String
+
+  """All values less than or equal the given value."""
+  abbreviation_lte: String
+
+  """All values greater than the given value."""
+  abbreviation_gt: String
+
+  """All values greater than or equal the given value."""
+  abbreviation_gte: String
+
+  """All values containing the given string."""
+  abbreviation_contains: String
+
+  """All values not containing the given string."""
+  abbreviation_not_contains: String
+
+  """All values starting with the given string."""
+  abbreviation_starts_with: String
+
+  """All values not starting with the given string."""
+  abbreviation_not_starts_with: String
+
+  """All values ending with the given string."""
+  abbreviation_ends_with: String
+
+  """All values not ending with the given string."""
+  abbreviation_not_ends_with: String
+  password: String
+
+  """All values that are not equal to given value."""
+  password_not: String
+
+  """All values that are contained in given list."""
+  password_in: [String!]
+
+  """All values that are not contained in given list."""
+  password_not_in: [String!]
+
+  """All values less than the given value."""
+  password_lt: String
+
+  """All values less than or equal the given value."""
+  password_lte: String
+
+  """All values greater than the given value."""
+  password_gt: String
+
+  """All values greater than or equal the given value."""
+  password_gte: String
+
+  """All values containing the given string."""
+  password_contains: String
+
+  """All values not containing the given string."""
+  password_not_contains: String
+
+  """All values starting with the given string."""
+  password_starts_with: String
+
+  """All values not starting with the given string."""
+  password_not_starts_with: String
+
+  """All values ending with the given string."""
+  password_ends_with: String
+
+  """All values not ending with the given string."""
+  password_not_ends_with: String
+  images_every: FileWhereInput
+  images_some: FileWhereInput
+  images_none: FileWhereInput
+}
+
+input UserWhereUniqueInput {
+  id: ID
+  email: String
+}

+ 1 - 1
backend/datamodel.prisma

@@ -105,7 +105,7 @@ type InstrumentInstance {
   id: ID! @unique
   instrument: Instrument!
   identifier: String!
-  interface: [String]!
+  interface: String!
   label: String
   location: String
 }

Datei-Diff unterdrückt, da er zu groß ist
+ 1020 - 0
backend/package-lock.json


+ 2 - 0
backend/package.json

@@ -16,6 +16,7 @@
     "lodash": "^4.17.11",
     "mkdirp": "^0.5.1",
     "multer": "^1.4.1",
+    "pdf-extract": "^1.0.11",
     "prisma": "^1.30.1",
     "prisma-binding": "^2.3.10",
     "prisma-client-lib": "^1.30.1",
@@ -24,6 +25,7 @@
     "standard": "^12.0.1"
   },
   "devDependencies": {
+    "graphql-cli": "^3.0.11",
     "nodemon": "^1.18.11"
   },
   "scripts": {

+ 29 - 0
backend/pdfScan.js

@@ -0,0 +1,29 @@
+const pdfExtract = require('pdf-extract')
+const path = '/home/tomi/Downloads/2230G-900-01A_Jun_2018_User.pdf'
+const options = {
+  type: 'text' // or 'ocr'
+}
+
+function getSCPICommands (pages) {
+  const scpiCommon = /(\*\w+\??)/g
+  const scpi = /((?:\*\w+|(?:\[?\w+\]?)(?=:\w+)\]?)(?:\[?:\w+\]?)*\??)(?:\s+(<?\w+>?)(?:[,|]\s*(<?\w+>?))*)?/g
+
+  pages.map((page, pageIndex) => {
+    const lines = page.split('\n')
+    lines.map((line, lineIndex) => {
+      const matches = line.match(scpi)
+      if (matches) console.log(pageIndex, lineIndex, matches)
+    })
+  })
+}
+
+const processor = pdfExtract(path, options, error => {
+  if (error) return error
+})
+processor.on('complete', data => {
+  console.log(data.text_pages)
+  getSCPICommands(data.text_pages)
+})
+processor.on('error', error => {
+  console.error(error)
+})

+ 1 - 0
backend/prisma.yml

@@ -4,6 +4,7 @@ datamodel: datamodel.prisma
 hooks:
   post-deploy:
     - prisma generate
+    - graphql get-schema -p prisma
 generate:
   - generator: javascript-client
     output: ./database/generated/prisma-client

+ 6 - 28
backend/schema.graphql

@@ -1,39 +1,17 @@
-scalar Upload
+# import * from './database/generated/prisma.graphql'
 
 type Query {
-  projects: [Project]!
+  projects(where: ProjectWhereInput, orderBy: ProjectOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Project]!
+  projectVersions(where: ProjectVersionWhereInput, orderBy: ProjectVersionOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [ProjectVersion]!
   uploads: [File]
   me: User!
 }
 
 type Mutation {
-  uploadFile(file: Upload!): File!
+  createCharacterization(name: String!, projectVersion: ID!): Characterization!
   createUser(name: String!, email: String!, abbreviation: String!, password: String!): User!
+  createProject(name: String!, abbreviation: String!, description: String): Project!
+  createProjectVersion(name: String!, date: String!, project: ID!, changes: [String]): ProjectVersion!
   userLogin(email: String!, password: String!): User!
   userLogout: String!
 }
-
-type User {
-  id: ID! 
-  email: String!
-  name: String!
-  abbreviation: String!
-  password: String!
-  images: [File]!
-}
-
-type File {
-  id: ID! 
-  path: String!
-  filename: String!
-  mimetype: String!
-  size: Int!
-}
-
-type Project {
-  id: ID!
-  name: String!
-  abbreviation: String!
-  description: String
-  images: [File]!
-}

+ 38 - 6
backend/src/resolvers.js

@@ -4,6 +4,7 @@ const jwt = require('jsonwebtoken')
 
 const Query = {
   projects: forwardTo('db'),
+  projectVersions: forwardTo('db'),
   me: (parent, args, context, info) => {
     if (!context.request.userId) throw new Error('Not logged in.')
     return context.db.query.user({ where: { id: context.request.userId } }, info)
@@ -21,12 +22,8 @@ const Mutation = {
         email,
         password
       }
-    },
-    info
-    )
-    console.log(user)
+    }, info)
     const token = jwt.sign({ userId: user.id }, process.env.APP_SECRET)
-    console.log(token)
     context.response.cookie('token', token, {
       httpOnly: true,
       maxAge: 7 * 24 * 3600 * 1000
@@ -43,12 +40,47 @@ const Mutation = {
     context.response.cookie('token', token, {
       httpOnly: true,
       maxAge: 7 * 24 * 3600 * 1000
-    })
+    }, info)
     return user
   },
   userLogout: async (parent, args, context, info) => {
     context.response.clearCookie('token')
     return 'Logged out.'
+  },
+  createCharacterization: async (parent, args, context, info) => {
+    const characterization = await context.db.mutation.createCharacterization({
+      data: {
+        name: args.name,
+        projectVersion: {
+          connect: { id: args.projectVersion }
+        }
+      }
+    }, info)
+    return characterization
+  },
+  createProject: async (parent, args, context, info) => {
+    const project = await context.db.mutation.createProject({
+      data: { ...args }
+    }, info)
+    return project
+  },
+  createProjectVersion: async (parent, args, context, info) => {
+    console.log(args)
+    const projectVersion = await context.db.mutation.createProjectVersion({
+      data: {
+        ...args,
+        date: new Date(args.date).toISOString(),
+        project: {
+          connect: {
+            id: args.project
+          }
+        },
+        changes: {
+          set: args.changes
+        }
+      }
+    }, info)
+    return projectVersion
   }
 }
 

+ 107 - 0
frontend/components/CharacterizationForm.js

@@ -0,0 +1,107 @@
+import { Query, Mutation } from 'react-apollo';
+import gql from 'graphql-tag'
+import { QUERY_PROJECTS } from './ProjectList'
+
+const ADD_CHARACTERIZATION = gql`
+  mutation ADD_CHARACTERIZATION($name: String!, $projectVersion: ID!) {
+    createCharacterization(name: $name, projectVersion: $projectVersion) {
+      id
+      name
+      projectVersion {
+        id
+        name
+      }
+      measurementRuns {
+        id
+        name
+      }
+    }
+  }
+`
+
+const QUERY_PROJECT_VERSIONS = gql`
+  query QUERY_PROJECT_VERSIONS($projectId: ID!) {
+    projectVersions(where: {project: {id: $projectId}}) {
+      id
+      name
+    }
+  }
+`
+
+class CharacterziationForm extends React.Component {
+  state = {
+    id: null,
+    name: '',
+    project: null,
+    projectVersion: null
+  }
+
+  toState = event => {
+    this.setState({ [event.target.name]: event.target.value })
+  }
+
+  render() {
+    return (
+      <Mutation mutation={ADD_CHARACTERIZATION} variables={this.state}>
+        {(addCharacterization, { data, error, loading }) => (
+          <form onSubmit={async event => {
+            event.preventDefault()
+            const { data } = await addCharacterization()
+            const { createCharacterization } = data
+            this.setState({ id: createCharacterization.id })
+          }}>
+            <fieldset>
+              <label htmlFor="name">Characterization name</label>
+              <input type="text" name="name" id="name"
+                placeholder="Characterization name"
+                value={this.state.name}
+                onChange={this.toState}
+              />
+              <Query query={QUERY_PROJECTS}>
+                {({ data, error, loading }) => {
+                  if (error) return (<p>Error loading project: ${error.message}</p>)
+                  if (loading) return (<p>Loading data...</p>)
+                  if (!data || !data.projects.length) return (<p>No project found.</p>)
+
+                  const { projects } = data
+                  if (!this.state.project && projects.length) this.setState({ project: projects[0].id })
+                  return (
+                    <>
+                      <label htmlFor="project">Project</label>
+                      <select name="project" id="project" onChange={this.toState}>
+                        {data.projects.map(project => <option key={project.id} value={project.id}>{project.name}</option>)}
+                      </select>
+                      <Query query={QUERY_PROJECT_VERSIONS} variables={{ projectId: this.state.project }}>
+                        {({ data, error, loading }) => {
+                          if (error) return (<p>Error loading project version: ${error.message}</p>)
+                          if (loading) return (<p>Loading data...</p>)
+                          if (!data || !data.projectVersions.length) return (<p>No project version found.</p>)
+
+                          const { projectVersions } = data
+                          if (!this.state.projectVersion) this.setState({ projectVersion: projectVersions[0].id })
+                          return (
+                            <>
+                              <label htmlFor="projectVersion"></label>
+                              <select name="projectVersion" id="projectVersion" onChange={this.toState}>
+                                {data.projectVersions.map(projectVersion =>
+                                  <option key={projectVersion.id} value={projectVersion.id}>{projectVersion.name}</option>
+                                )}
+                              </select>
+                            </>
+                          )
+                        }}
+                      </Query>
+                    </>
+                  )
+                }}
+              </Query>
+              <button type="submit">{data ? "Save" : "Add"}</button>
+            </fieldset>
+          </form>
+        )}
+      </Mutation>
+    )
+  }
+}
+
+export default CharacterziationForm

+ 52 - 0
frontend/components/Form.js

@@ -0,0 +1,52 @@
+import styled from 'styled-components'
+
+const StyledForm = styled.form`
+  display: grid;
+  grid-template-columns: 1fr 20px 2fr;
+
+  fieldset {
+  }
+
+  fieldset::after {
+    padding: 30px;
+    margin-bottom: 30px;
+  }
+
+  label {
+    grid-column: 1;
+  }
+
+  input  {
+    grid-column: 2/4;
+  }
+
+  input:radio {
+    grid-column: 2;
+  }
+
+  button:submit {
+    grid-column: 1/-1;
+  }
+`
+
+const DemoForm = props => (
+  <StyledForm>
+    <fieldset title="User">
+      <label htmlFor="name">Name</label>
+      <input type="text" name="name" id="name" />
+      <label htmlFor="email">Email</label>
+      <input type="email" name="email" id="email" />
+      <label htmlFor="password">Name</label>
+      <input type="password" name="password" id="password" />
+    </fieldset>
+    <fieldset>
+      <label htmlFor="search">Search</label>
+      <input type="search" name="search" id="search" />
+
+    </fieldset>
+    <button type="submit">Submit</button>
+  </StyledForm>
+)
+
+export default DemoForm
+export { StyledForm }

+ 7 - 4
frontend/components/Gallery.js

@@ -1,17 +1,20 @@
 import styled from 'styled-components'
 
 const GalleryStyle = styled.div`
-  border: 1px solid grey;
+  border: 1px solid ${props => props.theme.lightblue};
+  margin-bottom: 1.5em;
 
   #header {
-    background: lightgray;
+    padding: 0 0.3em;
+    background-color: ${props => props.theme.lighterblue};
+    color: ${props => props.theme.darkblue};
     cursor: pointer
   }
 `
 
 class Gallery extends React.Component {
   state = {
-    galleryOpen: false
+    galleryOpen: !!this.props.galleryOpen
   }
 
   openGallery = event => {
@@ -23,7 +26,7 @@ class Gallery extends React.Component {
     return (
       <GalleryStyle>
         <div onClick={this.openGallery} id="header">
-          {items.length} {title} available (click to {this.state.galleryOpen ? 'hide' : 'see'})
+          {this.state.galleryOpen ? <span>&#8259;</span> : <span>&#8227;</span>} {items.length} {title} available (click to {this.state.galleryOpen ? 'hide' : 'see'})
         </div>
         <div style={{ display: this.state.galleryOpen ? 'block' : 'none' }} id="gallery">
           {items}

+ 68 - 22
frontend/components/Header.js

@@ -13,35 +13,81 @@ Router.onRouteChangeError = () => {
   NProgress.done()
 }
 
-const StyledNav = styled.div`
+const StyledHeader = styled.header`
 display: grid;
+grid-template-columns: 250px 1fr;
 grid-auto-flow: column;
-align-content: end;
+border-bottom: 1px solid ${props => props.theme.darkerblue};
+box-shadow: 0 10px 5px -5px rgba(0,0,0,0.09);
+
+#logo {
+  font-family: 'roboto_black';
+  margin: 0;
+  padding: 0.4em 0;
+  font-size: 180%;
+  line-height: 1;
+  text-align: center;
+}
+
+#logo img {
+  vertical-align: middle;
+  max-width: 50px;
+  max-height: 50px;
+}
+
+#Auto {
+  color: #4482c3;
+}
+
+#Mate {
+  color: #285680;
+}
+
+nav {
+  box-align: end;
+  height: 100%;
+}
+
+nav a {
+  display: flex;
+  justify-self: end;
+  padding: 0 1em;
+}
 `
 
 const Header = props => {
   const { user } = props
   return (
-    <StyledNav>
-      <Link href='/'>
-        <a>Home</a>
-      </Link>
-      <Link href='/interfaces'>
-        <a>Interfaces</a>
-      </Link>
-      <Link href='/characterization'>
-        <a>Characterization</a>
-      </Link>
-      <Link href='/system'>
-        <a>System</a>
-      </Link>
-      <Link href='/projects'>
-        <a>Projects</a>
-      </Link>
-      <Link href='/user'>
-        <a>{user ? user.name : 'User'}</a>
-      </Link>
-    </StyledNav>
+    <StyledHeader>
+      <div id='logo'>
+        <h1>
+          <a href='/'>
+            <img src='/static/configuration.svg' alt='AutoMate' />
+            <span id='Auto'>&nbsp;Auto</span><span id='Mate'>Mate</span>
+          </a>
+        </h1>
+      </div>
+      <nav>
+        <Link href='/'>
+          <a>Home</a>
+        </Link>
+        <Link href='/interfaces'>
+          <a>Interfaces</a>
+        </Link>
+        <Link href='/characterization'>
+          <a>Characterization</a>
+        </Link>
+        <Link href='/system'>
+          <a>System</a>
+        </Link>
+        <Link href='/projects'>
+          <a>Projects</a>
+        </Link>
+        <Link href='/user'>
+          <a>{user ? user.name : 'User'}</a>
+        </Link>
+      </nav>
+    </StyledHeader>
   )
 }
 

+ 78 - 0
frontend/components/Instrument.js

@@ -0,0 +1,78 @@
+import gql from 'graphql-tag'
+import { Query, Mutation } from 'react-apollo'
+import InstrumentSubsystem from './InstrumentSubsystem'
+
+const CREATE_INSTRUMENT = gql`
+  mutation CREATE_INSTRUMENT($name: String!, $description: String!, $interfaces: [String]!) {
+    createInstrument(name: $name, description: $description, interfaces: $interfaces) {
+      id
+    }
+  }
+`
+
+class Instrument extends React.Component {
+  state = {
+    id: this.props.instrument ? this.props.instrument.id : null,
+    name: '',
+    description: '',
+    documents: [],
+    interfaces: [],
+    subsystems: []
+  }
+
+  toState = event => {
+    this.setState({ [event.target.name]: event.target.value })
+  }
+
+  addComment = event => {
+    event.preventDefault()
+    const newState = { ...this.state }
+    newState.changes.push(this.state.change)
+    newState.change = ''
+    this.setState(newState)
+  }
+
+  render() {
+    return (
+      <Mutation mutation={CREATE_PROJECT_VERSION} variables={this.state}>
+        {(createProjectVersion, { data, error, loading }) => (
+          <form onSubmit={async event => {
+            event.preventDefault()
+            const { data } = await createProjectVersion()
+            this.state.id = data.createProjectVersion.id
+          }}>
+            {!this.props.title && <h1>Project Version</h1>}
+            <fieldset id='project-generic'>
+              <label htmlFor='name'>Project name</label>
+              <input type='text' name='name' id='name' placeholder='Project version name' value={this.state.name} onChange={this.toState} />
+              <label htmlFor='description'>Date</label>
+              <input type='text' name='description' id='description' placeholder='Project description' value={this.state.description} onChange={this.toState} />
+              {this.props.project || (
+                <Query query={QUERY_PROJECTS}>
+                  {({ data, error, loading }) => {
+                    if (loading) return <p>Loading projects...</p>
+                    if (error) return <p>Error: {error.message}</p>
+                    if (!data || !data.projects.length) return <p>No projects found.</p>
+                    if (!this.state.project) this.setState({ project: data.projects[0].id })
+                    return (
+                      <label htmlFor="version">
+                        <select name="version" id="version">onChange={this.toState}>
+                        {data.projects.map(project =>
+                          <option key={project.id} value={project.id}>{project.name}</option>)
+                          }
+                        </select>
+                      </label>
+                    )
+                  }}
+                </Query>
+              )}
+            </fieldset>
+            <button type='submit'>Save</button>
+          </form>
+        )}
+      </Mutation>
+    )
+  }
+}
+
+export default Instrument

+ 82 - 0
frontend/components/InstrumentCommand.js

@@ -0,0 +1,82 @@
+import gql from 'graphql-tag'
+import { Query, Mutation } from 'react-apollo'
+
+const CREATE_INSTRUMENT_SUBSYSTEM = gql`
+  mutation CREATE_INSTRUMENT_SUBSYSTEM($name: String!, $description: String!, $interfaces: [String]!) {
+    createInstrument(name: $name, description: $description, interfaces: $interfaces) {
+      id
+    }
+  }
+`
+
+class InstrumentCommand extends React.Component {
+  state = {
+    id: this.props.instrumentCommand ? this.props.instrumentCommand.id : null,
+    tag: '',
+    name: '',
+    description: '',
+    instrument: null,
+    readString: '',
+    writeString: '',
+    parameters: []
+  }
+
+  toState = event => {
+    this.setState({ [event.target.name]: event.target.value })
+  }
+
+  addComment = event => {
+    event.preventDefault()
+    const newState = { ...this.state }
+    newState.changes.push(this.state.change)
+    newState.change = ''
+    this.setState(newState)
+  }
+
+  render() {
+    return (
+      <Mutation mutation={CREATE_PROJECT_VERSION} variables={this.state}>
+        {(createProjectVersion, { data, error, loading }) => (
+          <form onSubmit={async event => {
+            event.preventDefault()
+            const { data } = await createProjectVersion()
+            this.state.id = data.createProjectVersion.id
+          }}>
+            {!this.props.title && <h1>Project Version</h1>}
+            <fieldset id='project-generic'>
+              <label htmlFor='name'>Project name</label>
+              <input type='text' name='name' id='name' placeholder='Project version name' value={this.state.name} onChange={this.toState} />
+              <label htmlFor='date'>Date</label>
+              <input type='date' name='date' id='date' placeholder='Project date' value={this.state.date} onChange={this.toState} />
+              <label htmlFor='change'>Comments</label>
+              <input type='text' name='change' id='change' placeholder='Project change' value={this.state.change} onChange={this.toState} /><button onClick={this.addComment}>Add</button>
+              {this.state.changes.map((change, index) => <p key={index}>{change}</p>)}
+              {this.props.project || (
+                <Query query={QUERY_PROJECTS}>
+                  {({ data, error, loading }) => {
+                    if (loading) return <p>Loading projects...</p>
+                    if (error) return <p>Error: {error.message}</p>
+                    if (!data || !data.projects.length) return <p>No projects found.</p>
+                    if (!this.state.project) this.setState({ project: data.projects[0].id })
+                    return (
+                      <label htmlFor="version">
+                        <select name="version" id="version">onChange={this.toState}>
+                        {data.projects.map(project =>
+                          <option key={project.id} value={project.id}>{project.name}</option>)
+                          }
+                        </select>
+                      </label>
+                    )
+                  }}
+                </Query>
+              )}
+            </fieldset>
+            <button type='submit'>Save</button>
+          </form>
+        )}
+      </Mutation>
+    )
+  }
+}
+
+export default InstrumentCommand

+ 80 - 0
frontend/components/InstrumentInstance.js

@@ -0,0 +1,80 @@
+import gql from 'graphql-tag'
+import { Query, Mutation } from 'react-apollo'
+
+const CREATE_INSTRUMENT_INSTANCE = gql`
+  mutation CREATE_INSTRUMENT_INSTANCE($name: String!, $description: String!, $interfaces: [String]!) {
+    createInstrument(name: $name, description: $description, interfaces: $interfaces) {
+      id
+    }
+  }
+`
+
+class InstrumentInstance extends React.Component {
+  state = {
+    id: this.props.instrumentInstance ? this.props.instrumentInstance.id : null,
+    instrument: null,
+    identifier: '',
+    interface: '',
+    label: '',
+    location: ''
+  }
+
+  toState = event => {
+    this.setState({ [event.target.name]: event.target.value })
+  }
+
+  addComment = event => {
+    event.preventDefault()
+    const newState = { ...this.state }
+    newState.changes.push(this.state.change)
+    newState.change = ''
+    this.setState(newState)
+  }
+
+  render() {
+    return (
+      <Mutation mutation={CREATE_PROJECT_VERSION} variables={this.state}>
+        {(createProjectVersion, { data, error, loading }) => (
+          <form onSubmit={async event => {
+            event.preventDefault()
+            const { data } = await createProjectVersion()
+            this.state.id = data.createProjectVersion.id
+          }}>
+            {!this.props.title && <h1>Project Version</h1>}
+            <fieldset id='project-generic'>
+              <label htmlFor='name'>Project name</label>
+              <input type='text' name='name' id='name' placeholder='Project version name' value={this.state.name} onChange={this.toState} />
+              <label htmlFor='date'>Date</label>
+              <input type='date' name='date' id='date' placeholder='Project date' value={this.state.date} onChange={this.toState} />
+              <label htmlFor='change'>Comments</label>
+              <input type='text' name='change' id='change' placeholder='Project change' value={this.state.change} onChange={this.toState} /><button onClick={this.addComment}>Add</button>
+              {this.state.changes.map((change, index) => <p key={index}>{change}</p>)}
+              {this.props.project || (
+                <Query query={QUERY_PROJECTS}>
+                  {({ data, error, loading }) => {
+                    if (loading) return <p>Loading projects...</p>
+                    if (error) return <p>Error: {error.message}</p>
+                    if (!data || !data.projects.length) return <p>No projects found.</p>
+                    if (!this.state.project) this.setState({ project: data.projects[0].id })
+                    return (
+                      <label htmlFor="version">
+                        <select name="version" id="version">onChange={this.toState}>
+                        {data.projects.map(project =>
+                          <option key={project.id} value={project.id}>{project.name}</option>)
+                          }
+                        </select>
+                      </label>
+                    )
+                  }}
+                </Query>
+              )}
+            </fieldset>
+            <button type='submit'>Save</button>
+          </form>
+        )}
+      </Mutation>
+    )
+  }
+}
+
+export default InstrumentInstance

+ 79 - 0
frontend/components/InstrumentParameter.js

@@ -0,0 +1,79 @@
+import gql from 'graphql-tag'
+import { Query, Mutation } from 'react-apollo'
+
+const CREATE_INSTRUMENT_PARAMETER = gql`
+  mutation CREATE_INSTRUMENT_PARAMETER($name: String!, $description: String!, $interfaces: [String]!) {
+    createInstrument(name: $name, description: $description, interfaces: $interfaces) {
+      id
+    }
+  }
+`
+
+class InstrumentParameter extends React.Component {
+  state = {
+    id: this.props.instrumentParameter ? this.props.instrumentParameter.id : null,
+    tag: '',
+    name: '',
+    description: '',
+    values: []
+  }
+
+  toState = event => {
+    this.setState({ [event.target.name]: event.target.value })
+  }
+
+  addComment = event => {
+    event.preventDefault()
+    const newState = { ...this.state }
+    newState.changes.push(this.state.change)
+    newState.change = ''
+    this.setState(newState)
+  }
+
+  render() {
+    return (
+      <Mutation mutation={CREATE_PROJECT_VERSION} variables={this.state}>
+        {(createProjectVersion, { data, error, loading }) => (
+          <form onSubmit={async event => {
+            event.preventDefault()
+            const { data } = await createProjectVersion()
+            this.state.id = data.createProjectVersion.id
+          }}>
+            {!this.props.title && <h1>Project Version</h1>}
+            <fieldset id='project-generic'>
+              <label htmlFor='name'>Project name</label>
+              <input type='text' name='name' id='name' placeholder='Project version name' value={this.state.name} onChange={this.toState} />
+              <label htmlFor='date'>Date</label>
+              <input type='date' name='date' id='date' placeholder='Project date' value={this.state.date} onChange={this.toState} />
+              <label htmlFor='change'>Comments</label>
+              <input type='text' name='change' id='change' placeholder='Project change' value={this.state.change} onChange={this.toState} /><button onClick={this.addComment}>Add</button>
+              {this.state.changes.map((change, index) => <p key={index}>{change}</p>)}
+              {this.props.project || (
+                <Query query={QUERY_PROJECTS}>
+                  {({ data, error, loading }) => {
+                    if (loading) return <p>Loading projects...</p>
+                    if (error) return <p>Error: {error.message}</p>
+                    if (!data || !data.projects.length) return <p>No projects found.</p>
+                    if (!this.state.project) this.setState({ project: data.projects[0].id })
+                    return (
+                      <label htmlFor="version">
+                        <select name="version" id="version">onChange={this.toState}>
+                        {data.projects.map(project =>
+                          <option key={project.id} value={project.id}>{project.name}</option>)
+                          }
+                        </select>
+                      </label>
+                    )
+                  }}
+                </Query>
+              )}
+            </fieldset>
+            <button type='submit'>Save</button>
+          </form>
+        )}
+      </Mutation>
+    )
+  }
+}
+
+export default InstrumentParameter

+ 80 - 0
frontend/components/InstrumentSubsystem.js

@@ -0,0 +1,80 @@
+import gql from 'graphql-tag'
+import { Query, Mutation } from 'react-apollo'
+
+const CREATE_INSTRUMENT_SUBSYSTEM = gql`
+  mutation CREATE_INSTRUMENT_SUBSYSTEM($name: String!, $description: String!, $interfaces: [String]!) {
+    createInstrument(name: $name, description: $description, interfaces: $interfaces) {
+      id
+    }
+  }
+`
+
+class InstrumentSubsystem extends React.Component {
+  state = {
+    id: this.props.instrumentSubsystem ? this.props.instrumentSubsystem.id : null,
+    name: '',
+    description: '',
+    commands: [],
+    parameters: [],
+    subsystems: []
+  }
+
+  toState = event => {
+    this.setState({ [event.target.name]: event.target.value })
+  }
+
+  addComment = event => {
+    event.preventDefault()
+    const newState = { ...this.state }
+    newState.changes.push(this.state.change)
+    newState.change = ''
+    this.setState(newState)
+  }
+
+  render() {
+    return (
+      <Mutation mutation={CREATE_PROJECT_VERSION} variables={this.state}>
+        {(createProjectVersion, { data, error, loading }) => (
+          <form onSubmit={async event => {
+            event.preventDefault()
+            const { data } = await createProjectVersion()
+            this.state.id = data.createProjectVersion.id
+          }}>
+            {!this.props.title && <h1>Project Version</h1>}
+            <fieldset id='project-generic'>
+              <label htmlFor='name'>Project name</label>
+              <input type='text' name='name' id='name' placeholder='Project version name' value={this.state.name} onChange={this.toState} />
+              <label htmlFor='date'>Date</label>
+              <input type='date' name='date' id='date' placeholder='Project date' value={this.state.date} onChange={this.toState} />
+              <label htmlFor='change'>Comments</label>
+              <input type='text' name='change' id='change' placeholder='Project change' value={this.state.change} onChange={this.toState} /><button onClick={this.addComment}>Add</button>
+              {this.state.changes.map((change, index) => <p key={index}>{change}</p>)}
+              {this.props.project || (
+                <Query query={QUERY_PROJECTS}>
+                  {({ data, error, loading }) => {
+                    if (loading) return <p>Loading projects...</p>
+                    if (error) return <p>Error: {error.message}</p>
+                    if (!data || !data.projects.length) return <p>No projects found.</p>
+                    if (!this.state.project) this.setState({ project: data.projects[0].id })
+                    return (
+                      <label htmlFor="version">
+                        <select name="version" id="version">onChange={this.toState}>
+                        {data.projects.map(project =>
+                          <option key={project.id} value={project.id}>{project.name}</option>)
+                          }
+                        </select>
+                      </label>
+                    )
+                  }}
+                </Query>
+              )}
+            </fieldset>
+            <button type='submit'>Save</button>
+          </form>
+        )}
+      </Mutation>
+    )
+  }
+}
+
+export default InstrumentSubsystem

+ 2 - 1
frontend/components/Meta.js

@@ -4,8 +4,9 @@ const Meta = () => (
   <Head>
     <meta name="viewport" content="width=device-width, initial-scale=1" />
     <meta charSet="utf-8" />
-    <link rel="shortcut icon" href="/static/favicon.png" />
+    <link rel="shortcut icon" href="/static/favicon.svg" />
     <link rel="stylesheet" type="text/css" href="/static/nprogress.css" />
+    <link rel="stylesheet" type="text/css" href="/static/reset.css" />
     <title>AutoMate</title>
   </Head>
 )

+ 25 - 10
frontend/components/Page.js

@@ -3,13 +3,20 @@ import Header from './Header'
 import Meta from './Meta'
 
 const theme = {
-  red: '#FF0000',
+  lightred: '#f0b0b0',
+  red: '#f03535',
   black: '#393939',
-  grey: '#545454',
-  lightgrey: '#E1E1E1',
+  grey: '#7f8c8d',
+  lightgrey: '#95a5a5',
+  lighterblue: '#d6e4f0',
+  lightblue: '#b0d3f0',
+  blue: '#4482c3',
+  darkblue: '#285680',
+  darkerblue: '#204567',
   offWhite: '#EDEDED',
   maxWidth: '1000px',
-  bs: '0 12px 24px 0 rgba(0,0,0,0.09)'
+  bs: '0 12px 24px 0 rgba(0,0,0,0.09)',
+  bsSmall: '0 5px 10px 0 rgba(0,0,0,0.19)'
 }
 
 const StyledPage = styled.div`
@@ -37,9 +44,9 @@ const GlobalStyle = createGlobalStyle`
     src: url('/static/Roboto-Black.woff2');
   }
   
-  html {l
+  html {
     box-sizing: border-box;
-    font-size: 10px;
+    font-size: 12px;
   }
 
   *, *:before, *:after {
@@ -54,13 +61,21 @@ const GlobalStyle = createGlobalStyle`
     font-family: 'roboto', sans-serif;
   }
 
-  a {
-    text-decoration: none;
-    color: ${theme.black};
+  h1 {
+    font-family: 'roboto_black';
+  }
+
+  h2, h3, h4, h5, h6 {
   }
 
   button {
     font-family: 'roboto_black';
+    background: ${props => props.theme.darkblue};
+    color: ${props => props.theme.lighterblue};
+    border: 1px solid ${props => props.theme.darkerblue};
+    padding: 0.3em 1.8em;
+    cursor: pointer;
+    box-shadow: ${props => props.theme.bsSmall};
   }
 
   input,
@@ -73,7 +88,7 @@ const GlobalStyle = createGlobalStyle`
 `
 
 class Page extends React.Component {
-  render () {
+  render() {
     return (
       <ThemeProvider theme={theme}>
         <StyledPage>

+ 89 - 35
frontend/components/ProjectForm.js

@@ -1,52 +1,106 @@
 import styled from 'styled-components'
 import gql from 'graphql-tag'
-import { Query } from 'react-apollo'
+import { Mutation, Query } from 'react-apollo'
+import File from './File'
+import ProjectVersion from './ProjectVersion'
 
-const StyledProjectForm = styled.form`
-  display: grid;
-  font-family: "Arial";
-
-  label {
-    display: block;
-    color: ${props => props.theme.grey};
-    font-weight: bold;
-    font-size: 80%;
+const CREATE_PROJECT = gql`
+  mutation CREATE_PROJECT($name: String!, $abbreviation: String!, $description: String) {
+    createProject(name: $name, abbreviation: $abbreviation, description: $description) {
+      id
+    }
   }
+`
 
-  input, textarea {
-    border: none;
-    border-bottom: 2px solid red;
+const QUERY_PROJECTS = gql`
+  query QUERY_PROJECTS {
+    projects {
+      id
+      name
+      abbreviation
+      description
+      files {
+        id
+        path
+        name
+        description
+        filename
+        mimetype
+        size
+      }
+      versions {
+        id
+        name
+        changes
+        date
+      }
+    }
   }
+`
 
-  #project-name {
-    font-size: 115%;
-    font-weight: bold;
+const ProjectSelector = props => (
+  <Query query={QUERY_PROJECTS}>
+    {({ data, loading, error }) => {
+      if (error) return (<p>Error loading project: ${error.message}</p>)
+      if (loading) return (<p>Loading data...</p>)
+      if (!data || !data.projects.length) return (<p>No project found.</p>)
+      if (!props.value) props.onChange({ target: { name: 'project', value: data.projects[0].id } })
+      const selector = (
+        <select {...props}>
+          {data.projects.map(project =>
+            <option key={project.id} value={project.id}>{project.name}</option>
+          )}
+        </select>
+      )
+      return selector
+    }}
+  </Query >
+)
+
+const ProjectFields = props => (
+  <fieldset>
+    {props.title && <legend>{props.title}</legend>}
+    <label htmlFor='name'>Project name</label>
+    <input type='text' name='name' id='name' placeholder='Project name' value={props.state.name} onChange={props.onChange} />
+    <label htmlFor='abbreviation'>Project abbreviation</label>
+    <input type='text' name='abbreviation' id='abbreviation' placeholder='Project abbreviation' value={props.state.abbreviation} onChange={props.onChange} />
+    <label htmlFor='description'>Project description</label>
+    <textarea name='description' id='description' placeholder='Project description' value={props.state.description} onChange={props.onChange} />
+  </fieldset>
+)
+
+class Project extends React.Component {
+  state = {
+    id: null,
+    name: '',
+    abbreviation: '',
+    description: '',
+    files: [],
+    versions: [],
+    ...this.props.project
   }
-`
 
-class ProjectForm extends React.Component {
-  saveForm = event => {
-    event.preventDefault()
-    console.log(event.target)
+  toState = event => {
+    this.setState({ [event.target.name]: event.target.value })
   }
 
   render() {
     return (
-      <StyledProjectForm>
-        <h1>Project Setup</h1>
-        <p>Please fill in the form.</p>
-        <fieldset id='project-generic'>
-          <label htmlFor='project-name'>Project name</label>
-          <input type='text' id='project-name' placeholder='Project name' />
-          <label htmlFor='project-abbreviation'>Project abbreviation</label>
-          <input type='text' id='project-abbreviation' placeholder='Project abbreviation' />
-          <label htmlFor='project-description'>Project description</label>
-          <textarea id='project-description' placeholder='Project description' />
-        </fieldset>
-        <button type='submit' onClick={this.saveForm}>Save</button>
-      </StyledProjectForm>
+      <Mutation mutation={CREATE_PROJECT} variables={this.state} refetchQueries={[{ query: QUERY_PROJECTS }]}>
+        {(createProject, { data, error, loading }) => (
+          <form onSubmit={async event => {
+            event.preventDefault()
+            const { data } = await createProject()
+            this.state.id = data.createProject.id
+          }}>
+            <ProjectFields title="Project" state={this.state} onChange={this.toState} />
+            <button type='submit'>{this.state.id && this.state.id !== "__NEW__" ? "Save" : "Add"}</button>
+          </form>
+        )}
+      </Mutation>
     )
   }
 }
 
-export default ProjectForm
+export default Project
+export { ProjectSelector, QUERY_PROJECTS, ProjectFields }

+ 20 - 10
frontend/components/ProjectList.js

@@ -8,19 +8,28 @@ const StyledProjectList = styled.div`
 
 const QUERY_PROJECTS = gql`
   query QUERY_PROJECTS {
-  projects {
-    id
-    name
-    abbreviation
-    description
-    images {
+    projects {
       id
-      filename
-      mimetype
-      size
+      name
+      abbreviation
+      description
+      files {
+        id
+        path
+        name
+        description
+        filename
+        mimetype
+        size
+      }
+      versions {
+        id
+        name
+        changes
+        date
+      }
     }
   }
-}
 `
 
 class ProjectList extends React.Component {
@@ -55,3 +64,4 @@ class ProjectList extends React.Component {
 }
 
 export default ProjectList
+export { QUERY_PROJECTS }

+ 68 - 0
frontend/components/ProjectVersionForm.js

@@ -0,0 +1,68 @@
+import gql from 'graphql-tag'
+import { Query, Mutation } from 'react-apollo'
+import { ProjectSelector } from './ProjectForm'
+
+const CREATE_PROJECT_VERSION = gql`
+  mutation CREATE_PROJECT_VERSION($name: String!, $date: String!, $project: ID!, $changes: [String]!) {
+    createProjectVersion(name: $name, date: $date, project: $project, changes: $changes) {
+      id
+    }
+  }
+`
+
+const ProjectVersionFields = props => (
+  <fieldset>
+    {props.title && <legend>{props.title}</legend>}
+    <label htmlFor='name'>Project name</label>
+    <input type='text' name='name' id='name' placeholder='Project version name' value={props.state.name} onChange={props.onChange} />
+    <label htmlFor='date'>Date</label>
+    <input type='date' name='date' id='date' placeholder='Project date' value={props.state.date} onChange={props.onChange} />
+    <label htmlFor='change'>Comments</label>
+    <input type='text' name='change' id='change' placeholder='Project change' value={props.state.change} onChange={props.onChange} /><button onClick={props.addChange}>Add</button>
+  </fieldset>
+)
+
+class ProjectVersionForm extends React.Component {
+  state = {
+    id: null,
+    name: '',
+    date: '',
+    change: '',
+    changes: [],
+    project: null,
+    ...this.props.projectVersion
+  }
+
+  toState = event => {
+    this.setState({ [event.target.name]: event.target.value })
+  }
+
+  addComment = event => {
+  }
+
+  render() {
+    return (
+      <Mutation mutation={CREATE_PROJECT_VERSION} variables={this.state}>
+        {(createProjectVersion, { data, error, loading }) => (
+          <form onSubmit={async event => {
+            event.preventDefault()
+            const { data } = await createProjectVersion()
+            this.state.id = data.createProjectVersion.id
+          }}>
+            <ProjectVersionFields title="Project Version" state={this.state} addChange={event => {
+              event.preventDefault()
+              const newChanges = this.state.changes
+              newChanges.push(this.state.change)
+              this.setState({ changes: newChanges, change: '' })
+            }} onChange={this.toState} />
+            {this.state.changes.map((change, index) => <p key={index}>{change}</p>)}
+            {this.props.project || <ProjectSelector name='project' id='project' value={this.state.project} onChange={this.toState} />}
+            <button type='submit'>Save</button>
+          </form>
+        )}
+      </Mutation>
+    )
+  }
+}
+
+export default ProjectVersionForm

+ 22 - 0
frontend/package-lock.json

@@ -5046,6 +5046,23 @@
         "scheduler": "^0.13.6"
       }
     },
+    "react-adopt": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/react-adopt/-/react-adopt-0.6.0.tgz",
+      "integrity": "sha1-5f+QOmVdMIIhf4K8nVAzpLZPr60=",
+      "requires": {
+        "hoist-non-react-statics": "^2.5.0",
+        "react": "^16.3.2",
+        "react-display-name": "^0.2.4"
+      },
+      "dependencies": {
+        "hoist-non-react-statics": {
+          "version": "2.5.5",
+          "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",
+          "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="
+        }
+      }
+    },
     "react-apollo": {
       "version": "2.5.4",
       "resolved": "https://registry.npmjs.org/react-apollo/-/react-apollo-2.5.4.tgz",
@@ -5084,6 +5101,11 @@
         }
       }
     },
+    "react-display-name": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/react-display-name/-/react-display-name-0.2.4.tgz",
+      "integrity": "sha512-zvU6iouW+SWwHTyThwxGICjJYCMZFk/6r/+jmOdC7ntQoPlS/Pqb81MkxaMf2bHTSq9TN3K3zX2/ayMW/jCtyA=="
+    },
     "react-dom": {
       "version": "16.8.6",
       "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz",

+ 1 - 0
frontend/package.json

@@ -26,6 +26,7 @@
     "next-with-apollo": "^3.4.0",
     "nprogress": "^0.2.0",
     "react": "^16.8.6",
+    "react-adopt": "^0.6.0",
     "react-apollo": "^2.5.4",
     "react-dom": "^16.8.6",
     "standard": "^12.0.1",

+ 5 - 1
frontend/pages/characterization.js

@@ -1,4 +1,5 @@
 import Characterization from '../components/Characterization'
+import CharacterizationForm from '../components/CharacterizationForm'
 
 const MOCK_DATA = {
   name: 'DCDC Efficiency',
@@ -77,7 +78,10 @@ const MOCK_DATA = {
 }
 
 const CharacterizationPage = props => (
-  <Characterization data={MOCK_DATA} />
+  <>
+    <CharacterizationForm />
+    <Characterization data={MOCK_DATA} />
+  </>
 )
 
 export default CharacterizationPage

+ 6 - 2
frontend/pages/index.js

@@ -3,11 +3,15 @@
  * https://www.prisma.io/docs/1.29/get-started/03-build-graphql-servers-with-prisma-JAVASCRIPT-e001/
  */
 
-import FileUpload from '../components/FileUpload'
+import DemoForm from '../components/Form'
+import Project from '../components/ProjectForm'
+import ProjectVersionForm from '../components/ProjectVersionForm'
 
 const Index = props => (
   <div>
-    <FileUpload />
+    <DemoForm />
+    <Project />
+    <ProjectVersionForm />
   </div>
 )
 

Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
frontend/static/configuration.svg


Datei-Diff unterdrückt, da er zu groß ist
+ 0 - 0
frontend/static/favicon.svg


+ 85 - 0
frontend/static/reset.css

@@ -0,0 +1,85 @@
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+main, menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-size: 100%;
+  font: inherit;
+  vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article, aside, details, figcaption, figure,
+footer, header, hgroup, main, menu, nav, section {
+  display: block;
+}
+/* HTML5 hidden-attribute fix for newer browsers */
+*[hidden] {
+  display: none;
+}
+body {
+  line-height: 1;
+}
+ol, ul {
+  list-style: none;
+}
+blockquote, q {
+  quotes: none;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+  content: '';
+  content: none;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+/* http://www.paulirish.com/2012/box-sizing-border-box-ftw/ (2015/04/28)*/
+html {
+  box-sizing: border-box;
+}
+*, *:before, *:after {
+  box-sizing: inherit;
+}
+/* Additional resets */
+a {
+  text-decoration: none;
+  color: inherit;
+}
+button {
+  border: none;
+  margin: 0;
+  padding: 0;
+  width: auto;
+  overflow: visible;
+  background: transparent;
+  color: inherit;
+  font: inherit;
+  text-align: inherit;
+  outline: none;
+  line-height: inherit;
+  -webkit-appearance: none;
+}
+/* Fix antialiasing */
+*, *:before, *:after {
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+/* Disable user select on everything but texts */
+*, *:before, *:after {
+  user-select: none;
+}
+p, h1, h2, h3, h4, h5, h6, blockquote, pre, ul, ol, li, table, tr, th, td {
+  user-select: all;
+}

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.