enum Network { BABYLON ALEXANDRIA ROME } type Block @entity { "Block number as a string" id: ID! block: Int! timestamp: BigInt! network: Network! } "Stored information about a registered user" type Member @entity { "MemberId: runtime identifier for a user" id: ID! "The unique handle chosen by member" handle: String @unique @fulltext(query: "handles") "A Url to member's Avatar image" avatarUri: String "Short text chosen by member to share information about themselves" about: String "Blocknumber when member was registered" registeredAtBlock: Int! "Member's controller account id" controllerAccount: Bytes! "Member's root account id" rootAccount: Bytes! happenedIn: Block! } """ This type is to keep which entity belongs to which class. This type will be used by EntityCreated event. When a new schema support added to an Entity we will get the class name from this table. We need this because we can't create a database row (Channel, Video etc) without with empty fields. """ type ClassEntity @entity { "Runtime entity identifier (EntityId)" id: ID! "The class id of this entity" classId: Int! happenedIn: Block! } "Keep track of the next entity id" type NextEntityId @entity { "Constant field is set to '1'" id: ID! nextId: Int! } #### High Level Derivative Entities #### type Language @entity { "Runtime entity identifier (EntityId)" id: ID! name: String! code: String! happenedIn: Block! } type Channel @entity { "Runtime entity identifier (EntityId)" id: ID! # "Owner of the channel" Commenting out this field: 'owner' can be curator_group, lead # or a member. We are not handling events related to curator group so we will not set this field # owner: Member! "The title of the Channel" title: String! @fulltext(query: "titles") "The description of a Channel" description: String! "Url for Channel's cover (background) photo. Recommended ratio: 16:9." coverPhotoUrl: String! "Channel's avatar photo." avatarPhotoUrl: String! "Flag signaling whether a channel is public." isPublic: Boolean! "Flag signaling whether a channel is curated/verified." isCurated: Boolean! "The primary langauge of the channel's content" language: Language! videos: [Video!] @derivedFrom(field: "channel") happenedIn: Block! } type Category @entity { "Runtime entity identifier (EntityId)" id: ID! "The name of the category" name: String! @unique @fulltext(query: "names") "The description of the category" description: String videos: [Video!] @derivedFrom(field: "category") happenedIn: Block! } "Encoding and containers" type VideoMediaEncoding @entity { "Runtime entity identifier (EntityId)" id: ID! name: String! happenedIn: Block! } type KnownLicense @entity { "Runtime entity identifier (EntityId)" id: ID! "Short, commonly recognized code of the licence (ie. CC_BY_SA)" code: String! @unique "Full, descriptive name of the license (ie. Creative Commons - Attribution-NonCommercial-NoDerivs)" name: String "Short description of the license conditions" description: String "An url pointing to full license content" url: String happenedIn: Block! } type UserDefinedLicense @entity { "Runtime entity identifier (EntityId)" id: ID! "Custom license content" content: String! happenedIn: Block! } type License @entity { "Runtime entity identifier (EntityId)" id: ID! # One of the following field will be non-null "Reference to a known license" knownLicense: KnownLicense "Reference to user-defined license" userdefinedLicense: UserDefinedLicense happenedIn: Block! } type MediaLocation @entity { "Runtime entity identifier (EntityId)" id: ID! # One of the following field will be non-null "A reference to HttpMediaLocation" httpMediaLocation: HttpMediaLocation "A reference to JoystreamMediaLocation" joystreamMediaLocation: JoystreamMediaLocation videoMedia: VideoMedia @derivedFrom(field: "location") happenedIn: Block! } type JoystreamMediaLocation @entity { "Runtime entity identifier (EntityId)" id: ID! "Id of the data object in the Joystream runtime dataDirectory module" dataObjectId: String! @unique happenedIn: Block! } type HttpMediaLocation @entity { "Runtime entity identifier (EntityId)" id: ID! "The http url pointing to the media" url: String! "The port to use when connecting to the http url (defaults to 80)" port: Int happenedIn: Block! } type VideoMedia @entity { "Runtime entity identifier (EntityId)" id: ID! "Encoding of the video media object" encoding: VideoMediaEncoding! "Video media width in pixels" pixelWidth: Int! "Video media height in pixels" pixelHeight: Int! "Video media size in bytes" size: Int video: Video @derivedFrom(field: "media") "Location of the video media object" location: MediaLocation! happenedIn: Block! } type Video @entity { "Runtime entity identifier (EntityId)" id: ID! "Reference to member's channel" channel: Channel! "Reference to a video category" category: Category! "The title of the video" title: String! @fulltext(query: "titles") "The description of the Video" description: String! "Video duration in seconds" duration: Int! "Video's skippable intro duration in seconds" skippableIntroDuration: Int "Video thumbnail url (recommended ratio: 16:9)" thumbnailUrl: String! "Video's main langauge" language: Language "Reference to VideoMedia" media: VideoMedia! "Whether or not Video contains marketing" hasMarketing: Boolean "If the Video was published on other platform before beeing published on Joystream - the original publication date" publishedBeforeJoystream: Int "Whether the Video is supposed to be publically displayed" isPublic: Boolean! "Video curation status set by the Curator" isCurated: Boolean! "Whether the Video contains explicit material." isExplicit: Boolean! license: License! happenedIn: Block! }