786 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			GraphQL
		
	
	
	
	
	
			
		
		
	
	
			786 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			GraphQL
		
	
	
	
	
	
scalar Time
 | 
						|
scalar UUID
 | 
						|
scalar Upload
 | 
						|
 | 
						|
enum RoleCode {
 | 
						|
  owner
 | 
						|
  admin
 | 
						|
  member
 | 
						|
  observer
 | 
						|
}
 | 
						|
 | 
						|
type ProjectLabel {
 | 
						|
  id: ID!
 | 
						|
  createdDate: Time!
 | 
						|
  labelColor: LabelColor!
 | 
						|
  name: String
 | 
						|
}
 | 
						|
 | 
						|
type LabelColor {
 | 
						|
  id: ID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
  colorHex: String!
 | 
						|
}
 | 
						|
 | 
						|
type TaskLabel {
 | 
						|
  id: ID!
 | 
						|
  projectLabel: ProjectLabel!
 | 
						|
  assignedDate: Time!
 | 
						|
}
 | 
						|
 | 
						|
type ProfileIcon {
 | 
						|
  url: String
 | 
						|
  initials: String
 | 
						|
  bgColor: String
 | 
						|
}
 | 
						|
 | 
						|
type OwnersList  {
 | 
						|
  projects: [UUID!]!
 | 
						|
  teams: [UUID!]!
 | 
						|
}
 | 
						|
 | 
						|
type Member {
 | 
						|
  id: ID!
 | 
						|
  role: Role!
 | 
						|
  fullName: String!
 | 
						|
  username: String!
 | 
						|
  profileIcon: ProfileIcon!
 | 
						|
  owned: OwnedList!
 | 
						|
  member: MemberList!
 | 
						|
}
 | 
						|
 | 
						|
type RefreshToken {
 | 
						|
  id: ID!
 | 
						|
  userId: UUID!
 | 
						|
  expiresAt: Time!
 | 
						|
  createdAt: Time!
 | 
						|
}
 | 
						|
 | 
						|
type Role {
 | 
						|
  code: String!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
type OwnedList {
 | 
						|
  teams: [Team!]!
 | 
						|
  projects: [Project!]!
 | 
						|
}
 | 
						|
 | 
						|
type MemberList {
 | 
						|
  teams: [Team!]!
 | 
						|
  projects: [Project!]!
 | 
						|
}
 | 
						|
 | 
						|
type UserAccount {
 | 
						|
  id: ID!
 | 
						|
  email: String!
 | 
						|
  createdAt: Time!
 | 
						|
  fullName: String!
 | 
						|
  initials: String!
 | 
						|
  bio: String!
 | 
						|
  role: Role!
 | 
						|
  username: String!
 | 
						|
  profileIcon: ProfileIcon!
 | 
						|
  owned: OwnedList!
 | 
						|
  member: MemberList!
 | 
						|
}
 | 
						|
 | 
						|
type Team {
 | 
						|
  id: ID!
 | 
						|
  createdAt: Time!
 | 
						|
  name: String!
 | 
						|
  members: [Member!]!
 | 
						|
}
 | 
						|
 | 
						|
type Project {
 | 
						|
  id: ID!
 | 
						|
  createdAt: Time!
 | 
						|
  name: String!
 | 
						|
  team: Team!
 | 
						|
  taskGroups: [TaskGroup!]!
 | 
						|
  members: [Member!]!
 | 
						|
  labels: [ProjectLabel!]!
 | 
						|
}
 | 
						|
 | 
						|
type TaskGroup {
 | 
						|
  id: ID!
 | 
						|
  projectID: String!
 | 
						|
  createdAt: Time!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
  tasks: [Task!]!
 | 
						|
}
 | 
						|
 | 
						|
type ChecklistBadge {
 | 
						|
  complete: Int!
 | 
						|
  total: Int!
 | 
						|
}
 | 
						|
 | 
						|
type TaskBadges {
 | 
						|
  checklist: ChecklistBadge
 | 
						|
}
 | 
						|
 | 
						|
type Task {
 | 
						|
  id: ID!
 | 
						|
  taskGroup: TaskGroup!
 | 
						|
  createdAt: Time!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
  description: String
 | 
						|
  dueDate: Time
 | 
						|
  complete: Boolean!
 | 
						|
  completedAt: Time
 | 
						|
  assigned: [Member!]!
 | 
						|
  labels: [TaskLabel!]!
 | 
						|
  checklists: [TaskChecklist!]!
 | 
						|
  badges: TaskBadges!
 | 
						|
}
 | 
						|
 | 
						|
type Organization {
 | 
						|
  id: ID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
type TaskChecklistItem {
 | 
						|
  id: ID!
 | 
						|
  name: String!
 | 
						|
  taskChecklistID: UUID!
 | 
						|
  complete: Boolean!
 | 
						|
  position: Float!
 | 
						|
  dueDate: Time!
 | 
						|
}
 | 
						|
 | 
						|
type TaskChecklist {
 | 
						|
  id: ID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
  items: [TaskChecklistItem!]!
 | 
						|
}
 | 
						|
 | 
						|
enum RoleLevel {
 | 
						|
  ADMIN
 | 
						|
  MEMBER
 | 
						|
}
 | 
						|
 | 
						|
enum ActionLevel {
 | 
						|
  ORG
 | 
						|
  TEAM
 | 
						|
  PROJECT
 | 
						|
}
 | 
						|
 | 
						|
enum ObjectType {
 | 
						|
  ORG
 | 
						|
  TEAM
 | 
						|
  PROJECT
 | 
						|
  TASK
 | 
						|
}
 | 
						|
 | 
						|
directive @hasRole(roles: [RoleLevel!]!, level: ActionLevel!, type: ObjectType!) on FIELD_DEFINITION
 | 
						|
 | 
						|
type Query {
 | 
						|
  organizations: [Organization!]!
 | 
						|
  users: [UserAccount!]!
 | 
						|
  findUser(input: FindUser!): UserAccount!
 | 
						|
  findProject(input: FindProject!): Project!
 | 
						|
  findTask(input: FindTask!): Task!
 | 
						|
  projects(input: ProjectsFilter): [Project!]!
 | 
						|
  findTeam(input: FindTeam!): Team!
 | 
						|
  teams: [Team!]!
 | 
						|
  labelColors: [LabelColor!]!
 | 
						|
  taskGroups: [TaskGroup!]!
 | 
						|
  me: MePayload!
 | 
						|
}
 | 
						|
 | 
						|
type Mutation
 | 
						|
 | 
						|
type TeamRole {
 | 
						|
  teamID: UUID!
 | 
						|
  roleCode: RoleCode!
 | 
						|
}
 | 
						|
 | 
						|
type ProjectRole {
 | 
						|
  projectID: UUID!
 | 
						|
  roleCode: RoleCode!
 | 
						|
}
 | 
						|
 | 
						|
type MePayload {
 | 
						|
  user: UserAccount!
 | 
						|
  teamRoles: [TeamRole!]!
 | 
						|
  projectRoles: [ProjectRole!]!
 | 
						|
}
 | 
						|
 | 
						|
input ProjectsFilter {
 | 
						|
  teamID: UUID
 | 
						|
}
 | 
						|
 | 
						|
input FindUser {
 | 
						|
  userId: String!
 | 
						|
}
 | 
						|
 | 
						|
input FindProject {
 | 
						|
  projectID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input FindTask {
 | 
						|
  taskID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input FindTeam {
 | 
						|
  teamID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
extend type Query {
 | 
						|
  notifications: [Notification!]!
 | 
						|
}
 | 
						|
 | 
						|
enum EntityType {
 | 
						|
  TASK
 | 
						|
}
 | 
						|
 | 
						|
enum ActorType {
 | 
						|
  USER
 | 
						|
}
 | 
						|
 | 
						|
enum ActionType {
 | 
						|
  TASK_MEMBER_ADDED
 | 
						|
}
 | 
						|
 | 
						|
type NotificationActor {
 | 
						|
  id: UUID!
 | 
						|
  type: ActorType!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
type NotificationEntity {
 | 
						|
  id: UUID!
 | 
						|
  type: EntityType!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
type Notification {
 | 
						|
  id: ID!
 | 
						|
  entity: NotificationEntity!
 | 
						|
  actionType: ActionType!
 | 
						|
  actor: NotificationActor!
 | 
						|
  read: Boolean!
 | 
						|
  createdAt: Time!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createProject(input: NewProject!): Project! @hasRole(roles: [ADMIN], level: TEAM, type: TEAM)
 | 
						|
  deleteProject(input: DeleteProject!):
 | 
						|
    DeleteProjectPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateProjectName(input: UpdateProjectName):
 | 
						|
    Project! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
}
 | 
						|
 | 
						|
input NewProject {
 | 
						|
  userID: UUID!
 | 
						|
  teamID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectName {
 | 
						|
  projectID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteProject {
 | 
						|
  projectID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteProjectPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  project: Project!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createProjectLabel(input: NewProjectLabel!):
 | 
						|
    ProjectLabel! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  deleteProjectLabel(input: DeleteProjectLabel!):
 | 
						|
    ProjectLabel! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateProjectLabel(input: UpdateProjectLabel!):
 | 
						|
    ProjectLabel! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateProjectLabelName(input: UpdateProjectLabelName!):
 | 
						|
    ProjectLabel! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateProjectLabelColor(input: UpdateProjectLabelColor!):
 | 
						|
    ProjectLabel! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
}
 | 
						|
 | 
						|
input NewProjectLabel {
 | 
						|
  projectID: UUID!
 | 
						|
  labelColorID: UUID!
 | 
						|
  name: String
 | 
						|
}
 | 
						|
 | 
						|
input DeleteProjectLabel {
 | 
						|
  projectLabelID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectLabelName {
 | 
						|
  projectLabelID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectLabel {
 | 
						|
  projectLabelID: UUID!
 | 
						|
  labelColorID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectLabelColor {
 | 
						|
  projectLabelID: UUID!
 | 
						|
  labelColorID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createProjectMember(input: CreateProjectMember!):
 | 
						|
    CreateProjectMemberPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  deleteProjectMember(input: DeleteProjectMember!):
 | 
						|
    DeleteProjectMemberPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateProjectMemberRole(input: UpdateProjectMemberRole!):
 | 
						|
    UpdateProjectMemberRolePayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
}
 | 
						|
 | 
						|
input CreateProjectMember {
 | 
						|
  projectID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type CreateProjectMemberPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  member: Member!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteProjectMember {
 | 
						|
  projectID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteProjectMemberPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  member: Member!
 | 
						|
  projectID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateProjectMemberRole {
 | 
						|
  projectID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
  roleCode: RoleCode!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateProjectMemberRolePayload {
 | 
						|
  ok: Boolean!
 | 
						|
  member: Member!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createTask(input: NewTask!):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  deleteTask(input: DeleteTaskInput!):
 | 
						|
    DeleteTaskPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
 | 
						|
  updateTaskDescription(input: UpdateTaskDescriptionInput!):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskLocation(input: NewTaskLocation!):
 | 
						|
    UpdateTaskLocationPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskName(input: UpdateTaskName!):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  setTaskComplete(input: SetTaskComplete!):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskDueDate(input: UpdateTaskDueDate!):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
 | 
						|
  assignTask(input: AssignTaskInput):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: TASK)
 | 
						|
  unassignTask(input: UnassignTaskInput):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: TASK)
 | 
						|
}
 | 
						|
 | 
						|
input NewTask {
 | 
						|
  taskGroupID: String!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input AssignTaskInput {
 | 
						|
  taskID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UnassignTaskInput {
 | 
						|
  taskID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskDescriptionInput {
 | 
						|
  taskID: UUID!
 | 
						|
  description: String!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateTaskLocationPayload {
 | 
						|
  previousTaskGroupID: UUID!
 | 
						|
  task: Task!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskDueDate  {
 | 
						|
  taskID: UUID!
 | 
						|
  dueDate: Time
 | 
						|
}
 | 
						|
 | 
						|
input SetTaskComplete {
 | 
						|
  taskID: UUID!
 | 
						|
  complete: Boolean!
 | 
						|
}
 | 
						|
 | 
						|
input NewTaskLocation {
 | 
						|
  taskID: UUID!
 | 
						|
  taskGroupID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTaskInput {
 | 
						|
  taskID: String!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTaskPayload {
 | 
						|
  taskID: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskName {
 | 
						|
  taskID: String!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createTaskChecklist(input: CreateTaskChecklist!):
 | 
						|
    TaskChecklist! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  deleteTaskChecklist(input: DeleteTaskChecklist!):
 | 
						|
    DeleteTaskChecklistPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskChecklistName(input: UpdateTaskChecklistName!):
 | 
						|
    TaskChecklist! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  createTaskChecklistItem(input: CreateTaskChecklistItem!):
 | 
						|
    TaskChecklistItem! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskChecklistItemName(input: UpdateTaskChecklistItemName!):
 | 
						|
    TaskChecklistItem! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  setTaskChecklistItemComplete(input: SetTaskChecklistItemComplete!):
 | 
						|
    TaskChecklistItem! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  deleteTaskChecklistItem(input: DeleteTaskChecklistItem!):
 | 
						|
    DeleteTaskChecklistItemPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskChecklistLocation(input: UpdateTaskChecklistLocation!):
 | 
						|
    UpdateTaskChecklistLocationPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskChecklistItemLocation(input: UpdateTaskChecklistItemLocation!):
 | 
						|
    UpdateTaskChecklistItemLocationPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskChecklistItemLocation {
 | 
						|
  checklistID: UUID!
 | 
						|
  checklistItemID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateTaskChecklistItemLocationPayload {
 | 
						|
  checklistID: UUID!
 | 
						|
  prevChecklistID: UUID!
 | 
						|
  checklistItem: TaskChecklistItem!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskChecklistLocation {
 | 
						|
  checklistID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateTaskChecklistLocationPayload {
 | 
						|
  checklist: TaskChecklist!
 | 
						|
}
 | 
						|
 | 
						|
input CreateTaskChecklist {
 | 
						|
  taskID: UUID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTaskChecklistItemPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  taskChecklistItem: TaskChecklistItem!
 | 
						|
}
 | 
						|
 | 
						|
input CreateTaskChecklistItem {
 | 
						|
  taskChecklistID: UUID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input SetTaskChecklistItemComplete {
 | 
						|
  taskChecklistItemID: UUID!
 | 
						|
  complete: Boolean!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTaskChecklistItem {
 | 
						|
  taskChecklistItemID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskChecklistItemName {
 | 
						|
  taskChecklistItemID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskChecklistName {
 | 
						|
  taskChecklistID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
input DeleteTaskChecklist {
 | 
						|
  taskChecklistID: UUID!
 | 
						|
}
 | 
						|
type DeleteTaskChecklistPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  taskChecklist: TaskChecklist!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createTaskGroup(input: NewTaskGroup!):
 | 
						|
    TaskGroup! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskGroupLocation(input: NewTaskGroupLocation!):
 | 
						|
    TaskGroup! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  updateTaskGroupName(input: UpdateTaskGroupName!):
 | 
						|
    TaskGroup! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  deleteTaskGroup(input: DeleteTaskGroupInput!):
 | 
						|
    DeleteTaskGroupPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  duplicateTaskGroup(input: DuplicateTaskGroup!):
 | 
						|
    DuplicateTaskGroupPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  sortTaskGroup(input: SortTaskGroup!):
 | 
						|
    SortTaskGroupPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  deleteTaskGroupTasks(input: DeleteTaskGroupTasks!):
 | 
						|
    DeleteTaskGroupTasksPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTaskGroupTasks {
 | 
						|
  taskGroupID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTaskGroupTasksPayload {
 | 
						|
  taskGroupID: UUID!
 | 
						|
  tasks: [UUID!]!
 | 
						|
}
 | 
						|
 | 
						|
input TaskPositionUpdate {
 | 
						|
  taskID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
type SortTaskGroupPayload {
 | 
						|
  taskGroupID: UUID!
 | 
						|
  tasks: [Task!]!
 | 
						|
}
 | 
						|
 | 
						|
input SortTaskGroup {
 | 
						|
  taskGroupID: UUID!
 | 
						|
  tasks: [TaskPositionUpdate!]!
 | 
						|
}
 | 
						|
 | 
						|
input DuplicateTaskGroup {
 | 
						|
  projectID: UUID!
 | 
						|
  taskGroupID: UUID!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
type DuplicateTaskGroupPayload {
 | 
						|
  taskGroup: TaskGroup!
 | 
						|
}
 | 
						|
 | 
						|
input NewTaskGroupLocation {
 | 
						|
  taskGroupID: UUID!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTaskGroupName  {
 | 
						|
  taskGroupID: UUID!
 | 
						|
  name: String!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTaskGroupInput {
 | 
						|
  taskGroupID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTaskGroupPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  affectedRows: Int!
 | 
						|
  taskGroup: TaskGroup!
 | 
						|
}
 | 
						|
 | 
						|
input NewTaskGroup {
 | 
						|
  projectID: String!
 | 
						|
  name: String!
 | 
						|
  position: Float!
 | 
						|
}
 | 
						|
 | 
						|
input AddTaskLabelInput {
 | 
						|
  taskID: UUID!
 | 
						|
  projectLabelID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input RemoveTaskLabelInput {
 | 
						|
  taskLabelID: UUID!
 | 
						|
}
 | 
						|
input ToggleTaskLabelInput {
 | 
						|
  taskID: UUID!
 | 
						|
  projectLabelID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type ToggleTaskLabelPayload {
 | 
						|
  active: Boolean!
 | 
						|
  task: Task!
 | 
						|
}
 | 
						|
extend type Mutation {
 | 
						|
  addTaskLabel(input: AddTaskLabelInput):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  removeTaskLabel(input: RemoveTaskLabelInput):
 | 
						|
    Task! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
  toggleTaskLabel(input: ToggleTaskLabelInput!):
 | 
						|
    ToggleTaskLabelPayload! @hasRole(roles: [ADMIN], level: PROJECT, type: PROJECT)
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  deleteTeam(input: DeleteTeam!):
 | 
						|
    DeleteTeamPayload! @hasRole(roles:[ ADMIN], level: TEAM, type: TEAM)
 | 
						|
  createTeam(input: NewTeam!):
 | 
						|
    Team! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
 | 
						|
}
 | 
						|
 | 
						|
input NewTeam {
 | 
						|
  name: String!
 | 
						|
  organizationID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTeam {
 | 
						|
  teamID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTeamPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  team: Team!
 | 
						|
  projects: [Project!]!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createTeamMember(input: CreateTeamMember!):
 | 
						|
    CreateTeamMemberPayload! @hasRole(roles: [ADMIN], level: TEAM, type: TEAM)
 | 
						|
  updateTeamMemberRole(input: UpdateTeamMemberRole!):
 | 
						|
    UpdateTeamMemberRolePayload! @hasRole(roles: [ADMIN], level: TEAM, type: TEAM)
 | 
						|
  deleteTeamMember(input: DeleteTeamMember!):
 | 
						|
    DeleteTeamMemberPayload! @hasRole(roles: [ADMIN], level: TEAM, type: TEAM)
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
input DeleteTeamMember {
 | 
						|
  teamID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
  newOwnerID: UUID
 | 
						|
}
 | 
						|
 | 
						|
type DeleteTeamMemberPayload {
 | 
						|
  teamID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
  affectedProjects: [Project!]!
 | 
						|
}
 | 
						|
 | 
						|
input CreateTeamMember {
 | 
						|
  userID: UUID!
 | 
						|
  teamID: UUID!
 | 
						|
}
 | 
						|
 | 
						|
type CreateTeamMemberPayload {
 | 
						|
  team: Team!
 | 
						|
  teamMember: Member!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateTeamMemberRole {
 | 
						|
  teamID: UUID!
 | 
						|
  userID: UUID!
 | 
						|
  roleCode: RoleCode!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateTeamMemberRolePayload {
 | 
						|
  ok: Boolean!
 | 
						|
  teamID: UUID!
 | 
						|
  member: Member!
 | 
						|
}
 | 
						|
 | 
						|
extend type Mutation {
 | 
						|
  createRefreshToken(input: NewRefreshToken!): RefreshToken!
 | 
						|
  createUserAccount(input: NewUserAccount!):
 | 
						|
    UserAccount! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
 | 
						|
  deleteUserAccount(input: DeleteUserAccount!):
 | 
						|
    DeleteUserAccountPayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
 | 
						|
 | 
						|
  logoutUser(input: LogoutUser!): Boolean!
 | 
						|
  clearProfileAvatar:  UserAccount!
 | 
						|
 | 
						|
  updateUserPassword(input: UpdateUserPassword!): UpdateUserPasswordPayload!
 | 
						|
  updateUserRole(input: UpdateUserRole!):
 | 
						|
   UpdateUserRolePayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
 | 
						|
  updateUserInfo(input: UpdateUserInfo!):
 | 
						|
    UpdateUserInfoPayload! @hasRole(roles: [ADMIN], level: ORG, type: ORG)
 | 
						|
}
 | 
						|
 | 
						|
type UpdateUserInfoPayload {
 | 
						|
  user: UserAccount!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateUserInfo {
 | 
						|
  name: String!
 | 
						|
  initials: String!
 | 
						|
  email: String!
 | 
						|
  bio: String!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateUserPassword {
 | 
						|
  userID: UUID!
 | 
						|
  password: String!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateUserPasswordPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  user: UserAccount!
 | 
						|
}
 | 
						|
 | 
						|
input UpdateUserRole {
 | 
						|
  userID: UUID!
 | 
						|
  roleCode: RoleCode!
 | 
						|
}
 | 
						|
 | 
						|
type UpdateUserRolePayload {
 | 
						|
  user: UserAccount!
 | 
						|
}
 | 
						|
 | 
						|
input NewRefreshToken {
 | 
						|
  userId: String!
 | 
						|
}
 | 
						|
 | 
						|
input NewUserAccount {
 | 
						|
  username: String!
 | 
						|
  email: String!
 | 
						|
  fullName: String!
 | 
						|
  initials: String!
 | 
						|
  password: String!
 | 
						|
  roleCode: String!
 | 
						|
}
 | 
						|
 | 
						|
input LogoutUser {
 | 
						|
  userID: String!
 | 
						|
}
 | 
						|
 | 
						|
input DeleteUserAccount {
 | 
						|
  userID: UUID!
 | 
						|
  newOwnerID: UUID
 | 
						|
}
 | 
						|
 | 
						|
type DeleteUserAccountPayload {
 | 
						|
  ok: Boolean!
 | 
						|
  userAccount: UserAccount!
 | 
						|
}
 |