type BingoMutation { "creates a lobby for a game and returns the lobby id" createLobby: ID "joins a lobby and returns the connection" joinLobby(input: joinLobbyInput): PlayerLobbyConnection "creates a game of bingo and returns the game" createGame(input: CreateGameInput!): BingoGame "submit a bingo to the active game session" submitBingo: BingoGame "toggle a word (heared or not) on the sessions grid" toggleWord(input: WordInput!): BingoGrid "set the username of the current session" setUsername(input: UsernameInput!): BingoUser "recreates the active game to a follow-up" createFollowupGame: BingoGame "sends a message to the current sessions chat" sendChatMessage(input: MessageInput!): ChatMessage } type BingoQuery { "returns the currently active bingo game" gameInfo(input: IdInput): BingoGame "if there is a bingo in the fields." checkBingo: Boolean "returns the grid of the active bingo game" activeGrid: BingoGrid } type PlayerLobbyConnection { "the id of the player" playerId: ID! "the id of the lobby" lobbyId: ID! } type BingoGame { "the id of the bingo game" id: ID! "the words used in the bingo game" words: [String]! "the size of the square-grid" gridSize: Int "an array of players active in the bingo game" players(input: IdInput): [BingoUser] # the player-ids that scored a bingo bingos: [String]! "if the game has already finished" finished: Boolean "the id of the followup game if it has been created" followup: ID "returns the last n chat-messages" getMessages(input: MessageQueryInput): [ChatMessage!] } type BingoUser { "the id of the bingo user" id: ID! "the id of the currently active bingo game" game: ID "the name of the user" username: String } type BingoGrid { "the grid represented as string matrix" wordGrid: [[String]]! "the grid represented as bingo field matrix" fieldGrid: [[BingoField]]! "if there is a bingo" bingo: Boolean } type BingoField { "the word contained in the bingo field" word: String "if the word was already heared" submitted: Boolean! "the base64 encoded word" base64Word: String } type ChatMessage { "the id of the message" id: ID! "the content of the message" content: String! # the content of the message rendered by markdown-it htmlContent: String "the type of the message" type: MessageType! "the username of the sender" username: String # the time the message was send (in milliseconds) datetime: String! } # # # input Types # # # input joinLobbyInput { "the id of the lobby to join" lobbyId: ID! } input CreateGameInput { "the words used to fill the bingo grid" words: [String!]! "the size of the bingo grid" size: Int! = 3 } input WordInput { "the normal word string" word: String # the base64-encoded word base64Word: String } input UsernameInput { "the username string" username: String! } input IdInput { "the id" id: ID! } input MessageInput { "the message" message: String! } input MessageQueryInput { "search for a specific id" id: ID "get the last n messages" last: Int = 10 } # # # enum Types # # # enum MessageType { USER ERROR INFO }