enum RoleLevel { ADMIN MEMBER } enum ActionLevel { ORG TEAM PROJECT } enum ObjectType { ORG TEAM PROJECT TASK TASK_GROUP TASK_CHECKLIST TASK_CHECKLIST_ITEM } 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! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: 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: UUID! } input FindProject { projectID: UUID! } input FindTask { taskID: UUID! } input FindTeam { teamID: UUID! }