type User { id: ID! @id email: String! @unique name: String! password: String! resetToken: String resetTokenExpiry: Float createdAt: DateTime! @createdAt comments: [Comment!]! ratings: [Rating!]! permissions: [Permission!]! @scalarList(strategy: RELATION) interests: [String!]! @scalarList(strategy: RELATION) avatar: Picture } enum Permission { ADMIN INSTRUCTOR } type Training { id: ID! @id title: String! type: TrainingType! createdAt: DateTime! @createdAt trainingDate: DateTime! location: String! registrations: [User!]! attendance: Int ratings: [Rating!]! published: Boolean! blocks: [BlockInstance!]! @relation(onDelete: CASCADE) } type TrainingType { id: ID! @id name: String! @unique description: String! } type Block { id: ID! @id title: String! description: String duration: Int format: Format! rest: Int tracks: [Track!]! videos: [String!]! @scalarList(strategy: RELATION) pictures: [String!]! @scalarList(strategy: RELATION) blocks: [BlockInstance!] @relation(name: "Instances", onDelete: CASCADE) parentBlockInstances: [BlockInstance!]! @relation(name: "ParentChild", onDelete: CASCADE) exercises: [ExerciseInstance!]! @relation(name: "BlockExercises", onDelete: CASCADE) } type BlockInstance { id: ID! @id block: Block! @relation(name: "ParentChild", onDelete: SET_NULL) parentBlock: Block @relation(name: "Instances") parentTraining: Training @relation(link: INLINE) order: Int! rounds: Int variation: String } type Format { id: ID! @id name: String! description: String! } type File { id: ID! @id createdAt: DateTime! @createdAt updatedAt: DateTime! @updatedAt path: String! mimetype: String! user: User! thumbnail: String filename: String! encoding: String! size: Int! comment: String } type Track { id: ID! @id title: String! artist: String! duration: Int! file: File link: String } type Video { id: ID! @id title: String! description: String! duration: Int! file: File link: String } type Picture { id: ID! @id title: String! description: String! file: File link: String } type Exercise { id: ID! @id name: String! description: String videos: [String!]! @scalarList(strategy: RELATION) pictures: [String!]! @scalarList(strategy: RELATION) targets: [String!]! @scalarList(strategy: RELATION) baseExercise: [String!]! @scalarList(strategy: RELATION) parentExerciseInstances: [ExerciseInstance!]! } type ExerciseInstance { id: ID! @id exercise: Exercise! @relation(link: TABLE) order: Int! repetitions: Int variation: String parentBlockInstances: Block! @relation(name: "BlockExercises") } type Rating { id: ID! @id user: User! value: Int! comment: String! createdAt: DateTime! @createdAt } type Comment { id: ID! @id text: String! author: User! createdAt: DateTime! @createdAt }