# Establishes the ordering of the content by their created_at time stamp. enum SORT_ORDER { # newest to oldest order. REVERSE_CHRONOLOGICAL # oldest to newer order. CHRONOLOGICAL } # Date represented as an ISO8601 string. scalar Date input CommentsQuery { # current status of a comment. statuses: [COMMENT_STATUS] # asset that a comment is on. asset_id: ID # the parent of the comment that we want to retrieve. parent_id: ID # comments returned will only be ones which have at least one action of this # type. action_type: ACTION_TYPE # limit the number of results to be returned. limit: Int = 10 # filter by a specific tag name. tag: [String] # skip results from the last created_at timestamp. cursor: Date # sort the results by created_at. sort: SORT_ORDER = REVERSE_CHRONOLOGICAL } enum USER_ROLES { # an administrator of the site ADMIN # a moderator of the site MODERATOR } # Any person who can author comments, create actions, and view comments on a # stream. type User { id: ID! # display name of a user. displayName: String! # actions against a specific user. actions: [ActionSummary] # the current roles of the user. roles: [USER_ROLES] # determines whether the user can edit their username canEditName: Boolean # returns all comments based on a query. comments(query: CommentsQuery): [Comment] } type Tag { # the actual tag for the comment. name: String! # the user that assigned the tag. If NULL then the system automatically tagged it. assigned_by: String # the time when the tag was assigned. created_at: Date! } type Comment { id: ID! # the actual comment data. body: String! # the tags on the comment tags: [Tag] # the user who authored the comment. user: User # the replies that were made to the comment. replies(sort: SORT_ORDER = CHRONOLOGICAL, limit: Int = 3): [Comment] # the count of replies on a comment replyCount: Int # the actions made against a comment. actions: [ActionSummary] # the asset that a comment was made on. asset: Asset # the current status of a comment. status: COMMENT_STATUS # the time when the comment was created created_at: Date! } enum ITEM_TYPE { ASSETS COMMENTS USERS } enum ACTION_TYPE { LIKE FLAG } type Action { id: ID! action_type: ACTION_TYPE! item_id: ID! item_type: ITEM_TYPE! user: User! updated_at: Date created_at: Date } type ActionSummary { action_type: ACTION_TYPE! item_type: ITEM_TYPE! count: Int current_user: Action } enum MODERATION_MODE { PRE POST } type Settings { moderation: MODERATION_MODE! infoBoxEnable: Boolean infoBoxContent: String closeTimeout: Int closedMessage: String charCountEnable: Boolean charCount: Int requireEmailConfirmation: Boolean } type Asset { # The current ID of the asset. id: ID! # The scraped title of the asset. title: String # The URL that the asset is located on. url: String # The top level comments that are attached to the asset. comments(sort: SORT_ORDER = REVERSE_CHRONOLOGICAL, limit: Int = 10): [Comment] # The count of top level comments on the asset. commentCount: Int # The settings (rectified with the global settings) that should be applied to # this asset. settings: Settings! # The date that the asset was closed at. closedAt: Date # The date that the asset was created. created_at: Date } enum COMMENT_STATUS { ACCEPTED REJECTED PREMOD } type RootQuery { # retrieves site wide settings and defaults. settings: Settings # retrieves all assets. assets: [Asset] # retrieves a specific asset. asset(id: ID, url: String): Asset # retrieves comments based on the input query. comments(query: CommentsQuery!): [Comment] # retrieves the current logged in user. me: User } input CreateActionInput { # the type of action. action_type: ACTION_TYPE! # the type of the item. item_type: ITEM_TYPE! # the id of the item that is related to the action. item_id: ID! } type RootMutation { # creates a comment on the asset. createComment(asset_id: ID!, parent_id: ID, body: String!): Comment # creates an action based on an input. createAction(action: CreateActionInput!): Action # delete an action based on the action id. deleteAction(id: ID!): Boolean } schema { query: RootQuery mutation: RootMutation }