# From https://github.com/HackGT/checkin2/blob/master/api.graphql
schema {
query: Query
mutation: Mutation
subscription: Subscription,
}
# The root mutation type, use it to change things
type Mutation {
# Check-in or check-out a user by specifying the tag name. Check-in when checkin is set to true; check-out when checkin is set to false
check_in(user: ID!, tag: String!, checkin: Boolean!): UserAndTags
# Add tag to all users
add_tag(tag: String!, start: String, end: String, warnOnDuplicates: Boolean = false): Tag
}
# The root query type, use to query data
type Query {
# Get a list of unique tags currently available to set.
# set only_current to true to only get events that are currently happening based on their start/end times
tags(only_current: Boolean): [Tag!]!
# Retrieve user through a user ID or through the token passed to
# Query. Leave id empty if you'd like to view the currently logged in
# user.
user(id: ID!): UserAndTags
# All the users in the database, useful for polling for new user information.
# This is paginated, n is the number of results, and pagination_token is the last ID
# seen from the latest page retrieved, if you want the first page leave this out.
users(pagination_token: ID, n: Int!, filter: UserFilter): [UserAndTags!]!
# Search through a user's name and email through regex
search_user_simple(search: String!, use_regex: Boolean = false, offset: Int!, n: Int!, filter: UserFilter): [UserAndTags!]!
# All possible application question branches
application_branches: [String!]!
# All possible confirmation question branches
confirmation_branches: [String!]!
# All possible question branches from all types!
question_branches: [String!]!
# All possible question names, or names of question in a branch
question_names(branch: String): [String!]
# Counts of checked in users per tag.
# Only includes tags that have at least one user checked in.
tag_counts(tags: [String!]): [TagData]!
}
# The root subscription type, all subscribes go through here
type Subscription {
tag_change: UserAndTags!
}
type UserAndTags {
# Tags associated with a user
tags: [TagState!]!
# Registration info about the user
user: User!
}
# Information about checkin tags
type Tag {
# The unique name of the tag (not human label)
name: String!
# The start time of the event associated with the tag
start: String
# The end time of the event associated with the tag
end: String
# Whether to error on a repeated check in/out event for a user and this tag
warnOnDuplicates: Boolean
}
# Record of checked in / checked out activity
type TagDetail {
checked_in: Boolean!
# Date when attendee was checked in or out
checked_in_date: String!
# The username of the admin that checked thte attendee in or out
checked_in_by: String!
# Whether, at the time this checkin attempt was made, the operation was successful. If false, the check-in
# attempt was rejected. If true or the tag has warnOnDuplicates = true, the check-in request was accepted.
checkin_success: Boolean!
}
type TagState {
tag: Tag!
checked_in: Boolean!
# If the tag has warnOnDuplicates = false, then this will always return true. Otherwise, true indicates a valid check-in
# and false indicates a duplicate check-in event (e.g., trying to check-in a user for a tag they are already checked into).
checkin_success: Boolean!
# Date when the attendee was checked in
checked_in_date: String!
# The username of the admin that checked the attendee in
checked_in_by: String!
# Details object for the most recent successful check in/out
last_successful_checkin: TagDetail
# An array of previous checked in / checked out events
details: [TagDetail]!
}
# NOTE: Type names that forward to registration must match the type names
# in the registration API itself for fragments to work currently.
# Registration info about the user
type User {
# User ID, valid across the entire system
id: ID!
# User's full name
name: String!
# User's email
email: String!
# If the user's email is a verified email
email_verified: Boolean!
# If the user has applied to the event
applied: Boolean!
# If the user has been accepted to the event
accepted: Boolean!
# If the user has been accepted and notified of his or her acceptance
accepted_and_notified: Boolean!
# If the user has submitted a confirmation
confirmed: Boolean!
# A users assigned confirmation branch
confirmationBranch: String
# A users application phase answers
# null if user has not filled out this phase
application: Branch
# A users confirmation phase answers
# null if user has not filled out this phase
confirmation: Branch
# Get the answer to one of the questions asked of this user.
# If branch is not given, find this question name in any branch.
question(name: String!): FormItem
# Get the answer to multiple questions asked of this user, userful
# when the set of questions you want to receive is set by the user.
questions(names: [String!]!): [FormItem!]!
# What team, if any, is the user a part of?
team: Team
# ID used for pagination
pagination_token: ID!
}
# Filter users by this criterea.
# A value means to filter by that value, no value
# means that filter will be ignored.
input UserFilter {
# If the user has applied to the event
applied: Boolean
# If the user has been accepted to the event
accepted: Boolean
# If the user has indicated that he or she is attending
confirmed: Boolean
# The type of application a user filled out (e.g. Mentor, Participant)
application_branch: String
# The type of confirmation a user filled out (e.g. Needs Reimbursement)
confirmation_branch: String
}
# A filled out form (application / confirmation form)
type Branch {
# What type of application did the user fill out (mentor, participant, etc.)
# when going through the form?
type: String!
# A key-value list of questions and answers from the confirmation application
data: [FormItem!]!
# Start of application as some RFC's date string
start_time: String
# Submit time of application as some RFC's date string
submit_time: String
}
# Application teams
type Team {
# ID of the Team
id: ID!
}
# Entries to various forms (application, confirmation, etc.)
type FormItem {
# Name of the question / form item
name: String!
# Type of form item (textbox, checkbox, phone no.)
type: String!
# Value (if just one string)
value: String
# Values (if many selections are applicable, like checkbox)
values: [String]
# File if type contains a file
file: File
}
# Uploaded file
type File {
# The original name of the uploaded file
original_name: String!
# The file's encoding
encoding: String!
# The file's mimetype
mimetype: String!
# The path to the file in S3
path: String!
# The size of the file in bytes
size: Int!
}
# Aggregated count data for a tag
type TagData {
name: String!
# Count of checked in users
count: Int!
}