# Generic Types type Meta { id: ID! @unique key: String! value: String! } type User { id: ID! @unique email: String! @unique name: String! abbreviation: String! password: String! images: [File]! } type File { id: ID! @unique path: String! name: String description: String filename: String! mimetype: String! size: Int! } type Comment { id: ID! @unique text: String createdAt: DateTime! previousVersion: Comment } type Event { id: ID! @unique json: String! when: DateTime! } # Project Information type Project { id: ID! @unique name: String! @unique abbreviation: String! @unique description: String files: [File]! versions: [ProjectVersion]! } type ProjectVersion { id: ID! @unique name: String! @unique changes: [String]! date: DateTime! project: Project! } # Instruments type InstrumentParameter { id: ID! @unique tag: String! name: String description: String type: String! values: String } type InstrumentCommand { id: ID! @unique tag: String! name: String description: String! instrument: Instrument! readString: String writeString: String parameters: [InstrumentParameter]! } type InstrumentSubsystem { id: ID! @unique name: String description: String! commands: [InstrumentCommand]! parameters: [InstrumentParameter]! subsystems: [InstrumentSubsystem]! } type Instrument { id: ID! @unique name: String! description: String documents: [File]! interfaces: [String]! commands: [InstrumentCommand]! parameters: [InstrumentParameter]! subsystems: [InstrumentSubsystem]! } type InstrumentInstance { id: ID! @unique instrument: Instrument! identifier: String! interface: [String]! label: String location: String } # DUT type DUT { id: ID! @unique name: String! description: String project: ProjectVersion! modifications: [String]! } # Setup type SetupHardware { id: ID! @unique name: String! description: String images: [File]! } type SetupHardwareInstance { id: ID! @unique setupHardware: SetupHardware! identifier: String! images: [File]! } type Setup { id: ID! @unique name: String! description: String! images: [File]! comments: [Comment]! setupHardware: [SetupHardwareInstance]! instruments: [InstrumentInstance]! } # Measurement type Measurement { id: ID! @unique createdAt: DateTime! intValue: Int floatValue: Float stringValue: String } type MeasurementRun { id: ID! @unique name: String! operators: [User]! location: String! temperature: Float startTime: DateTime! endTime: DateTime! log: [Event]! comments: [Comment]! measurements: [Measurement]! setup: Setup! } # Characterization type Characterization { id: ID! @unique name: String! projectVersion: ProjectVersion! measurementRuns: [MeasurementRun]! }