extend type Mutation { createTask(input: NewTask!): Task! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK_GROUP) deleteTask(input: DeleteTaskInput!): DeleteTaskPayload! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK) updateTaskDescription(input: UpdateTaskDescriptionInput!): Task! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK) updateTaskLocation(input: NewTaskLocation!): UpdateTaskLocationPayload! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK) updateTaskName(input: UpdateTaskName!): Task! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK) setTaskComplete(input: SetTaskComplete!): Task! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK) updateTaskDueDate(input: UpdateTaskDueDate!): Task! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK) assignTask(input: AssignTaskInput): Task! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK) unassignTask(input: UnassignTaskInput): Task! @hasRole(roles: [ADMIN, MEMBER], level: PROJECT, type: TASK) } input NewTask { taskGroupID: UUID! 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! hasTime: Boolean! dueDate: Time } input SetTaskComplete { taskID: UUID! complete: Boolean! } input NewTaskLocation { taskID: UUID! taskGroupID: UUID! position: Float! } input DeleteTaskInput { taskID: UUID! } type DeleteTaskPayload { taskID: UUID! } input UpdateTaskName { taskID: UUID! name: String! }