skillbox/server/schema.graphql

1562 lines
32 KiB
GraphQL

schema {
query: Query
mutation: Mutation
}
input AddCommentInput {
comment: String!
roomEntry: ID!
clientMutationId: String
}
type AddCommentPayload {
success: Boolean
comment: CommentNode
clientMutationId: String
}
input AddContentBlockInput {
contentBlock: ContentBlockInput
parent: ID
after: ID
clientMutationId: String
}
type AddContentBlockPayload {
newContentBlock: ContentBlockNode
errors: [String]
clientMutationId: String
}
input AddModuleRoomEntryArgument {
title: String!
contents: [ContentElementInput]
roomSlug: String!
schoolClass: String!
}
input AddModuleRoomEntryInput {
roomEntry: AddModuleRoomEntryArgument
clientMutationId: String
}
type AddModuleRoomEntryPayload {
roomEntry: RoomEntryNode
errors: [String]
clientMutationId: String
}
input AddNoteArgument {
content: UUID
block: String
type: String
parent: ID
text: String!
}
input AddNoteInput {
note: AddNoteArgument
clientMutationId: String
}
type AddNotePayload {
note: NoteNode
clientMutationId: String
}
input AddObjectiveArgument {
text: String!
objectiveGroup: ID
}
input AddObjectiveInput {
objective: AddObjectiveArgument
clientMutationId: String
}
type AddObjectivePayload {
objective: ObjectiveNode
clientMutationId: String
}
input AddProjectArgument {
title: String
description: String
objectives: String
appearance: String
}
input AddProjectEntryArgument {
description: String
documentUrl: String
project: String!
}
input AddProjectEntryInput {
projectEntry: AddProjectEntryArgument
clientMutationId: String
}
type AddProjectEntryPayload {
errors: [String]
projectEntry: ProjectEntryNode
clientMutationId: String
}
input AddProjectInput {
project: AddProjectArgument
clientMutationId: String
}
type AddProjectPayload {
errors: [String]
project: ProjectNode
clientMutationId: String
}
input AddRemoveMemberInput {
member: ID!
schoolClass: ID!
active: Boolean!
clientMutationId: String
}
type AddRemoveMemberPayload {
success: Boolean
clientMutationId: String
}
input AddRoomArgument {
title: String
description: String
schoolClass: SchoolClassInput
appearance: String
}
input AddRoomEntryArgument {
title: String!
contents: [ContentElementInput]
roomSlug: String!
}
input AddRoomEntryInput {
roomEntry: AddRoomEntryArgument
clientMutationId: String
}
type AddRoomEntryPayload {
roomEntry: RoomEntryNode
errors: [String]
clientMutationId: String
}
input AddRoomInput {
room: AddRoomArgument
clientMutationId: String
}
type AddRoomPayload {
errors: [String]
room: RoomNode
clientMutationId: String
}
type AnswerNode implements Node {
id: ID!
owner: PrivateUserNode!
data: JSONString!
survey: SurveyNode!
pk: Int
}
type AnswerNodeConnection {
pageInfo: PageInfo!
edges: [AnswerNodeEdge]!
}
type AnswerNodeEdge {
node: AnswerNode
cursor: String!
}
input ApplySnapshotInput {
snapshot: ID!
selectedClass: ID!
clientMutationId: String
}
type ApplySnapshotPayload {
success: Boolean
module: ModuleNode
clientMutationId: String
}
input AssignmentInput {
id: ID!
answer: String!
document: String
final: Boolean
}
type AssignmentNode implements Node {
id: ID!
created: DateTime!
modified: DateTime!
title: String!
assignment: String!
solution: String
deleted: Boolean!
owner: PrivateUserNode
module: ModuleNode!
userCreated: Boolean!
taskbaseId: String
submissions: [StudentSubmissionNode]
submission: StudentSubmissionNode
}
type ChapterBookmarkNode implements Node {
id: ID!
user: PrivateUserNode!
note: NoteNode
chapter: ChapterNode!
}
type ChapterBookmarkNodeConnection {
pageInfo: PageInfo!
edges: [ChapterBookmarkNodeEdge]!
}
type ChapterBookmarkNodeEdge {
node: ChapterBookmarkNode
cursor: String!
}
interface ChapterInterface {
description: String
title: String
}
type ChapterNode implements Node & ChapterInterface {
title: String
slug: String!
description: String
titleHiddenFor: [SchoolClassNode]
descriptionHiddenFor: [SchoolClassNode]
id: ID!
bookmark: ChapterBookmarkNode
contentBlocks: [ContentBlockNode]
path: String
}
type ChapterNodeConnection {
pageInfo: PageInfo!
edges: [ChapterNodeEdge]!
}
type ChapterNodeEdge {
node: ChapterNode
cursor: String!
}
type ClassMemberNode {
user: PublicUserNode
active: Boolean
firstName: String
lastName: String
isTeacher: Boolean
id: ID
isMe: Boolean
}
type CommentNode implements Node {
text: String!
owner: PublicUserNode
created: DateTime!
id: ID!
}
type ContentBlockBookmarkNode implements Node {
id: ID!
user: PrivateUserNode!
note: NoteNode
uuid: UUID
contentBlock: ContentBlockNode!
}
type ContentBlockBookmarkNodeConnection {
pageInfo: PageInfo!
edges: [ContentBlockBookmarkNodeEdge]!
}
type ContentBlockBookmarkNodeEdge {
node: ContentBlockBookmarkNode
cursor: String!
}
input ContentBlockInput {
title: String
type: String
contents: [ContentElementInput]
visibility: [UserGroupBlockVisibility]
}
interface ContentBlockInterface {
title: String
contents: GenericStreamFieldType
type: String
}
type ContentBlockNode implements Node & ContentBlockInterface {
title: String
slug: String!
hiddenFor: [SchoolClassNode]
visibleFor: [SchoolClassNode]
userCreated: Boolean!
contents: GenericStreamFieldType
type: String
id: ID!
mine: Boolean
bookmarks: [ContentBlockBookmarkNode]
originalCreator: PublicUserNode
instrumentCategory: InstrumentCategoryNode
path: String
}
type ContentBlockNodeConnection {
pageInfo: PageInfo!
edges: [ContentBlockNodeEdge]!
}
type ContentBlockNodeEdge {
node: ContentBlockNode
cursor: String!
}
input ContentElementInput {
id: String
type: InputTypes!
value: ContentElementValueInput
contents: [ContentElementInput]
}
input ContentElementValueInput {
text: String
url: String
description: String
title: String
assignment: String
id: String
}
input CouponInput {
couponCode: String
clientMutationId: String
}
type CouponPayload {
result: RedeemCouponResult
clientMutationId: String
}
input CreateSchoolClassInput {
name: String
clientMutationId: String
}
type CreateSchoolClassPayload {
result: CreateSchoolClassResult
clientMutationId: String
}
union CreateSchoolClassResult = SchoolClassNode | DuplicateName
input CreateSnapshotInput {
module: String!
selectedClass: ID!
clientMutationId: String
}
type CreateSnapshotPayload {
snapshot: SnapshotNode
success: Boolean
clientMutationId: String
}
input CreateTeamInput {
name: String!
clientMutationId: String
}
type CreateTeamPayload {
result: CreateTeamResult
clientMutationId: String
}
union CreateTeamResult = TeamNode | DuplicateName
scalar Date
scalar DateTime
input DeleteContentBlockInput {
id: ID!
clientMutationId: String
}
type DeleteContentBlockPayload {
success: Boolean
errors: String
clientMutationId: String
}
input DeleteObjectiveInput {
id: ID!
clientMutationId: String
}
type DeleteObjectivePayload {
success: Boolean
clientMutationId: String
}
input DeleteProjectEntryInput {
id: ID!
clientMutationId: String
}
type DeleteProjectEntryPayload {
success: Boolean
errors: [String]
clientMutationId: String
}
input DeleteProjectInput {
slug: String!
clientMutationId: String
}
type DeleteProjectPayload {
success: Boolean
errors: [String]
clientMutationId: String
}
input DeleteRoomEntryInput {
slug: String!
clientMutationId: String
}
type DeleteRoomEntryPayload {
success: Boolean
roomSlug: String
roomId: ID
errors: [String]
clientMutationId: String
}
input DeleteRoomInput {
id: ID!
clientMutationId: String
}
type DeleteRoomPayload {
success: Boolean
errors: [String]
clientMutationId: String
}
input DeleteSnapshotInput {
id: ID!
clientMutationId: String
}
type DeleteSnapshotPayload {
result: DeleteSnapshotResult
clientMutationId: String
}
union DeleteSnapshotResult = Success | NotOwner
type DjangoDebug {
sql: [DjangoDebugSQL]
}
type DjangoDebugSQL {
vendor: String!
alias: String!
sql: String
duration: Float!
rawSql: String!
params: String!
startTime: Float!
stopTime: Float!
isSlow: Boolean!
isSelect: Boolean!
transId: String
transStatus: String
isoLevel: String
encoding: String
}
input DuplicateContentBlockInput {
id: ID!
clientMutationId: String
}
type DuplicateContentBlockPayload {
contentBlock: ContentBlockNode
clientMutationId: String
}
type DuplicateName implements FailureNode {
reason: String
}
interface FailureNode {
reason: String
}
type FieldError {
code: String
}
scalar GenericStreamFieldType
enum InputTypes {
text_block
assignment
image_block
image_url_block
link_block
video_block
document_block
content_list_item
subtitle
readonly
}
type InstrumentBookmarkNode implements Node {
id: ID!
user: PrivateUserNode!
note: NoteNode
uuid: UUID
instrument: InstrumentNode!
}
type InstrumentCategoryNode implements Node {
id: ID!
name: String!
background: String!
foreground: String!
types: [InstrumentTypeNode]
}
type InstrumentNode implements Node {
title: String!
slug: String!
intro: String!
contents: GenericStreamFieldType
id: ID!
bookmarks: [InstrumentBookmarkNode]
type: InstrumentTypeNode
}
type InstrumentNodeConnection {
pageInfo: PageInfo!
edges: [InstrumentNodeEdge]!
}
type InstrumentNodeEdge {
node: InstrumentNode
cursor: String!
}
type InstrumentTypeNode implements Node {
id: ID!
name: String!
category: InstrumentCategoryNode
type: String!
}
type InvalidCoupon implements FailureNode {
reason: String
}
scalar JSONString
input JoinClassInput {
code: String!
clientMutationId: String
}
type JoinClassPayload {
success: Boolean
schoolClass: SchoolClassNode
clientMutationId: String
}
input JoinTeamInput {
code: String!
clientMutationId: String
}
type JoinTeamPayload {
success: Boolean
team: TeamNode
clientMutationId: String
}
type LeaveTeam {
success: Boolean
}
type Logout {
success: Boolean
}
type ModuleBookmarkNode {
id: ID!
user: PrivateUserNode!
note: NoteNode
module: ModuleNode!
}
type ModuleConnection {
pageInfo: PageInfo!
edges: [ModuleEdge]!
nodes: [ModuleNode]
}
type ModuleEdge {
node: ModuleNode
cursor: String!
}
interface ModuleInterface {
id: ID!
pk: Int
heroImage: String!
topic: TopicNode
}
type ModuleNode implements ModuleInterface {
title: String!
slug: String!
metaTitle: String!
heroImage: String!
heroSource: String!
teaser: String!
intro: String!
assignments: [AssignmentNode]
objectiveGroups: [ObjectiveGroupNode]
id: ID!
pk: Int
topic: TopicNode
chapters: [ChapterNode]
solutionsEnabled: Boolean
bookmark: ModuleBookmarkNode
mySubmissions(offset: Int, before: String, after: String, first: Int, last: Int): StudentSubmissionNodeConnection
myAnswers(offset: Int, before: String, after: String, first: Int, last: Int): AnswerNodeConnection
myContentBookmarks(offset: Int, before: String, after: String, first: Int, last: Int): ContentBlockBookmarkNodeConnection
myChapterBookmarks(offset: Int, before: String, after: String, first: Int, last: Int): ChapterBookmarkNodeConnection
snapshots: [SnapshotNode]
}
type ModuleNodeConnection {
pageInfo: PageInfo!
edges: [ModuleNodeEdge]!
}
type ModuleNodeEdge {
node: ModuleNode
cursor: String!
}
input MutateContentBlockInput {
id: ID!
contentBlock: ContentBlockInput
clientMutationId: String
}
type MutateContentBlockPayload {
contentBlock: ContentBlockNode
clientMutationId: String
}
type Mutation {
spellCheck(input: SpellCheckInput!): SpellCheckPayload
addNote(input: AddNoteInput!): AddNotePayload
updateNote(input: UpdateNoteInput!): UpdateNotePayload
updateContentBookmark(input: UpdateContentBookmarkInput!): UpdateContentBookmarkPayload
updateChapterBookmark(input: UpdateChapterBookmarkInput!): UpdateChapterBookmarkPayload
updateModuleBookmark(input: UpdateModuleBookmarkInput!): UpdateModuleBookmarkPayload
updateInstrumentBookmark(input: UpdateInstrumentBookmarkInput!): UpdateInstrumentBookmarkPayload
updateAnswer(input: UpdateAnswerInput!): UpdateAnswerPayload
updatePassword(input: UpdatePasswordInput!): UpdatePasswordPayload
updateAvatar(input: UpdateAvatarInput!): UpdateAvatarPayload
updateSetting(input: UpdateSettingInput!): UpdateSettingPayload
joinClass(input: JoinClassInput!): JoinClassPayload
addRemoveMember(input: AddRemoveMemberInput!): AddRemoveMemberPayload
updateSchoolClass(input: UpdateSchoolClassInput!): UpdateSchoolClassPayload
createSchoolClass(input: CreateSchoolClassInput!): CreateSchoolClassPayload
updateOnboardingProgress: UpdateOnboardingProgress
createTeam(input: CreateTeamInput!): CreateTeamPayload
joinTeam(input: JoinTeamInput!): JoinTeamPayload
updateTeam(input: UpdateTeamInput!): UpdateTeamPayload
leaveTeam: LeaveTeam
addProject(input: AddProjectInput!): AddProjectPayload
updateProject(input: UpdateProjectInput!): UpdateProjectPayload
deleteProject(input: DeleteProjectInput!): DeleteProjectPayload
addProjectEntry(input: AddProjectEntryInput!): AddProjectEntryPayload
updateProjectEntry(input: UpdateProjectEntryInput!): UpdateProjectEntryPayload
deleteProjectEntry(input: DeleteProjectEntryInput!): DeleteProjectEntryPayload
updateProjectSharedState(input: UpdateProjectSharedStateInput!): UpdateProjectSharedStatePayload
logout: Logout
coupon(input: CouponInput!): CouponPayload
updateObjectiveVisibility(input: UpdateObjectiveVisibilityInput!): UpdateObjectiveVisibilityPayload
updateObjectiveGroupVisibility(input: UpdateObjectiveGroupVisibilityInput!): UpdateObjectiveGroupVisibilityPayload
addObjective(input: AddObjectiveInput!): AddObjectivePayload
deleteObjective(input: DeleteObjectiveInput!): DeleteObjectivePayload
updateAssignment(input: UpdateAssignmentInput!): UpdateAssignmentPayload
updateSubmissionFeedback(input: UpdateSubmissionFeedbackInput!): UpdateSubmissionFeedbackPayload
updateRoom(input: UpdateRoomInput!): UpdateRoomPayload
addRoom(input: AddRoomInput!): AddRoomPayload
deleteRoom(input: DeleteRoomInput!): DeleteRoomPayload
addRoomEntry(input: AddRoomEntryInput!): AddRoomEntryPayload
addModuleRoomEntry(input: AddModuleRoomEntryInput!): AddModuleRoomEntryPayload
deleteRoomEntry(input: DeleteRoomEntryInput!): DeleteRoomEntryPayload
updateRoomEntry(input: UpdateRoomEntryInput!): UpdateRoomEntryPayload
addComment(input: AddCommentInput!): AddCommentPayload
updateRoomVisibility(input: UpdateRoomVisibilityInput!): UpdateRoomVisibilityPayload
mutateContentBlock(input: MutateContentBlockInput!): MutateContentBlockPayload
addContentBlock(input: AddContentBlockInput!): AddContentBlockPayload
deleteContentBlock(input: DeleteContentBlockInput!): DeleteContentBlockPayload
duplicateContentBlock(input: DuplicateContentBlockInput!): DuplicateContentBlockPayload
updateSolutionVisibility(input: UpdateSolutionVisibilityInput!): UpdateSolutionVisibilityPayload
updateLastModule(input: UpdateLastModuleInput!): UpdateLastModulePayload
updateLastTopic(input: UpdateLastTopicInput!): UpdateLastTopicPayload
updateChapterVisibility(input: UpdateChapterVisibilityInput!): UpdateChapterVisibilityPayload
syncModuleVisibility(input: SyncModuleVisibilityInput!): SyncModuleVisibilityPayload
createSnapshot(input: CreateSnapshotInput!): CreateSnapshotPayload
applySnapshot(input: ApplySnapshotInput!): ApplySnapshotPayload
shareSnapshot(input: ShareSnapshotInput!): ShareSnapshotPayload
updateSnapshot(input: UpdateSnapshotInput!): UpdateSnapshotPayload
deleteSnapshot(input: DeleteSnapshotInput!): DeleteSnapshotPayload
_debug: DjangoDebug
}
type NewsTeaserNode implements Node {
id: ID!
imageUrl: String
title: String!
description: String
date: Date
orderId: Int!
newsArticleUrl: String
imageSource: String!
displayDate: String
}
interface Node {
id: ID!
}
type NotFound {
reason: String
}
type NotOwner implements FailureNode {
reason: String
}
type NoteNode implements Node {
id: ID!
text: String!
contentblockbookmark: ContentBlockBookmarkNode
modulebookmark: ModuleBookmarkNode
chapterbookmark: ChapterBookmarkNode
instrumentbookmark: InstrumentBookmarkNode
pk: Int
}
type ObjectiveGroupNode implements Node {
id: ID!
title: ObjectiveGroupTitle
module: ModuleNode!
hiddenFor: [SchoolClassNode]
objectives: [ObjectiveNode]
pk: Int
displayTitle: String
}
type ObjectiveGroupNodeConnection {
pageInfo: PageInfo!
edges: [ObjectiveGroupNodeEdge]!
}
type ObjectiveGroupNodeEdge {
node: ObjectiveGroupNode
cursor: String!
}
enum ObjectiveGroupTitle {
LANGUAGE_COMMUNICATION
SOCIETY
INTERDISCIPLINARY
}
type ObjectiveNode implements Node {
id: ID!
text: String!
group: ObjectiveGroupNode!
owner: PrivateUserNode
hiddenFor: [SchoolClassNode]
visibleFor: [SchoolClassNode]
order: Int
hiddenForSnapshots(offset: Int, before: String, after: String, first: Int, last: Int): SnapshotNodeConnection!
pk: Int
userCreated: Boolean
mine: Boolean
}
type ObjectiveNodeConnection {
pageInfo: PageInfo!
edges: [ObjectiveNodeEdge]!
}
type ObjectiveNodeEdge {
node: ObjectiveNode
cursor: String!
}
type PageInfo {
hasNextPage: Boolean!
hasPreviousPage: Boolean!
startCursor: String
endCursor: String
}
input PasswordUpdateInput {
oldPassword: String
newPassword: String
}
type PrivateUserNode implements Node {
firstName: String!
lastName: String!
avatarUrl: String!
username: String!
lastModule: ModuleNode
lastTopic: TopicNode
email: String!
onboardingVisited: Boolean!
team: TeamNode
schoolClasses: [SchoolClassNode]
id: ID!
pk: Int
permissions: [String]
selectedClass: SchoolClassNode
expiryDate: String
isTeacher: Boolean
oldClasses: [SchoolClassNode]
recentModules(offset: Int, before: String, after: String, first: Int, last: Int, recentModules: [ID], orderBy: String): ModuleNodeConnection
readOnly: Boolean
}
type PrivateUserNodeConnection {
pageInfo: PageInfo!
edges: [PrivateUserNodeEdge]!
}
type PrivateUserNodeEdge {
node: PrivateUserNode
cursor: String!
}
type ProjectEntryNode implements Node {
documentUrl: String!
description: String!
created: DateTime!
project: ProjectNode!
id: ID!
}
type ProjectNode implements Node {
id: ID!
title: String!
description: String
slug: String!
objectives: String!
appearance: String!
student: PrivateUserNode!
final: Boolean!
schoolClass: SchoolClassNode
entries: [ProjectEntryNode]
pk: Int
entriesCount: Int
owner: PublicUserNode
}
type PublicUserNode implements Node {
firstName: String!
lastName: String!
avatarUrl: String!
id: ID!
fullName: String!
isMe: Boolean
}
type Query {
newsTeasers: [NewsTeaserNode]
survey(id: ID): SurveyNode
surveys(offset: Int, before: String, after: String, first: Int, last: Int): SurveyNodeConnection
project(id: ID, slug: String): ProjectNode
projects: [ProjectNode]
instrument(slug: String, id: ID): InstrumentNode
instruments: [InstrumentNode]
instrumentTypes: [InstrumentTypeNode]
instrumentCategories: [InstrumentCategoryNode]
studentSubmission(id: ID!): StudentSubmissionNode
assignment(id: ID!): AssignmentNode
assignments: [AssignmentNode]
node(id: ID!): Node
topic(slug: String): TopicOr404Node
module(slug: String, id: ID): ModuleNode
chapter(id: ID!): ChapterNode
contentBlock(id: ID!): ContentBlockNode
snapshot(id: ID!): SnapshotNode
topics(before: String, after: String, first: Int, last: Int): TopicConnection
modules(before: String, after: String, first: Int, last: Int): ModuleConnection
chapters(offset: Int, before: String, after: String, first: Int, last: Int, slug: String, title: String): ChapterNodeConnection
objectiveGroup(id: ID!): ObjectiveGroupNode
objectiveGroups(offset: Int, before: String, after: String, first: Int, last: Int, title: String, module_Slug: String): ObjectiveGroupNodeConnection
roomEntry(id: ID, slug: String): RoomEntryNode
room(slug: String, id: ID, appearance: String): RoomNode
rooms: [RoomNode]
allRoomEntries(offset: Int, before: String, after: String, first: Int, last: Int, slug: String): RoomEntryNodeConnection
moduleRoom(slug: String, classId: ID): RoomNode
me: PrivateUserNode
allUsers(offset: Int, before: String, after: String, first: Int, last: Int, username: String, email: String): PrivateUserNodeConnection
myActivity(offset: Int, before: String, after: String, first: Int, last: Int, slug: String, slug_Icontains: String, slug_In: [String], title: String, title_Icontains: String, title_In: [String]): ModuleNodeConnection
myInstrumentActivity(offset: Int, before: String, after: String, first: Int, last: Int, slug: String): InstrumentNodeConnection
_debug: DjangoDebug
}
union RedeemCouponResult = Success | InvalidCoupon
type RoomEntryNode implements Node {
id: ID!
title: String!
description: String
slug: String!
room: RoomNode!
author: PublicUserNode
contents: GenericStreamFieldType
comments: [CommentNode]
pk: Int
}
type RoomEntryNodeConnection {
pageInfo: PageInfo!
edges: [RoomEntryNodeEdge]!
}
type RoomEntryNodeEdge {
node: RoomEntryNode
cursor: String!
}
type RoomNode implements Node {
id: ID!
title: String!
description: String
slug: String!
schoolClass: SchoolClassNode!
appearance: String!
userCreated: Boolean!
restricted: Boolean!
roomEntries(offset: Int, before: String, after: String, first: Int, last: Int, slug: String): RoomEntryNodeConnection!
pk: Int
entryCount: Int
}
input SchoolClassInput {
id: ID
name: String
}
type SchoolClassNode implements Node {
name: String!
code: String
id: ID!
pk: Int
members: [ClassMemberNode]
readOnly: Boolean
}
input ShareSnapshotInput {
snapshot: ID!
shared: Boolean!
clientMutationId: String
}
type ShareSnapshotPayload {
success: Boolean!
snapshot: SnapshotNode
clientMutationId: String
}
type SnapshotChangesNode {
hiddenObjectives: Int!
newObjectives: Int!
hiddenContentBlocks: Int!
newContentBlocks: Int!
}
type SnapshotChapterNode implements Node & ChapterInterface {
id: ID!
description: String
title: String
contentBlocks: [SnapshotContentBlockNode]
descriptionHidden: Boolean
titleHidden: Boolean
}
type SnapshotContentBlockNode implements Node & ContentBlockInterface {
id: ID!
title: String
contents: GenericStreamFieldType
type: String
hidden: Boolean
}
type SnapshotNode implements Node {
id: ID!
module: ModuleNode!
chapters: [SnapshotChapterNode]
hiddenContentBlocks(offset: Int, before: String, after: String, first: Int, last: Int, slug: String, title: String): ContentBlockNodeConnection!
created: DateTime!
creator: String!
shared: Boolean!
objectiveGroups: [SnapshotObjectiveGroupNode]
hiddenObjectives(offset: Int, before: String, after: String, first: Int, last: Int, text: String): ObjectiveNodeConnection!
title: String
metaTitle: String
heroImage: String
changes: SnapshotChangesNode
mine: Boolean
}
type SnapshotNodeConnection {
pageInfo: PageInfo!
edges: [SnapshotNodeEdge]!
}
type SnapshotNodeEdge {
node: SnapshotNode
cursor: String!
}
type SnapshotObjectiveGroupNode implements Node {
id: ID!
title: String!
hidden: Boolean!
displayTitle: String!
objectives: [SnapshotObjectiveNode]!
}
type SnapshotObjectiveNode implements Node {
id: ID!
hidden: Boolean!
text: String!
}
input SpellCheckInput {
text: String!
assignment: ID!
clientMutationId: String
}
type SpellCheckPayload {
results: [SpellCheckStepNode]
correct: Boolean
clientMutationId: String
}
type SpellCheckStepNode {
sentence: String
offset: Int
sentenceOffset: Int
length: Int
affected: String
corrected: String
}
type StudentSubmissionNode implements Node {
id: ID!
created: DateTime!
modified: DateTime!
text: String!
document: String!
assignment: AssignmentNode!
student: PrivateUserNode!
final: Boolean!
submissionFeedback: SubmissionFeedbackNode
}
type StudentSubmissionNodeConnection {
pageInfo: PageInfo!
edges: [StudentSubmissionNodeEdge]!
}
type StudentSubmissionNodeEdge {
node: StudentSubmissionNode
cursor: String!
}
input SubmissionFeedbackInput {
id: ID
studentSubmission: ID!
text: String!
final: Boolean
}
type SubmissionFeedbackNode implements Node {
created: DateTime!
modified: DateTime!
text: String!
teacher: PrivateUserNode!
studentSubmission: StudentSubmissionNode!
final: Boolean!
id: ID!
}
type Success implements SuccessNode {
message: String
}
interface SuccessNode {
message: String
}
type SurveyNode implements Node {
id: ID!
title: String!
module: ModuleNode
data: JSONString!
answers(offset: Int, before: String, after: String, first: Int, last: Int): AnswerNodeConnection!
pk: Int
answer: AnswerNode
}
type SurveyNodeConnection {
pageInfo: PageInfo!
edges: [SurveyNodeEdge]!
}
type SurveyNodeEdge {
node: SurveyNode
cursor: String!
}
input SyncModuleVisibilityInput {
module: String!
templateSchoolClass: ID!
schoolClass: ID!
clientMutationId: String
}
type SyncModuleVisibilityPayload {
success: Boolean
clientMutationId: String
}
type TeamNode implements Node {
id: ID!
name: String!
isDeleted: Boolean!
code: String
creator: PrivateUserNode
members: [PublicUserNode]
pk: Int
}
type TopicConnection {
pageInfo: PageInfo!
edges: [TopicEdge]!
nodes: [TopicNode]
}
type TopicEdge {
node: TopicNode
cursor: String!
}
type TopicNode implements Node {
title: String!
slug: String!
order: Int!
teaser: String!
description: String!
vimeoId: String
instructions: String
id: ID!
pk: Int
modules(offset: Int, before: String, after: String, first: Int, last: Int, slug: String, slug_Icontains: String, slug_In: [String], title: String, title_Icontains: String, title_In: [String]): ModuleNodeConnection
}
union TopicOr404Node = TopicNode | NotFound
scalar UUID
input UpdateAnswerArgument {
surveyId: ID!
data: String!
}
input UpdateAnswerInput {
answer: UpdateAnswerArgument
clientMutationId: String
}
type UpdateAnswerPayload {
answer: AnswerNode
clientMutationId: String
}
input UpdateAssignmentInput {
assignment: AssignmentInput
clientMutationId: String
}
type UpdateAssignmentPayload {
updatedAssignment: AssignmentNode
submission: StudentSubmissionNode
successful: Boolean
errors: [String]
clientMutationId: String
}
input UpdateAvatarInput {
avatarUrl: String
clientMutationId: String
}
type UpdateAvatarPayload {
success: Boolean
errors: [UpdateError]
clientMutationId: String
}
input UpdateChapterBookmarkInput {
chapter: ID!
bookmarked: Boolean!
clientMutationId: String
}
type UpdateChapterBookmarkPayload {
success: Boolean
clientMutationId: String
}
input UpdateChapterVisibilityInput {
id: ID!
visibility: [UserGroupBlockVisibility]
type: String!
clientMutationId: String
}
type UpdateChapterVisibilityPayload {
chapter: ChapterNode
clientMutationId: String
}
input UpdateContentBookmarkInput {
uuid: UUID!
contentBlock: ID!
bookmarked: Boolean!
clientMutationId: String
}
type UpdateContentBookmarkPayload {
success: Boolean
errors: String
clientMutationId: String
}
type UpdateError {
field: String
errors: [FieldError]
}
input UpdateInstrumentBookmarkInput {
uuid: UUID!
instrument: String!
bookmarked: Boolean!
clientMutationId: String
}
type UpdateInstrumentBookmarkPayload {
success: Boolean
clientMutationId: String
}
input UpdateLastModuleInput {
id: ID
clientMutationId: String
}
type UpdateLastModulePayload {
lastModule: ModuleNode
clientMutationId: String
}
input UpdateLastTopicInput {
id: ID
clientMutationId: String
}
type UpdateLastTopicPayload {
topic: TopicNode
clientMutationId: String
}
input UpdateModuleBookmarkInput {
module: String!
bookmarked: Boolean!
clientMutationId: String
}
type UpdateModuleBookmarkPayload {
success: Boolean
clientMutationId: String
}
input UpdateNoteArgument {
id: ID!
text: String!
}
input UpdateNoteInput {
note: UpdateNoteArgument
clientMutationId: String
}
type UpdateNotePayload {
note: NoteNode
clientMutationId: String
}
input UpdateObjectiveGroupVisibilityInput {
id: ID!
visibility: [UserGroupBlockVisibility]
clientMutationId: String
}
type UpdateObjectiveGroupVisibilityPayload {
objectiveGroup: ObjectiveGroupNode
clientMutationId: String
}
input UpdateObjectiveVisibilityInput {
id: ID!
visibility: [UserGroupBlockVisibility]
clientMutationId: String
}
type UpdateObjectiveVisibilityPayload {
objective: ObjectiveNode
clientMutationId: String
}
type UpdateOnboardingProgress {
success: Boolean
}
input UpdatePasswordInput {
passwordInput: PasswordUpdateInput
clientMutationId: String
}
type UpdatePasswordPayload {
success: Boolean
errors: [UpdateError]
clientMutationId: String
}
input UpdateProjectArgument {
title: String
description: String
objectives: String
appearance: String
slug: String!
final: Boolean
}
input UpdateProjectEntryArgument {
description: String
documentUrl: String
id: ID!
}
input UpdateProjectEntryInput {
projectEntry: UpdateProjectEntryArgument
clientMutationId: String
}
type UpdateProjectEntryPayload {
errors: [String]
projectEntry: ProjectEntryNode
clientMutationId: String
}
input UpdateProjectInput {
project: UpdateProjectArgument
clientMutationId: String
}
type UpdateProjectPayload {
errors: [String]
project: ProjectNode
clientMutationId: String
}
input UpdateProjectSharedStateInput {
slug: String
shared: Boolean
clientMutationId: String
}
type UpdateProjectSharedStatePayload {
success: Boolean
shared: Boolean
errors: [String]
clientMutationId: String
}
input UpdateRoomArgument {
title: String
description: String
schoolClass: SchoolClassInput
appearance: String
id: ID!
}
input UpdateRoomEntryArgument {
title: String!
contents: [ContentElementInput]
slug: String!
}
input UpdateRoomEntryInput {
roomEntry: UpdateRoomEntryArgument
clientMutationId: String
}
type UpdateRoomEntryPayload {
roomEntry: RoomEntryNode
errors: [String]
clientMutationId: String
}
input UpdateRoomInput {
room: UpdateRoomArgument
clientMutationId: String
}
type UpdateRoomPayload {
errors: [String]
room: RoomNode
clientMutationId: String
}
input UpdateRoomVisibilityInput {
id: ID!
restricted: Boolean!
clientMutationId: String
}
type UpdateRoomVisibilityPayload {
success: Boolean
room: RoomNode
clientMutationId: String
}
input UpdateSchoolClassInput {
id: ID!
name: String
clientMutationId: String
}
type UpdateSchoolClassPayload {
success: Boolean
schoolClass: SchoolClassNode
clientMutationId: String
}
input UpdateSettingInput {
id: ID!
clientMutationId: String
}
type UpdateSettingPayload {
success: Boolean
errors: [UpdateError]
clientMutationId: String
}
input UpdateSnapshotInput {
id: ID!
title: String
clientMutationId: String
}
type UpdateSnapshotPayload {
snapshot: UpdateSnapshotResult
clientMutationId: String
}
union UpdateSnapshotResult = SnapshotNode | NotOwner
input UpdateSolutionVisibilityInput {
slug: String
enabled: Boolean
clientMutationId: String
}
type UpdateSolutionVisibilityPayload {
success: Boolean
solutionsEnabled: Boolean
errors: [String]
clientMutationId: String
}
input UpdateSubmissionFeedbackInput {
submissionFeedback: SubmissionFeedbackInput
clientMutationId: String
}
type UpdateSubmissionFeedbackPayload {
updatedSubmissionFeedback: SubmissionFeedbackNode
successful: Boolean
errors: [String]
clientMutationId: String
}
input UpdateTeamInput {
id: ID!
name: String
clientMutationId: String
}
type UpdateTeamPayload {
success: Boolean
team: TeamNode
clientMutationId: String
}
input UserGroupBlockVisibility {
schoolClassId: ID!
hidden: Boolean!
}