"""
Can only be resolved by authenticated users.

When the condition fails, the following can be returned (following this priority):
1) `OperationInfo`/`OperationMessage` if those types are allowed at the return type
2) `null` in case the field is not mandatory (e.g. `String` or `[String]`)
3) An empty list in case the field is a list (e.g. `[String]!`)
4) An empty `Connection` in case the return type is a relay connection
2) Otherwise, an error will be raised
"""
directive @isAuthenticated repeatable on FIELD_DEFINITION

"""
Can only be resolved by staff users.

When the condition fails, the following can be returned (following this priority):
1) `OperationInfo`/`OperationMessage` if those types are allowed at the return type
2) `null` in case the field is not mandatory (e.g. `String` or `[String]`)
3) An empty list in case the field is a list (e.g. `[String]!`)
4) An empty `Connection` in case the return type is a relay connection
2) Otherwise, an error will be raised
"""
directive @isStaff repeatable on FIELD_DEFINITION

"""
Can only be resolved by superuser users.

When the condition fails, the following can be returned (following this priority):
1) `OperationInfo`/`OperationMessage` if those types are allowed at the return type
2) `null` in case the field is not mandatory (e.g. `String` or `[String]`)
3) An empty list in case the field is a list (e.g. `[String]!`)
4) An empty `Connection` in case the return type is a relay connection
2) Otherwise, an error will be raised
"""
directive @isSuperuser repeatable on FIELD_DEFINITION

"""
Will check if the user has any/all permissions for the resolved value of this field before returning it.

When the condition fails, the following can be returned (following this priority):
1) `OperationInfo`/`OperationMessage` if those types are allowed at the return type
2) `null` in case the field is not mandatory (e.g. `String` or `[String]`)
3) An empty list in case the field is a list (e.g. `[String]!`)
4) An empty `Connection` in case the return type is a relay connection
2) Otherwise, an error will be raised
"""
directive @hasRetvalPerm(permissions: [PermDefinition!]!, any: Boolean! = true) repeatable on FIELD_DEFINITION

"""
Will check if the user has any/all permissions to resolve this.

When the condition fails, the following can be returned (following this priority):
1) `OperationInfo`/`OperationMessage` if those types are allowed at the return type
2) `null` in case the field is not mandatory (e.g. `String` or `[String]`)
3) An empty list in case the field is a list (e.g. `[String]!`)
4) An empty `Connection` in case the return type is a relay connection
2) Otherwise, an error will be raised
"""
directive @hasPerm(permissions: [PermDefinition!]!, any: Boolean! = true) repeatable on FIELD_DEFINITION

input AssigneeInputPartial {
  id: ID
  throughDefaults: AssigneeThroughInputPartial
}

"""Add/remove/set the selected nodes."""
input AssigneeInputPartialListInput {
  set: [AssigneeInputPartial!]
  add: [AssigneeInputPartial!]
  remove: [AssigneeInputPartial!]
}

input AssigneeThroughInputPartial {
  owner: Boolean
}

type AssigneeType implements Node {
  """The Globally Unique ID of this object"""
  id: ID!
  user: UserType!
  owner: Boolean!
}

union CreateIssuePayload = IssueType | OperationInfo

union CreateMilestonePayload = MilestoneType | OperationInfo

input CreateProjectInput {
  name: String!

  """The project's cost"""
  cost: Decimal!
  dueDate: DateTime = null
}

union CreateProjectPayload = ProjectType | OperationInfo

union CreateProjectWithMilestonesPayload = ProjectType | OperationInfo

input CreateQuizInput {
  title: String!
  fullCleanOptions: Boolean! = false
}

union CreateQuizPayload = QuizType | OperationInfo

"""Date (isoformat)"""
scalar Date

input DateFilterLookup {
  """Exact match. Filter will be skipped on `null` value"""
  exact: Date

  """Assignment test. Filter will be skipped on `null` value"""
  isNull: Boolean

  """
  Exact match of items in a given list. Filter will be skipped on `null` value
  """
  inList: [Date!]

  """Greater than. Filter will be skipped on `null` value"""
  gt: Date

  """Greater than or equal to. Filter will be skipped on `null` value"""
  gte: Date

  """Less than. Filter will be skipped on `null` value"""
  lt: Date

  """Less than or equal to. Filter will be skipped on `null` value"""
  lte: Date

  """Inclusive range test (between)"""
  range: DateRangeLookup
  year: IntComparisonFilterLookup
  month: IntComparisonFilterLookup
  day: IntComparisonFilterLookup
  weekDay: IntComparisonFilterLookup
  isoWeekDay: IntComparisonFilterLookup
  week: IntComparisonFilterLookup
  isoYear: IntComparisonFilterLookup
  quarter: IntComparisonFilterLookup
}

input DateRangeLookup {
  start: Date = null
  end: Date = null
}

"""Date with time (isoformat)"""
scalar DateTime

"""Decimal (fixed-point)"""
scalar Decimal

union DeleteIssuePayload = IssueType | OperationInfo

union DeleteIssueWithKeyAttrPayload = IssueType | OperationInfo

input DjangoModelFilterInput {
  pk: ID!
}

type FavoriteType implements Node {
  """The Globally Unique ID of this object"""
  id: ID!
  name: String!
  user: UserType!
  issue: IssueType!
}

"""A connection to a list of items."""
type FavoriteTypeConnection {
  """Pagination data for this connection"""
  pageInfo: PageInfo!

  """Contains the nodes in this connection"""
  edges: [FavoriteTypeEdge!]!

  """Total quantity of existing nodes."""
  totalCount: Int
}

"""An edge in a connection."""
type FavoriteTypeEdge {
  """A cursor for use in pagination"""
  cursor: String!

  """The item at the end of the edge"""
  node: FavoriteType!
}

input IntComparisonFilterLookup {
  """Exact match. Filter will be skipped on `null` value"""
  exact: Int

  """Assignment test. Filter will be skipped on `null` value"""
  isNull: Boolean

  """
  Exact match of items in a given list. Filter will be skipped on `null` value
  """
  inList: [Int!]

  """Greater than. Filter will be skipped on `null` value"""
  gt: Int

  """Greater than or equal to. Filter will be skipped on `null` value"""
  gte: Int

  """Less than. Filter will be skipped on `null` value"""
  lt: Int

  """Less than or equal to. Filter will be skipped on `null` value"""
  lte: Int

  """Inclusive range test (between)"""
  range: IntRangeLookup
}

input IntRangeLookup {
  start: Int = null
  end: Int = null
}

input IssueAssigneeInputPartial {
  id: ID
  user: NodeInputPartial
  owner: Boolean
}

"""Add/remove/set the selected nodes."""
input IssueAssigneeInputPartialListInput {
  set: [IssueAssigneeInputPartial!]
  add: [IssueAssigneeInputPartial!]
  remove: [IssueAssigneeInputPartial!]
}

input IssueFilter {
  name: StrFilterLookup
  AND: IssueFilter
  OR: IssueFilter
  NOT: IssueFilter
  DISTINCT: Boolean
  search: String
}

input IssueInput {
  name: String!
  milestone: MilestoneInputPartial!
  priority: Int
  kind: String
  tags: [NodeInput!]
  extra: Int
}

input IssueInputPartial {
  id: ID!
  name: String
  milestone: MilestoneInputPartial!
  priority: Int
  kind: String
  tags: TagInputPartialListInput
  extra: Int
  assignees: AssigneeInputPartialListInput
  issueAssignees: IssueAssigneeInputPartialListInput
}

input IssueInputPartialWithoutId {
  name: String
  milestone: MilestoneInputPartial!
  priority: Int
  kind: String
  tags: TagInputPartialListInput
  extra: Int
  assignees: AssigneeInputPartialListInput
  issueAssignees: IssueAssigneeInputPartialListInput
}

input IssueOrder {
  name: Ordering
}

type IssueType implements Node & Named {
  """The Globally Unique ID of this object"""
  id: ID!
  name: String!
  milestone: MilestoneType!
  priority: Int!
  kind: String
  nameWithPriority: String!
  nameWithKind: String!
  tags: [TagType!]!
  issueAssignees: [AssigneeType!]!
  staffAssignees: [StaffType!]!
  favoriteSet(
    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): FavoriteTypeConnection!
  milestoneName: String!
  milestoneNameWithoutOnlyOptimization: String!
  privateName: String
}

"""A connection to a list of items."""
type IssueTypeConnection {
  """Pagination data for this connection"""
  pageInfo: PageInfo!

  """Contains the nodes in this connection"""
  edges: [IssueTypeEdge!]!

  """Total quantity of existing nodes."""
  totalCount: Int
}

"""An edge in a connection."""
type IssueTypeEdge {
  """A cursor for use in pagination"""
  cursor: String!

  """The item at the end of the edge"""
  node: IssueType!
}

type IssueTypeOffsetPaginated {
  pageInfo: OffsetPaginationInfo!

  """Total count of existing results."""
  totalCount: Int!

  """List of paginated results."""
  results: [IssueType!]!
}

input MilestoneFilter {
  name: StrFilterLookup
  project: DjangoModelFilterInput
  search: String
  AND: MilestoneFilter
  OR: MilestoneFilter
  NOT: MilestoneFilter
  DISTINCT: Boolean
}

input MilestoneInput {
  name: String!
  project: ProjectInputPartial!
  issues: [MilestoneIssueInput!]
}

input MilestoneInputPartial {
  id: ID
  name: String
  issues: [MilestoneIssueInputPartial!]
  project: ProjectInputPartial
}

input MilestoneIssueInput {
  name: String!
}

input MilestoneIssueInputPartial {
  name: String
  tags: [TagInputPartial!]
}

input MilestoneOrder {
  name: Ordering
  project: ProjectOrder
}

type MilestoneType implements Node & Named {
  """The Globally Unique ID of this object"""
  id: ID!
  name: String!
  dueDate: Date
  project: ProjectType!
  issues(filters: IssueFilter, order: IssueOrder, pagination: OffsetPaginationInput): [IssueType!]!
  firstIssue: IssueType
  firstIssueRequired: IssueType!
  graphqlPath: String!
  mixedAnnotatedPrefetch: String!
  mixedPrefetchAnnotated: String!
  issuesPaginated(pagination: OffsetPaginationInput, order: IssueOrder): IssueTypeOffsetPaginated!
  issuesWithFilters(
    filters: IssueFilter

    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): IssueTypeConnection!
  myIssues: [IssueType!]!
  myBugsCount: Int!
  asyncField(value: String!): String!
}

"""A connection to a list of items."""
type MilestoneTypeConnection {
  """Pagination data for this connection"""
  pageInfo: PageInfo!

  """Contains the nodes in this connection"""
  edges: [MilestoneTypeEdge!]!

  """Total quantity of existing nodes."""
  totalCount: Int
}

"""An edge in a connection."""
type MilestoneTypeEdge {
  """A cursor for use in pagination"""
  cursor: String!

  """The item at the end of the edge"""
  node: MilestoneType!
}

type MilestoneTypeOffsetPaginated {
  pageInfo: OffsetPaginationInfo!

  """Total count of existing results."""
  totalCount: Int!

  """List of paginated results."""
  results: [MilestoneType!]!
}

type Mutation {
  createIssue(input: IssueInput!): CreateIssuePayload!
  updateIssue(input: IssueInputPartial!): UpdateIssuePayload!
  updateIssueWithKeyAttr(input: IssueInputPartialWithoutId!): UpdateIssueWithKeyAttrPayload!
  deleteIssue(input: NodeInput!): DeleteIssuePayload!
  deleteIssueWithKeyAttr(input: MilestoneIssueInput!): DeleteIssueWithKeyAttrPayload!
  createProjectWithMilestones(input: ProjectInputPartial!): CreateProjectWithMilestonesPayload!
  updateProject(input: ProjectInputPartial!): UpdateProjectPayload!
  createMilestone(input: MilestoneInput!): CreateMilestonePayload!
  createProject(
    """Input data for `createProject` mutation"""
    input: CreateProjectInput!
  ): CreateProjectPayload!
  createQuiz(
    """Input data for `createQuiz` mutation"""
    input: CreateQuizInput!
  ): CreateQuizPayload!
}

interface Named {
  name: String!
}

"""An object with a Globally Unique ID"""
interface Node {
  """The Globally Unique ID of this object"""
  id: ID!
}

"""Input of an object that implements the `Node` interface."""
input NodeInput {
  id: ID!
}

"""Input of an object that implements the `Node` interface."""
input NodeInputPartial {
  id: ID
}

type OffsetPaginationInfo {
  offset: Int!
  limit: Int
}

input OffsetPaginationInput {
  offset: Int! = 0
  limit: Int
}

type OperationInfo {
  """List of messages returned by the operation."""
  messages: [OperationMessage!]!
}

type OperationMessage {
  """The kind of this message."""
  kind: OperationMessageKind!

  """The error message."""
  message: String!

  """
  The field that caused the error, or `null` if it isn't associated with any particular field.
  """
  field: String

  """The error code, or `null` if no error code was set."""
  code: String
}

enum OperationMessageKind {
  INFO
  WARNING
  ERROR
  PERMISSION
  VALIDATION
}

enum Ordering {
  ASC
  ASC_NULLS_FIRST
  ASC_NULLS_LAST
  DESC
  DESC_NULLS_FIRST
  DESC_NULLS_LAST
}

"""Information to aid in pagination."""
type PageInfo {
  """When paginating forwards, are there more items?"""
  hasNextPage: Boolean!

  """When paginating backwards, are there more items?"""
  hasPreviousPage: Boolean!

  """When paginating backwards, the cursor to continue."""
  startCursor: String

  """When paginating forwards, the cursor to continue."""
  endCursor: String
}

type ProjectConnection {
  """Pagination data for this connection"""
  pageInfo: PageInfo!

  """Contains the nodes in this connection"""
  edges: [ProjectTypeEdge!]!

  """Total quantity of existing nodes."""
  totalCount: Int
}

input ProjectFilter {
  name: StrFilterLookup
  dueDate: DateFilterLookup
  AND: ProjectFilter
  OR: ProjectFilter
  NOT: ProjectFilter
  DISTINCT: Boolean
}

input ProjectInputPartial {
  id: ID
  name: String
  milestones: [MilestoneInputPartial!]
}

input ProjectOrder {
  id: Ordering
  name: Ordering
}

type ProjectType implements Node & Named {
  """The Globally Unique ID of this object"""
  id: ID!
  name: String!
  dueDate: Date
  isSmall: Boolean!
  isDelayed: Boolean!
  cost: Decimal @isAuthenticated
  milestones(filters: MilestoneFilter, order: MilestoneOrder, pagination: OffsetPaginationInput): [MilestoneType!]!
  milestonesCount: Int!
  customMilestonesModelProperty: [MilestoneType!]!
  firstMilestone: MilestoneType
  firstMilestoneRequired: MilestoneType!
  milestoneConn(
    filters: MilestoneFilter
    order: MilestoneOrder

    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): MilestoneTypeConnection!
  milestonesPaginated(pagination: OffsetPaginationInput, filters: MilestoneFilter, order: MilestoneOrder): MilestoneTypeOffsetPaginated!
  customMilestones: [MilestoneType!]!
}

"""An edge in a connection."""
type ProjectTypeEdge {
  """A cursor for use in pagination"""
  cursor: String!

  """The item at the end of the edge"""
  node: ProjectType!
}

type ProjectTypeOffsetPaginated {
  pageInfo: OffsetPaginationInfo!

  """Total count of existing results."""
  totalCount: Int!

  """List of paginated results."""
  results: [ProjectType!]!
}

type Query {
  node(
    """The ID of the object."""
    id: ID!
  ): Node
  favorite(
    """The ID of the object."""
    id: ID!
  ): FavoriteType

  """Foobar"""
  issue(
    """The ID of the object."""
    id: ID!
  ): IssueType
  milestone(
    """The ID of the object."""
    id: ID!
  ): MilestoneType
  milestoneMandatory(
    """The ID of the object."""
    id: ID!
  ): MilestoneType!
  milestones(
    """The IDs of the objects."""
    ids: [ID!]!
  ): [MilestoneType!]!
  project(
    """The ID of the object."""
    id: ID!
  ): ProjectType
  projectMandatory(
    """The ID of the object."""
    id: ID!
  ): ProjectType!
  projectLoginRequired(
    """The ID of the object."""
    id: ID!
  ): ProjectType @isAuthenticated
  tag(
    """The ID of the object."""
    id: ID!
  ): TagType
  staff(
    """The ID of the object."""
    id: ID!
  ): StaffType
  staffList(
    """The IDs of the objects."""
    ids: [ID!]!
  ): [StaffType]!
  userList: [UserType!]!
  issueList: [IssueType!]!
  issuesPaginated(pagination: OffsetPaginationInput): IssueTypeOffsetPaginated!
  milestoneList(filters: MilestoneFilter, order: MilestoneOrder, pagination: OffsetPaginationInput): [MilestoneType!]!
  projectList(filters: ProjectFilter): [ProjectType!]!
  projectsPaginated(pagination: OffsetPaginationInput, filters: ProjectFilter): ProjectTypeOffsetPaginated!
  tagList: [TagType!]!
  favoriteConn(
    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): FavoriteTypeConnection!
  issueConn(
    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): IssueTypeConnection!
  milestoneConn(
    filters: MilestoneFilter
    order: MilestoneOrder

    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): MilestoneTypeConnection!
  projectConn(
    filters: ProjectFilter

    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): ProjectConnection!
  tagConn(
    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): TagTypeConnection!
  staffConn(
    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): StaffTypeConnection!
  quizList: [QuizType!]!
  issueLoginRequired(
    """The ID of the object."""
    id: ID!
  ): IssueType! @isAuthenticated
  issueLoginRequiredOptional(
    """The ID of the object."""
    id: ID!
  ): IssueType @isAuthenticated
  issueStaffRequired(
    """The ID of the object."""
    id: ID!
  ): IssueType! @isStaff
  issueStaffRequiredOptional(
    """The ID of the object."""
    id: ID!
  ): IssueType @isStaff
  issueSuperuserRequired(
    """The ID of the object."""
    id: ID!
  ): IssueType! @isSuperuser
  issueSuperuserRequiredOptional(
    """The ID of the object."""
    id: ID!
  ): IssueType @isSuperuser
  issuePermRequired(
    """The ID of the object."""
    id: ID!
  ): IssueType! @hasPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issuePermRequiredOptional(
    """The ID of the object."""
    id: ID!
  ): IssueType @hasPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issueListPermRequired: [IssueType!]! @hasPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issuesPaginatedPermRequired(pagination: OffsetPaginationInput): IssueTypeOffsetPaginated! @hasPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issueConnPermRequired(
    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): IssueTypeConnection! @hasPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issueObjPermRequired(
    """The ID of the object."""
    id: ID!
  ): IssueType! @hasRetvalPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issueObjPermRequiredOptional(
    """The ID of the object."""
    id: ID!
  ): IssueType @hasRetvalPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issueListObjPermRequired: [IssueType!]! @hasRetvalPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issueListObjPermRequiredPaginated(pagination: OffsetPaginationInput): [IssueType!]! @hasRetvalPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issuesPaginatedObjPermRequired(pagination: OffsetPaginationInput): IssueTypeOffsetPaginated! @hasRetvalPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  issueConnObjPermRequired(
    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): IssueTypeConnection! @hasRetvalPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  asyncUserResolve: Boolean! @hasPerm(permissions: [{app: "projects", permission: "view_issue"}], any: true)
  me: UserType
  projectConnWithResolver(
    name: String!
    filters: ProjectFilter

    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): ProjectConnection!
}

type QuizType implements Node {
  """The Globally Unique ID of this object"""
  id: ID!
  title: String!
  sequence: Int!
}

type RoleType implements Node & Named {
  """The Globally Unique ID of this object"""
  id: ID!
  name: String!
  description: String!
}

type StaffType implements Node {
  """The Globally Unique ID of this object"""
  id: ID!
  email: String!
  isActive: Boolean!
  isSuperuser: Boolean!
  isStaff: Boolean!
}

"""A connection to a list of items."""
type StaffTypeConnection {
  """Pagination data for this connection"""
  pageInfo: PageInfo!

  """Contains the nodes in this connection"""
  edges: [StaffTypeEdge!]!

  """Total quantity of existing nodes."""
  totalCount: Int
}

"""An edge in a connection."""
type StaffTypeEdge {
  """A cursor for use in pagination"""
  cursor: String!

  """The item at the end of the edge"""
  node: StaffType!
}

input StrFilterLookup {
  """Exact match. Filter will be skipped on `null` value"""
  exact: String

  """Assignment test. Filter will be skipped on `null` value"""
  isNull: Boolean

  """
  Exact match of items in a given list. Filter will be skipped on `null` value
  """
  inList: [String!]

  """Case-insensitive exact match. Filter will be skipped on `null` value"""
  iExact: String

  """
  Case-sensitive containment test. Filter will be skipped on `null` value
  """
  contains: String

  """
  Case-insensitive containment test. Filter will be skipped on `null` value
  """
  iContains: String

  """Case-sensitive starts-with. Filter will be skipped on `null` value"""
  startsWith: String

  """Case-insensitive starts-with. Filter will be skipped on `null` value"""
  iStartsWith: String

  """Case-sensitive ends-with. Filter will be skipped on `null` value"""
  endsWith: String

  """Case-insensitive ends-with. Filter will be skipped on `null` value"""
  iEndsWith: String

  """
  Case-sensitive regular expression match. Filter will be skipped on `null` value
  """
  regex: String

  """
  Case-insensitive regular expression match. Filter will be skipped on `null` value
  """
  iRegex: String
}

input TagInputPartial {
  id: ID
  name: String
}

"""Add/remove/set the selected nodes."""
input TagInputPartialListInput {
  set: [TagInputPartial!]
  add: [TagInputPartial!]
  remove: [TagInputPartial!]
}

type TagType implements Node & Named {
  """The Globally Unique ID of this object"""
  id: ID!
  name: String!
  issues(
    """Returns the items in the list that come before the specified cursor."""
    before: String = null

    """Returns the items in the list that come after the specified cursor."""
    after: String = null

    """Returns the first n items from the list."""
    first: Int = null

    """Returns the items in the list that come after the specified cursor."""
    last: Int = null
  ): IssueTypeConnection!
  issuesWithSelectedRelatedMilestoneAndProject: [IssueType!]!
}

"""A connection to a list of items."""
type TagTypeConnection {
  """Pagination data for this connection"""
  pageInfo: PageInfo!

  """Contains the nodes in this connection"""
  edges: [TagTypeEdge!]!

  """Total quantity of existing nodes."""
  totalCount: Int
}

"""An edge in a connection."""
type TagTypeEdge {
  """A cursor for use in pagination"""
  cursor: String!

  """The item at the end of the edge"""
  node: TagType!
}

union UpdateIssuePayload = IssueType | OperationInfo

union UpdateIssueWithKeyAttrPayload = IssueType | OperationInfo

union UpdateProjectPayload = ProjectType | OperationInfo

type UserType implements Node {
  """The Globally Unique ID of this object"""
  id: ID!
  email: String!
  isActive: Boolean!
  isSuperuser: Boolean!
  isStaff: Boolean!
  role: RoleType
  roleName: String
  roleDescription: String
  fullName: String!
}

"""Permission definition for schema directives."""
input PermDefinition {
  """
  The app to which we are requiring permission. If this is empty that means that we are checking the permission directly.
  """
  app: String

  """
  The permission itself. If this is empty that means that we are checking for any permission for the given app.
  """
  permission: String
}