From c2b42433f49f5e19a4fe6a4db4d565c84e35147a Mon Sep 17 00:00:00 2001 From: JJ-8 <34778827+JJ-8@users.noreply.github.com> Date: Sun, 25 May 2025 14:17:53 +0200 Subject: [PATCH 1/5] feat: Add TaskAssignDialog component for assigning users to tasks Now a manager or admin can assign tasks to other users. So task assignment can be triggered by someone else instead of only your own account. - Implemented TaskAssignDialog.vue to allow task assignment to team members. - Integrated member selection and assignment logic using GraphQL mutations. - Updated TaskMenu.vue to include an option for assigning tasks for admins and managers. - Defined GraphQL mutations for assigning and unassigning users in Assign.graphql. --- api/migrations/56-assign-users-to-task.sql | 35 + api/src/discord/agile/hooks.ts | 66 +- front/graphql.schema.json | 2721 ++++------------- .../src/components/Task/TaskAssignDialog.vue | 158 + front/src/components/Task/TaskMenu.vue | 78 +- front/src/ctfnote/profiles.ts | 2 +- front/src/ctfnote/tasks.ts | 27 + front/src/generated/graphql.ts | 449 ++- front/src/graphql/Assign.graphql | 17 + 9 files changed, 1192 insertions(+), 2361 deletions(-) create mode 100644 api/migrations/56-assign-users-to-task.sql create mode 100644 front/src/components/Task/TaskAssignDialog.vue create mode 100644 front/src/graphql/Assign.graphql diff --git a/api/migrations/56-assign-users-to-task.sql b/api/migrations/56-assign-users-to-task.sql new file mode 100644 index 000000000..57ff1bccb --- /dev/null +++ b/api/migrations/56-assign-users-to-task.sql @@ -0,0 +1,35 @@ +-- Migration: Assign users to tasks by managers (GraphQL integration) +-- This migration introduces GraphQL functions to allow managers to assign/unassign any team member to a task. + +-- GraphQL mutation for assign_user_to_task +CREATE OR REPLACE FUNCTION ctfnote.assign_user_to_task(profile_id int, task_id int) + RETURNS ctfnote.work_on_task + AS $$ + WITH inserted AS ( + INSERT INTO ctfnote.work_on_task (task_id, profile_id, active) + VALUES (assign_user_to_task.task_id, assign_user_to_task.profile_id, TRUE) + ON CONFLICT (task_id, profile_id) DO UPDATE + SET active = TRUE + RETURNING * + ) + SELECT * FROM inserted; +$$ +LANGUAGE SQL; + +GRANT EXECUTE ON FUNCTION ctfnote.assign_user_to_task(profile_id int, task_id int) TO user_manager; + +-- GraphQL mutation for unassign_user_from_task +CREATE OR REPLACE FUNCTION ctfnote.unassign_user_from_task(profile_id int, task_id int) + RETURNS ctfnote.work_on_task + AS $$ + WITH updated AS ( + UPDATE ctfnote.work_on_task + SET active = FALSE + WHERE task_id = unassign_user_from_task.task_id + AND profile_id = unassign_user_from_task.profile_id + RETURNING * + ) + SELECT * FROM updated; +$$ LANGUAGE SQL; + +GRANT EXECUTE ON FUNCTION ctfnote.unassign_user_from_task(profile_id int, task_id int) TO user_manager; diff --git a/api/src/discord/agile/hooks.ts b/api/src/discord/agile/hooks.ts index 52ef5773f..b46e203b1 100644 --- a/api/src/discord/agile/hooks.ts +++ b/api/src/discord/agile/hooks.ts @@ -100,15 +100,6 @@ async function handleUpdateTask( } } -async function handleStartWorkingOn( - guild: Guild, - taskId: bigint, - userId: bigint -) { - await moveChannel(guild, taskId, null, ChannelMovingEvent.START); - await sendStartWorkingOnMessage(guild, userId, taskId); -} - async function handleUpdateUserRole( guild: Guild, userId: bigint, @@ -177,7 +168,9 @@ const discordMutationHook = (_build: Build) => (fieldContext: Context) => { fieldContext.scope.fieldName !== "deleteCtf" && fieldContext.scope.fieldName !== "updateUserRole" && fieldContext.scope.fieldName !== "setDiscordEventLink" && - fieldContext.scope.fieldName !== "registerWithToken" + fieldContext.scope.fieldName !== "registerWithToken" && + fieldContext.scope.fieldName !== "assignUserToTask" && + fieldContext.scope.fieldName !== "unassignUserFromTask" ) { return null; } @@ -225,7 +218,7 @@ const discordMutationHook = (_build: Build) => (fieldContext: Context) => { }); break; case "startWorkingOn": - handleStartWorkingOn( + sendStartWorkingOnMessage( guild, args.input.taskId, context.jwtClaims.user_id @@ -285,6 +278,27 @@ const discordMutationHook = (_build: Build) => (fieldContext: Context) => { console.error("Failed to register with token.", err); }); break; + case "assignUserToTask": + sendStartWorkingOnMessage( + guild, + args.input.profileId, + args.input.taskId, + context.jwtClaims.user_id + ).catch((err) => { + console.error("Failed to start working on task.", err); + }); + break; + case "unassignUserFromTask": + sendStopWorkingOnMessage( + guild, + args.input.profileId, + args.input.taskId, + false, + context.jwtClaims.user_id + ).catch((err) => { + console.error("Failed to stop working on task.", err); + }); + break; default: break; } @@ -348,31 +362,37 @@ const discordMutationHook = (_build: Build) => (fieldContext: Context) => { export async function sendStartWorkingOnMessage( guild: Guild, userId: bigint, - task: Task | bigint + task: Task | bigint, + assignedBy: bigint | null = null ) { await moveChannel(guild, task, null, ChannelMovingEvent.START); - return sendMessageToTask( - guild, - task, - `${await convertToUsernameFormat(userId)} is working on this task!` - ); + + let msg = `${await convertToUsernameFormat(userId)} is working on this task!`; + if (assignedBy != null) { + msg += ` (assigned by: ${await convertToUsernameFormat(assignedBy)})`; + } + + return sendMessageToTask(guild, task, msg); } export async function sendStopWorkingOnMessage( guild: Guild, userId: bigint, task: Task | bigint, - cancel = false + cancel = false, + assignedBy: bigint | null = null ) { let text = "stopped"; if (cancel) { text = "cancelled"; } - return sendMessageToTask( - guild, - task, - `${await convertToUsernameFormat(userId)} ${text} working on this task!` - ); + + let msg = `${await convertToUsernameFormat(userId)} ${text} working on this task!`; + if (assignedBy != null) { + msg += ` (assigned by: ${await convertToUsernameFormat(assignedBy)})`; + } + + return sendMessageToTask(guild, task, msg); } export async function handleDeleteCtf(ctfId: string | bigint, guild: Guild) { diff --git a/front/graphql.schema.json b/front/graphql.schema.json index f3b4fbaf9..7db7e0fd4 100644 --- a/front/graphql.schema.json +++ b/front/graphql.schema.json @@ -1,13 +1,16 @@ { "__schema": { "queryType": { - "name": "Query" + "name": "Query", + "kind": "OBJECT" }, "mutationType": { - "name": "Mutation" + "name": "Mutation", + "kind": "OBJECT" }, "subscriptionType": { - "name": "Subscription" + "name": "Subscription", + "kind": "OBJECT" }, "types": [ { @@ -98,6 +101,159 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "AssignUserToTaskInput", + "description": "All input for the `assignUserToTask` mutation.", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "clientMutationId", + "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "profileId", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "taskId", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "AssignUserToTaskPayload", + "description": "The output of our `assignUserToTask` mutation.", + "isOneOf": null, + "fields": [ + { + "name": "clientMutationId", + "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "profile", + "description": "Reads a single `Profile` that is related to this `WorkOnTask`.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Profile", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "query", + "description": "Our root query field type. Allows us to run any query from our mutation payload.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Query", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "task", + "description": "Reads a single `Task` that is related to this `WorkOnTask`.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Task", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "workOnTask", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "WorkOnTask", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "workOnTaskEdge", + "description": "An edge for our `WorkOnTask`. May be used by Relay 1.", + "args": [ + { + "name": "orderBy", + "description": "The method to use when ordering `WorkOnTask`.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "WorkOnTasksOrderBy", + "ofType": null + } + } + }, + "defaultValue": "[PRIMARY_KEY_ASC]", + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "WorkOnTasksEdge", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, { "kind": "OBJECT", "name": "AssignedTag", @@ -224,94 +380,6 @@ "enumValues": null, "possibleTypes": null }, - { - "kind": "INPUT_OBJECT", - "name": "AssignedTagFilter", - "description": "A filter to be used against `AssignedTag` object types. All fields are combined with a logical ‘and.’", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "and", - "description": "Checks for all expressions in this list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AssignedTagFilter", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "not", - "description": "Negates the expression.", - "type": { - "kind": "INPUT_OBJECT", - "name": "AssignedTagFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "or", - "description": "Checks for any expressions in this list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "AssignedTagFilter", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "tagId", - "description": "Filter by the object’s `tagId` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "taskId", - "description": "Filter by the object’s `taskId` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, { "kind": "INPUT_OBJECT", "name": "AssignedTagInput", @@ -555,17 +623,17 @@ }, { "kind": "INPUT_OBJECT", - "name": "BooleanFilter", - "description": "A filter to be used against Boolean fields. All fields are combined with a logical ‘and.’", + "name": "CancelWorkingOnInput", + "description": "All input for the `cancelWorkingOn` mutation.", "isOneOf": false, "fields": null, "inputFields": [ { - "name": "distinctFrom", - "description": "Not equal to the specified value, treating null like an ordinary value.", + "name": "clientMutationId", + "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.", "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "String", "ofType": null }, "defaultValue": null, @@ -573,195 +641,35 @@ "deprecationReason": null }, { - "name": "equalTo", - "description": "Equal to the specified value.", + "name": "taskId", + "description": null, "type": { "kind": "SCALAR", - "name": "Boolean", + "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CancelWorkingOnPayload", + "description": "The output of our `cancelWorkingOn` mutation.", + "isOneOf": null, + "fields": [ { - "name": "greaterThan", - "description": "Greater than the specified value.", + "name": "clientMutationId", + "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", + "args": [], "type": { "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "greaterThanOrEqualTo", - "description": "Greater than or equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "in", - "description": "Included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isNull", - "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThan", - "description": "Less than the specified value.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThanOrEqualTo", - "description": "Less than or equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notDistinctFrom", - "description": "Equal to the specified value, treating null like an ordinary value.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notEqualTo", - "description": "Not equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notIn", - "description": "Not included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CancelWorkingOnInput", - "description": "All input for the `cancelWorkingOn` mutation.", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "clientMutationId", - "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "taskId", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CancelWorkingOnPayload", - "description": "The output of our `cancelWorkingOn` mutation.", - "isOneOf": null, - "fields": [ - { - "name": "clientMutationId", - "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", + "name": "String", "ofType": null }, "isDeprecated": false, @@ -2113,18 +2021,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "InvitationFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -2651,42 +2547,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "endTime", - "description": "Filter by the object’s `endTime` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "DatetimeFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "granted", - "description": "Filter by the object’s `granted` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "BooleanFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "id", - "description": "Filter by the object’s `id` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "not", "description": "Negates the expression.", @@ -2719,30 +2579,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "secretsId", - "description": "Filter by the object’s `secretsId` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "startTime", - "description": "Filter by the object’s `startTime` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "DatetimeFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "title", "description": "Filter by the object’s `title` field.", @@ -3341,114 +3177,38 @@ }, { "kind": "INPUT_OBJECT", - "name": "CtfSecretFilter", - "description": "A filter to be used against `CtfSecret` object types. All fields are combined with a logical ‘and.’", + "name": "CtfSecretPatch", + "description": "Represents an update to a `CtfSecret`. Fields that are set will be updated.", "isOneOf": false, "fields": null, "inputFields": [ { - "name": "and", - "description": "Checks for all expressions in this list.", + "name": "credentials", + "description": null, "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CtfSecretFilter", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "CtfSecretsConnection", + "description": "A connection to a list of `CtfSecret` values.", + "isOneOf": null, + "fields": [ { - "name": "id", - "description": "Filter by the object’s `id` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "not", - "description": "Negates the expression.", - "type": { - "kind": "INPUT_OBJECT", - "name": "CtfSecretFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "or", - "description": "Checks for any expressions in this list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "CtfSecretFilter", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "CtfSecretPatch", - "description": "Represents an update to a `CtfSecret`. Fields that are set will be updated.", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "credentials", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "CtfSecretsConnection", - "description": "A connection to a list of `CtfSecret` values.", - "isOneOf": null, - "fields": [ - { - "name": "edges", - "description": "A list of edges which contains the `CtfSecret` and cursor to aid in pagination.", - "args": [], + "name": "edges", + "description": "A list of edges which contains the `CtfSecret` and cursor to aid in pagination.", + "args": [], "type": { "kind": "NON_NULL", "name": null, @@ -3857,166 +3617,6 @@ "enumValues": null, "possibleTypes": null }, - { - "kind": "INPUT_OBJECT", - "name": "DatetimeFilter", - "description": "A filter to be used against Datetime fields. All fields are combined with a logical ‘and.’", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "distinctFrom", - "description": "Not equal to the specified value, treating null like an ordinary value.", - "type": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "equalTo", - "description": "Equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "greaterThan", - "description": "Greater than the specified value.", - "type": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "greaterThanOrEqualTo", - "description": "Greater than or equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "in", - "description": "Included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isNull", - "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThan", - "description": "Less than the specified value.", - "type": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThanOrEqualTo", - "description": "Less than or equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notDistinctFrom", - "description": "Equal to the specified value, treating null like an ordinary value.", - "type": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notEqualTo", - "description": "Not equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notIn", - "description": "Not included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Datetime", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, { "kind": "INPUT_OBJECT", "name": "DeleteAssignedTagByNodeIdInput", @@ -5208,219 +4808,59 @@ "possibleTypes": null }, { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "description": "A filter to be used against Int fields. All fields are combined with a logical ‘and.’", - "isOneOf": false, - "fields": null, - "inputFields": [ + "kind": "OBJECT", + "name": "Invitation", + "description": null, + "isOneOf": null, + "fields": [ { - "name": "distinctFrom", - "description": "Not equal to the specified value, treating null like an ordinary value.", + "name": "ctf", + "description": "Reads a single `Ctf` that is related to this `Invitation`.", + "args": [], "type": { - "kind": "SCALAR", - "name": "Int", + "kind": "OBJECT", + "name": "Ctf", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "equalTo", - "description": "Equal to the specified value.", + "name": "ctfId", + "description": null, + "args": [], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "greaterThan", - "description": "Greater than the specified value.", + "name": "nodeId", + "description": "A globally unique identifier. Can be used in various places throughout the system to identify this single value.", + "args": [], "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "ID", + "ofType": null + } }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "greaterThanOrEqualTo", - "description": "Greater than or equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "in", - "description": "Included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isNull", - "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThan", - "description": "Less than the specified value.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThanOrEqualTo", - "description": "Less than or equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notDistinctFrom", - "description": "Equal to the specified value, treating null like an ordinary value.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notEqualTo", - "description": "Not equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notIn", - "description": "Not included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Invitation", - "description": null, - "isOneOf": null, - "fields": [ - { - "name": "ctf", - "description": "Reads a single `Ctf` that is related to this `Invitation`.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Ctf", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ctfId", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "nodeId", - "description": "A globally unique identifier. Can be used in various places throughout the system to identify this single value.", - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "ID", - "ofType": null - } - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "profile", - "description": "Reads a single `Profile` that is related to this `Invitation`.", - "args": [], + "name": "profile", + "description": "Reads a single `Profile` that is related to this `Invitation`.", + "args": [], "type": { "kind": "OBJECT", "name": "Profile", @@ -5493,94 +4933,6 @@ "enumValues": null, "possibleTypes": null }, - { - "kind": "INPUT_OBJECT", - "name": "InvitationFilter", - "description": "A filter to be used against `Invitation` object types. All fields are combined with a logical ‘and.’", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "and", - "description": "Checks for all expressions in this list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "InvitationFilter", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ctfId", - "description": "Filter by the object’s `ctfId` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "not", - "description": "Negates the expression.", - "type": { - "kind": "INPUT_OBJECT", - "name": "InvitationFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "or", - "description": "Checks for any expressions in this list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "InvitationFilter", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "profileId", - "description": "Filter by the object’s `profileId` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, { "kind": "INPUT_OBJECT", "name": "InvitationInput", @@ -6045,7 +5397,7 @@ "deprecationReason": null }, { - "name": "cancelWorkingOn", + "name": "assignUserToTask", "description": null, "args": [ { @@ -6056,7 +5408,7 @@ "name": null, "ofType": { "kind": "INPUT_OBJECT", - "name": "CancelWorkingOnInput", + "name": "AssignUserToTaskInput", "ofType": null } }, @@ -6067,14 +5419,14 @@ ], "type": { "kind": "OBJECT", - "name": "CancelWorkingOnPayload", + "name": "AssignUserToTaskPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "changePassword", + "name": "cancelWorkingOn", "description": null, "args": [ { @@ -6085,7 +5437,7 @@ "name": null, "ofType": { "kind": "INPUT_OBJECT", - "name": "ChangePasswordInput", + "name": "CancelWorkingOnInput", "ofType": null } }, @@ -6096,15 +5448,15 @@ ], "type": { "kind": "OBJECT", - "name": "ChangePasswordPayload", + "name": "CancelWorkingOnPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createAssignedTag", - "description": "Creates a single `AssignedTag`.", + "name": "changePassword", + "description": null, "args": [ { "name": "input", @@ -6114,7 +5466,7 @@ "name": null, "ofType": { "kind": "INPUT_OBJECT", - "name": "CreateAssignedTagInput", + "name": "ChangePasswordInput", "ofType": null } }, @@ -6125,15 +5477,15 @@ ], "type": { "kind": "OBJECT", - "name": "CreateAssignedTagPayload", + "name": "ChangePasswordPayload", "ofType": null }, "isDeprecated": false, "deprecationReason": null }, { - "name": "createCtf", - "description": "Creates a single `Ctf`.", + "name": "createAssignedTag", + "description": "Creates a single `AssignedTag`.", "args": [ { "name": "input", @@ -6143,7 +5495,36 @@ "name": null, "ofType": { "kind": "INPUT_OBJECT", - "name": "CreateCtfInput", + "name": "CreateAssignedTagInput", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "CreateAssignedTagPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "createCtf", + "description": "Creates a single `Ctf`.", + "args": [ + { + "name": "input", + "description": "The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CreateCtfInput", "ofType": null } }, @@ -6964,6 +6345,35 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "unassignUserFromTask", + "description": null, + "args": [ + { + "name": "input", + "description": "The exclusive input argument for this mutation. An object type, make sure to see documentation for this object’s fields.", + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "UnassignUserFromTaskInput", + "ofType": null + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "UnassignUserFromTaskPayload", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "updateCtf", "description": "Updates a single `Ctf` using a unique key and a patch.", @@ -7808,18 +7218,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "InvitationFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -8110,18 +7508,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "WorkOnTaskFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -8422,18 +7808,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "id", - "description": "Filter by the object’s `id` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "not", "description": "Negates the expression.", @@ -8466,18 +7840,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "role", - "description": "Filter by the object’s `role` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "RoleFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "username", "description": "Filter by the object’s `username` field.", @@ -9279,18 +8641,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "AssignedTagFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -9512,18 +8862,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "CtfSecretFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -9734,18 +9072,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "ProfileFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -9819,18 +9145,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "CtfFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -9990,18 +9304,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "InvitationFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -10164,18 +9466,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "CtfFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -11283,18 +10573,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "WorkOnTaskFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -12012,17 +11290,17 @@ }, { "kind": "INPUT_OBJECT", - "name": "RoleFilter", - "description": "A filter to be used against Role fields. All fields are combined with a logical ‘and.’", + "name": "SetDiscordEventLinkInput", + "description": "All input for the `setDiscordEventLink` mutation.", "isOneOf": false, "fields": null, "inputFields": [ { - "name": "distinctFrom", - "description": "Not equal to the specified value, treating null like an ordinary value.", + "name": "clientMutationId", + "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.", "type": { - "kind": "ENUM", - "name": "Role", + "kind": "SCALAR", + "name": "String", "ofType": null }, "defaultValue": null, @@ -12030,11 +11308,11 @@ "deprecationReason": null }, { - "name": "equalTo", - "description": "Equal to the specified value.", + "name": "ctfId", + "description": null, "type": { - "kind": "ENUM", - "name": "Role", + "kind": "SCALAR", + "name": "Int", "ofType": null }, "defaultValue": null, @@ -12042,235 +11320,75 @@ "deprecationReason": null }, { - "name": "greaterThan", - "description": "Greater than the specified value.", + "name": "link", + "description": null, "type": { - "kind": "ENUM", - "name": "Role", + "kind": "SCALAR", + "name": "String", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "SetDiscordEventLinkPayload", + "description": "The output of our `setDiscordEventLink` mutation.", + "isOneOf": null, + "fields": [ { - "name": "greaterThanOrEqualTo", - "description": "Greater than or equal to the specified value.", + "name": "clientMutationId", + "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", + "args": [], "type": { - "kind": "ENUM", - "name": "Role", + "kind": "SCALAR", + "name": "String", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "in", - "description": "Included in the specified list.", + "name": "query", + "description": "Our root query field type. Allows us to run any query from our mutation payload.", + "args": [], "type": { - "kind": "LIST", + "kind": "OBJECT", + "name": "Query", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Setting", + "description": null, + "isOneOf": null, + "fields": [ + { + "name": "discordIntegrationEnabled", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", "name": null, "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "Role", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isNull", - "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThan", - "description": "Less than the specified value.", - "type": { - "kind": "ENUM", - "name": "Role", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThanOrEqualTo", - "description": "Less than or equal to the specified value.", - "type": { - "kind": "ENUM", - "name": "Role", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notDistinctFrom", - "description": "Equal to the specified value, treating null like an ordinary value.", - "type": { - "kind": "ENUM", - "name": "Role", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notEqualTo", - "description": "Not equal to the specified value.", - "type": { - "kind": "ENUM", - "name": "Role", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notIn", - "description": "Not included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "Role", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "SetDiscordEventLinkInput", - "description": "All input for the `setDiscordEventLink` mutation.", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "clientMutationId", - "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ctfId", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "link", - "description": null, - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "SetDiscordEventLinkPayload", - "description": "The output of our `setDiscordEventLink` mutation.", - "isOneOf": null, - "fields": [ - { - "name": "clientMutationId", - "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "query", - "description": "Our root query field type. Allows us to run any query from our mutation payload.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Query", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "Setting", - "description": null, - "isOneOf": null, - "fields": [ - { - "name": "discordIntegrationEnabled", - "description": null, - "args": [], - "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null + "kind": "SCALAR", + "name": "Boolean", + "ofType": null } }, "isDeprecated": false, @@ -12749,678 +11867,214 @@ "description": null, "args": [], "type": { - "kind": "OBJECT", - "name": "WorkOnTask", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "workOnTaskEdge", - "description": "An edge for our `WorkOnTask`. May be used by Relay 1.", - "args": [ - { - "name": "orderBy", - "description": "The method to use when ordering `WorkOnTask`.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "WorkOnTasksOrderBy", - "ofType": null - } - } - }, - "defaultValue": "[PRIMARY_KEY_ASC]", - "isDeprecated": false, - "deprecationReason": null - } - ], - "type": { - "kind": "OBJECT", - "name": "WorkOnTasksEdge", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "StopWorkingOnInput", - "description": "All input for the `stopWorkingOn` mutation.", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "clientMutationId", - "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "taskId", - "description": null, - "type": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "OBJECT", - "name": "StopWorkingOnPayload", - "description": "The output of our `stopWorkingOn` mutation.", - "isOneOf": null, - "fields": [ - { - "name": "clientMutationId", - "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", - "args": [], - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "profile", - "description": "Reads a single `Profile` that is related to this `WorkOnTask`.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Profile", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "query", - "description": "Our root query field type. Allows us to run any query from our mutation payload.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Query", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "task", - "description": "Reads a single `Task` that is related to this `WorkOnTask`.", - "args": [], - "type": { - "kind": "OBJECT", - "name": "Task", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "workOnTask", - "description": null, - "args": [], - "type": { - "kind": "OBJECT", - "name": "WorkOnTask", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "workOnTaskEdge", - "description": "An edge for our `WorkOnTask`. May be used by Relay 1.", - "args": [ - { - "name": "orderBy", - "description": "The method to use when ordering `WorkOnTask`.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "WorkOnTasksOrderBy", - "ofType": null - } - } - }, - "defaultValue": "[PRIMARY_KEY_ASC]", - "isDeprecated": false, - "deprecationReason": null - } - ], - "type": { - "kind": "OBJECT", - "name": "WorkOnTasksEdge", - "ofType": null - }, - "isDeprecated": false, - "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "String", - "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", - "isOneOf": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "StringFilter", - "description": "A filter to be used against String fields. All fields are combined with a logical ‘and.’", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "distinctFrom", - "description": "Not equal to the specified value, treating null like an ordinary value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "distinctFromInsensitive", - "description": "Not equal to the specified value, treating null like an ordinary value (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "endsWith", - "description": "Ends with the specified string (case-sensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "endsWithInsensitive", - "description": "Ends with the specified string (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "equalTo", - "description": "Equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "equalToInsensitive", - "description": "Equal to the specified value (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "greaterThan", - "description": "Greater than the specified value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "greaterThanInsensitive", - "description": "Greater than the specified value (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "greaterThanOrEqualTo", - "description": "Greater than or equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "greaterThanOrEqualToInsensitive", - "description": "Greater than or equal to the specified value (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "in", - "description": "Included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "inInsensitive", - "description": "Included in the specified list (case-insensitive).", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "includes", - "description": "Contains the specified string (case-sensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "includesInsensitive", - "description": "Contains the specified string (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "isNull", - "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", - "type": { - "kind": "SCALAR", - "name": "Boolean", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThan", - "description": "Less than the specified value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThanInsensitive", - "description": "Less than the specified value (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThanOrEqualTo", - "description": "Less than or equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "lessThanOrEqualToInsensitive", - "description": "Less than or equal to the specified value (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "like", - "description": "Matches the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "likeInsensitive", - "description": "Matches the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notDistinctFrom", - "description": "Equal to the specified value, treating null like an ordinary value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notDistinctFromInsensitive", - "description": "Equal to the specified value, treating null like an ordinary value (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notEndsWith", - "description": "Does not end with the specified string (case-sensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notEndsWithInsensitive", - "description": "Does not end with the specified string (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notEqualTo", - "description": "Not equal to the specified value.", - "type": { - "kind": "SCALAR", - "name": "String", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "notEqualToInsensitive", - "description": "Not equal to the specified value (case-insensitive).", - "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "WorkOnTask", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "notIn", - "description": "Not included in the specified list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } + "name": "workOnTaskEdge", + "description": "An edge for our `WorkOnTask`. May be used by Relay 1.", + "args": [ + { + "name": "orderBy", + "description": "The method to use when ordering `WorkOnTask`.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "WorkOnTasksOrderBy", + "ofType": null + } + } + }, + "defaultValue": "[PRIMARY_KEY_ASC]", + "isDeprecated": false, + "deprecationReason": null } + ], + "type": { + "kind": "OBJECT", + "name": "WorkOnTasksEdge", + "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "StopWorkingOnInput", + "description": "All input for the `stopWorkingOn` mutation.", + "isOneOf": false, + "fields": null, + "inputFields": [ { - "name": "notInInsensitive", - "description": "Not included in the specified list (case-insensitive).", + "name": "clientMutationId", + "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.", "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "String", - "ofType": null - } - } + "kind": "SCALAR", + "name": "String", + "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "notIncludes", - "description": "Does not contain the specified string (case-sensitive).", + "name": "taskId", + "description": null, "type": { "kind": "SCALAR", - "name": "String", + "name": "Int", "ofType": null }, "defaultValue": null, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "StopWorkingOnPayload", + "description": "The output of our `stopWorkingOn` mutation.", + "isOneOf": null, + "fields": [ { - "name": "notIncludesInsensitive", - "description": "Does not contain the specified string (case-insensitive).", + "name": "clientMutationId", + "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", + "args": [], "type": { "kind": "SCALAR", "name": "String", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "notLike", - "description": "Does not match the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.", + "name": "profile", + "description": "Reads a single `Profile` that is related to this `WorkOnTask`.", + "args": [], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Profile", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "notLikeInsensitive", - "description": "Does not match the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.", + "name": "query", + "description": "Our root query field type. Allows us to run any query from our mutation payload.", + "args": [], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Query", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "notStartsWith", - "description": "Does not start with the specified string (case-sensitive).", + "name": "task", + "description": "Reads a single `Task` that is related to this `WorkOnTask`.", + "args": [], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "Task", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "notStartsWithInsensitive", - "description": "Does not start with the specified string (case-insensitive).", + "name": "workOnTask", + "description": null, + "args": [], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "WorkOnTask", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "startsWith", - "description": "Starts with the specified string (case-sensitive).", + "name": "workOnTaskEdge", + "description": "An edge for our `WorkOnTask`. May be used by Relay 1.", + "args": [ + { + "name": "orderBy", + "description": "The method to use when ordering `WorkOnTask`.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "WorkOnTasksOrderBy", + "ofType": null + } + } + }, + "defaultValue": "[PRIMARY_KEY_ASC]", + "isDeprecated": false, + "deprecationReason": null + } + ], "type": { - "kind": "SCALAR", - "name": "String", + "kind": "OBJECT", + "name": "WorkOnTasksEdge", "ofType": null }, - "defaultValue": null, "isDeprecated": false, "deprecationReason": null - }, + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "String", + "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", + "isOneOf": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "StringFilter", + "description": "A filter to be used against String fields. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ { - "name": "startsWithInsensitive", - "description": "Starts with the specified string (case-insensitive).", + "name": "includesInsensitive", + "description": "Contains the specified string (case-insensitive).", "type": { "kind": "SCALAR", "name": "String", @@ -13562,18 +12216,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "AssignedTagFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -13887,18 +12529,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "id", - "description": "Filter by the object’s `id` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "not", "description": "Negates the expression.", @@ -14352,18 +12982,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "AssignedTagFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -14851,18 +13469,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "filter", - "description": "A filter to be used in determining which values should be returned by the collection.", - "type": { - "kind": "INPUT_OBJECT", - "name": "WorkOnTaskFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -14997,47 +13603,23 @@ "name": "TaskFilter", "description": "A filter to be used against `Task` object types. All fields are combined with a logical ‘and.’", "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "and", - "description": "Checks for all expressions in this list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "TaskFilter", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "ctfId", - "description": "Filter by the object’s `ctfId` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, + "fields": null, + "inputFields": [ { - "name": "id", - "description": "Filter by the object’s `id` field.", + "name": "and", + "description": "Checks for all expressions in this list.", "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "TaskFilter", + "ofType": null + } + } }, "defaultValue": null, "isDeprecated": false, @@ -15075,18 +13657,6 @@ "isDeprecated": false, "deprecationReason": null }, - { - "name": "solved", - "description": "Filter by the object’s `solved` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "BooleanFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, { "name": "title", "description": "Filter by the object’s `title` field.", @@ -15630,6 +14200,159 @@ ], "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "UnassignUserFromTaskInput", + "description": "All input for the `unassignUserFromTask` mutation.", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "clientMutationId", + "description": "An arbitrary string value with no semantic meaning. Will be included in the\npayload verbatim. May be used to track mutations by the client.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "profileId", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "taskId", + "description": null, + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "UnassignUserFromTaskPayload", + "description": "The output of our `unassignUserFromTask` mutation.", + "isOneOf": null, + "fields": [ + { + "name": "clientMutationId", + "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "profile", + "description": "Reads a single `Profile` that is related to this `WorkOnTask`.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Profile", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "query", + "description": "Our root query field type. Allows us to run any query from our mutation payload.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Query", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "task", + "description": "Reads a single `Task` that is related to this `WorkOnTask`.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Task", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "workOnTask", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "WorkOnTask", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "workOnTaskEdge", + "description": "An edge for our `WorkOnTask`. May be used by Relay 1.", + "args": [ + { + "name": "orderBy", + "description": "The method to use when ordering `WorkOnTask`.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "WorkOnTasksOrderBy", + "ofType": null + } + } + }, + "defaultValue": "[PRIMARY_KEY_ASC]", + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "WorkOnTasksEdge", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "UpdateCtfByNodeIdInput", @@ -17487,94 +16210,6 @@ "enumValues": null, "possibleTypes": null }, - { - "kind": "INPUT_OBJECT", - "name": "WorkOnTaskFilter", - "description": "A filter to be used against `WorkOnTask` object types. All fields are combined with a logical ‘and.’", - "isOneOf": false, - "fields": null, - "inputFields": [ - { - "name": "and", - "description": "Checks for all expressions in this list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "WorkOnTaskFilter", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "not", - "description": "Negates the expression.", - "type": { - "kind": "INPUT_OBJECT", - "name": "WorkOnTaskFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "or", - "description": "Checks for any expressions in this list.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "INPUT_OBJECT", - "name": "WorkOnTaskFilter", - "ofType": null - } - } - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "profileId", - "description": "Filter by the object’s `profileId` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - }, - { - "name": "taskId", - "description": "Filter by the object’s `taskId` field.", - "type": { - "kind": "INPUT_OBJECT", - "name": "IntFilter", - "ofType": null - }, - "defaultValue": null, - "isDeprecated": false, - "deprecationReason": null - } - ], - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, { "kind": "INPUT_OBJECT", "name": "WorkOnTaskInput", diff --git a/front/src/components/Task/TaskAssignDialog.vue b/front/src/components/Task/TaskAssignDialog.vue new file mode 100644 index 000000000..acbc0f59d --- /dev/null +++ b/front/src/components/Task/TaskAssignDialog.vue @@ -0,0 +1,158 @@ + + + diff --git a/front/src/components/Task/TaskMenu.vue b/front/src/components/Task/TaskMenu.vue index 53fbfdf63..0aa9f2a6e 100644 --- a/front/src/components/Task/TaskMenu.vue +++ b/front/src/components/Task/TaskMenu.vue @@ -20,6 +20,19 @@ Solved + + + + + + Assign + + @@ -43,7 +56,7 @@ diff --git a/front/src/ctfnote/profiles.ts b/front/src/ctfnote/profiles.ts index e2a1cec8f..0893d883c 100644 --- a/front/src/ctfnote/profiles.ts +++ b/front/src/ctfnote/profiles.ts @@ -63,7 +63,7 @@ export function buildProfile(p: ProfileFragment): Profile { const TeamSymbol: InjectionKey> = Symbol('team'); -export function provideTeam() { +export function provideTeam(): Ref { const { result: team } = getTeam(); provide(TeamSymbol, team); return team; diff --git a/front/src/ctfnote/tasks.ts b/front/src/ctfnote/tasks.ts index 8c945105a..42f8e6b73 100644 --- a/front/src/ctfnote/tasks.ts +++ b/front/src/ctfnote/tasks.ts @@ -8,6 +8,8 @@ import { useStartWorkingOnMutation, useStopWorkingOnMutation, useUpdateTaskMutation, + useAssignUserToTaskMutation, + useUnassignUserFromTaskMutation, } from 'src/generated/graphql'; import { Ctf, Id, Task, WorkingOn, makeId } from './models'; @@ -15,6 +17,7 @@ import { Dialog } from 'quasar'; import TaskEditDialogVue from '../components/Dialogs/TaskEditDialog.vue'; import TaskSolveDialogVue from '../components/Dialogs/TaskSolveDialog.vue'; import { ref, computed } from 'vue'; +import TaskAssignDialog from 'src/components/Task/TaskAssignDialog.vue'; export function buildWorkingOn(w: WorkingOnFragment): WorkingOn { return { @@ -57,6 +60,19 @@ export function useCancelWorkingOn() { return (task: Task) => doCancelWorking({ taskId: task.id }); } +export function useAssignUserToTask() { + const { mutate: assignUserToTaskMutation } = useAssignUserToTaskMutation({}); + return (profileId: number, taskId: number) => + assignUserToTaskMutation({ profileId, taskId }); +} + +export function useUnassignUserFromTask() { + const { mutate: unassignUserFromTaskMutation } = + useUnassignUserFromTaskMutation({}); + return (profileId: number, taskId: number) => + unassignUserFromTaskMutation({ profileId, taskId }); +} + export function useSolveTaskPopup() { // Used to force opening at most one dialog at a time const openedSolveTaskPopup = ref(false); @@ -116,3 +132,14 @@ export function useEditTaskPopup() { }); }; } + +export function useAssignTaskPopup() { + return (task: Task) => { + Dialog.create({ + component: TaskAssignDialog, + componentProps: { + task, + }, + }); + }; +} diff --git a/front/src/generated/graphql.ts b/front/src/generated/graphql.ts index ab4eda385..46d8d5c9d 100644 --- a/front/src/generated/graphql.ts +++ b/front/src/generated/graphql.ts @@ -46,6 +46,42 @@ export type AddTagsForTaskPayload = { query?: Maybe; }; +/** All input for the `assignUserToTask` mutation. */ +export type AssignUserToTaskInput = { + /** + * An arbitrary string value with no semantic meaning. Will be included in the + * payload verbatim. May be used to track mutations by the client. + */ + clientMutationId?: InputMaybe; + profileId?: InputMaybe; + taskId?: InputMaybe; +}; + +/** The output of our `assignUserToTask` mutation. */ +export type AssignUserToTaskPayload = { + __typename?: 'AssignUserToTaskPayload'; + /** + * The exact same `clientMutationId` that was provided in the mutation input, + * unchanged and unused. May be used by a client to track mutations. + */ + clientMutationId?: Maybe; + /** Reads a single `Profile` that is related to this `WorkOnTask`. */ + profile?: Maybe; + /** Our root query field type. Allows us to run any query from our mutation payload. */ + query?: Maybe; + /** Reads a single `Task` that is related to this `WorkOnTask`. */ + task?: Maybe; + workOnTask?: Maybe; + /** An edge for our `WorkOnTask`. May be used by Relay 1. */ + workOnTaskEdge?: Maybe; +}; + + +/** The output of our `assignUserToTask` mutation. */ +export type AssignUserToTaskPayloadWorkOnTaskEdgeArgs = { + orderBy?: InputMaybe>; +}; + export type AssignedTag = Node & { __typename?: 'AssignedTag'; /** A globally unique identifier. Can be used in various places throughout the system to identify this single value. */ @@ -69,20 +105,6 @@ export type AssignedTagCondition = { taskId?: InputMaybe; }; -/** A filter to be used against `AssignedTag` object types. All fields are combined with a logical ‘and.’ */ -export type AssignedTagFilter = { - /** Checks for all expressions in this list. */ - and?: InputMaybe>; - /** Negates the expression. */ - not?: InputMaybe; - /** Checks for any expressions in this list. */ - or?: InputMaybe>; - /** Filter by the object’s `tagId` field. */ - tagId?: InputMaybe; - /** Filter by the object’s `taskId` field. */ - taskId?: InputMaybe; -}; - /** An input for mutations affecting `AssignedTag` */ export type AssignedTagInput = { tagId: Scalars['Int']['input']; @@ -122,32 +144,6 @@ export enum AssignedTagsOrderBy { TaskIdDesc = 'TASK_ID_DESC' } -/** A filter to be used against Boolean fields. All fields are combined with a logical ‘and.’ */ -export type BooleanFilter = { - /** Not equal to the specified value, treating null like an ordinary value. */ - distinctFrom?: InputMaybe; - /** Equal to the specified value. */ - equalTo?: InputMaybe; - /** Greater than the specified value. */ - greaterThan?: InputMaybe; - /** Greater than or equal to the specified value. */ - greaterThanOrEqualTo?: InputMaybe; - /** Included in the specified list. */ - in?: InputMaybe>; - /** Is null (if `true` is specified) or is not null (if `false` is specified). */ - isNull?: InputMaybe; - /** Less than the specified value. */ - lessThan?: InputMaybe; - /** Less than or equal to the specified value. */ - lessThanOrEqualTo?: InputMaybe; - /** Equal to the specified value, treating null like an ordinary value. */ - notDistinctFrom?: InputMaybe; - /** Not equal to the specified value. */ - notEqualTo?: InputMaybe; - /** Not included in the specified list. */ - notIn?: InputMaybe>; -}; - /** All input for the `cancelWorkingOn` mutation. */ export type CancelWorkingOnInput = { /** @@ -483,7 +479,6 @@ export type CtfInvitationsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -532,20 +527,10 @@ export type CtfCondition = { export type CtfFilter = { /** Checks for all expressions in this list. */ and?: InputMaybe>; - /** Filter by the object’s `endTime` field. */ - endTime?: InputMaybe; - /** Filter by the object’s `granted` field. */ - granted?: InputMaybe; - /** Filter by the object’s `id` field. */ - id?: InputMaybe; /** Negates the expression. */ not?: InputMaybe; /** Checks for any expressions in this list. */ or?: InputMaybe>; - /** Filter by the object’s `secretsId` field. */ - secretsId?: InputMaybe; - /** Filter by the object’s `startTime` field. */ - startTime?: InputMaybe; /** Filter by the object’s `title` field. */ title?: InputMaybe; }; @@ -628,18 +613,6 @@ export type CtfSecretCondition = { id?: InputMaybe; }; -/** A filter to be used against `CtfSecret` object types. All fields are combined with a logical ‘and.’ */ -export type CtfSecretFilter = { - /** Checks for all expressions in this list. */ - and?: InputMaybe>; - /** Filter by the object’s `id` field. */ - id?: InputMaybe; - /** Negates the expression. */ - not?: InputMaybe; - /** Checks for any expressions in this list. */ - or?: InputMaybe>; -}; - /** Represents an update to a `CtfSecret`. Fields that are set will be updated. */ export type CtfSecretPatch = { credentials?: InputMaybe; @@ -715,32 +688,6 @@ export enum CtfsOrderBy { TitleDesc = 'TITLE_DESC' } -/** A filter to be used against Datetime fields. All fields are combined with a logical ‘and.’ */ -export type DatetimeFilter = { - /** Not equal to the specified value, treating null like an ordinary value. */ - distinctFrom?: InputMaybe; - /** Equal to the specified value. */ - equalTo?: InputMaybe; - /** Greater than the specified value. */ - greaterThan?: InputMaybe; - /** Greater than or equal to the specified value. */ - greaterThanOrEqualTo?: InputMaybe; - /** Included in the specified list. */ - in?: InputMaybe>; - /** Is null (if `true` is specified) or is not null (if `false` is specified). */ - isNull?: InputMaybe; - /** Less than the specified value. */ - lessThan?: InputMaybe; - /** Less than or equal to the specified value. */ - lessThanOrEqualTo?: InputMaybe; - /** Equal to the specified value, treating null like an ordinary value. */ - notDistinctFrom?: InputMaybe; - /** Not equal to the specified value. */ - notEqualTo?: InputMaybe; - /** Not included in the specified list. */ - notIn?: InputMaybe>; -}; - /** All input for the `deleteAssignedTagByNodeId` mutation. */ export type DeleteAssignedTagByNodeIdInput = { /** @@ -1013,32 +960,6 @@ export type ImportCtfPayload = { query?: Maybe; }; -/** A filter to be used against Int fields. All fields are combined with a logical ‘and.’ */ -export type IntFilter = { - /** Not equal to the specified value, treating null like an ordinary value. */ - distinctFrom?: InputMaybe; - /** Equal to the specified value. */ - equalTo?: InputMaybe; - /** Greater than the specified value. */ - greaterThan?: InputMaybe; - /** Greater than or equal to the specified value. */ - greaterThanOrEqualTo?: InputMaybe; - /** Included in the specified list. */ - in?: InputMaybe>; - /** Is null (if `true` is specified) or is not null (if `false` is specified). */ - isNull?: InputMaybe; - /** Less than the specified value. */ - lessThan?: InputMaybe; - /** Less than or equal to the specified value. */ - lessThanOrEqualTo?: InputMaybe; - /** Equal to the specified value, treating null like an ordinary value. */ - notDistinctFrom?: InputMaybe; - /** Not equal to the specified value. */ - notEqualTo?: InputMaybe; - /** Not included in the specified list. */ - notIn?: InputMaybe>; -}; - export type Invitation = Node & { __typename?: 'Invitation'; /** Reads a single `Ctf` that is related to this `Invitation`. */ @@ -1062,20 +983,6 @@ export type InvitationCondition = { profileId?: InputMaybe; }; -/** A filter to be used against `Invitation` object types. All fields are combined with a logical ‘and.’ */ -export type InvitationFilter = { - /** Checks for all expressions in this list. */ - and?: InputMaybe>; - /** Filter by the object’s `ctfId` field. */ - ctfId?: InputMaybe; - /** Negates the expression. */ - not?: InputMaybe; - /** Checks for any expressions in this list. */ - or?: InputMaybe>; - /** Filter by the object’s `profileId` field. */ - profileId?: InputMaybe; -}; - /** An input for mutations affecting `Invitation` */ export type InvitationInput = { ctfId: Scalars['Int']['input']; @@ -1156,6 +1063,7 @@ export type LoginPayload = { export type Mutation = { __typename?: 'Mutation'; addTagsForTask?: Maybe; + assignUserToTask?: Maybe; cancelWorkingOn?: Maybe; changePassword?: Maybe; /** Creates a single `AssignedTag`. */ @@ -1203,6 +1111,7 @@ export type Mutation = { setDiscordEventLink?: Maybe; startWorkingOn?: Maybe; stopWorkingOn?: Maybe; + unassignUserFromTask?: Maybe; /** Updates a single `Ctf` using a unique key and a patch. */ updateCtf?: Maybe; /** Updates a single `Ctf` using its globally unique id and a patch. */ @@ -1241,6 +1150,12 @@ export type MutationAddTagsForTaskArgs = { }; +/** The root mutation type which contains root level fields which mutate data. */ +export type MutationAssignUserToTaskArgs = { + input: AssignUserToTaskInput; +}; + + /** The root mutation type which contains root level fields which mutate data. */ export type MutationCancelWorkingOnArgs = { input: CancelWorkingOnInput; @@ -1433,6 +1348,12 @@ export type MutationStopWorkingOnArgs = { }; +/** The root mutation type which contains root level fields which mutate data. */ +export type MutationUnassignUserFromTaskArgs = { + input: UnassignUserFromTaskInput; +}; + + /** The root mutation type which contains root level fields which mutate data. */ export type MutationUpdateCtfArgs = { input: UpdateCtfInput; @@ -1585,7 +1506,6 @@ export type ProfileInvitationsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1609,7 +1529,6 @@ export type ProfileWorkOnTasksArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1654,14 +1573,10 @@ export type ProfileFilter = { and?: InputMaybe>; /** Filter by the object’s `discordId` field. */ discordId?: InputMaybe; - /** Filter by the object’s `id` field. */ - id?: InputMaybe; /** Negates the expression. */ not?: InputMaybe; /** Checks for any expressions in this list. */ or?: InputMaybe>; - /** Filter by the object’s `role` field. */ - role?: InputMaybe; /** Filter by the object’s `username` field. */ username?: InputMaybe; }; @@ -1867,7 +1782,6 @@ export type QueryAssignedTagsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1904,7 +1818,6 @@ export type QueryCtfSecretsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1929,7 +1842,6 @@ export type QueryCtfsArgs = { export type QueryGuestsArgs = { after?: InputMaybe; before?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1940,7 +1852,6 @@ export type QueryGuestsArgs = { export type QueryIncomingCtfArgs = { after?: InputMaybe; before?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1965,7 +1876,6 @@ export type QueryInvitationsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1983,7 +1893,6 @@ export type QueryNodeArgs = { export type QueryPastCtfArgs = { after?: InputMaybe; before?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2140,7 +2049,6 @@ export type QueryWorkOnTasksArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2302,32 +2210,6 @@ export enum Role { UserMember = 'USER_MEMBER' } -/** A filter to be used against Role fields. All fields are combined with a logical ‘and.’ */ -export type RoleFilter = { - /** Not equal to the specified value, treating null like an ordinary value. */ - distinctFrom?: InputMaybe; - /** Equal to the specified value. */ - equalTo?: InputMaybe; - /** Greater than the specified value. */ - greaterThan?: InputMaybe; - /** Greater than or equal to the specified value. */ - greaterThanOrEqualTo?: InputMaybe; - /** Included in the specified list. */ - in?: InputMaybe>; - /** Is null (if `true` is specified) or is not null (if `false` is specified). */ - isNull?: InputMaybe; - /** Less than the specified value. */ - lessThan?: InputMaybe; - /** Less than or equal to the specified value. */ - lessThanOrEqualTo?: InputMaybe; - /** Equal to the specified value, treating null like an ordinary value. */ - notDistinctFrom?: InputMaybe; - /** Not equal to the specified value. */ - notEqualTo?: InputMaybe; - /** Not included in the specified list. */ - notIn?: InputMaybe>; -}; - /** All input for the `setDiscordEventLink` mutation. */ export type SetDiscordEventLinkInput = { /** @@ -2476,80 +2358,8 @@ export type StopWorkingOnPayloadWorkOnTaskEdgeArgs = { /** A filter to be used against String fields. All fields are combined with a logical ‘and.’ */ export type StringFilter = { - /** Not equal to the specified value, treating null like an ordinary value. */ - distinctFrom?: InputMaybe; - /** Not equal to the specified value, treating null like an ordinary value (case-insensitive). */ - distinctFromInsensitive?: InputMaybe; - /** Ends with the specified string (case-sensitive). */ - endsWith?: InputMaybe; - /** Ends with the specified string (case-insensitive). */ - endsWithInsensitive?: InputMaybe; - /** Equal to the specified value. */ - equalTo?: InputMaybe; - /** Equal to the specified value (case-insensitive). */ - equalToInsensitive?: InputMaybe; - /** Greater than the specified value. */ - greaterThan?: InputMaybe; - /** Greater than the specified value (case-insensitive). */ - greaterThanInsensitive?: InputMaybe; - /** Greater than or equal to the specified value. */ - greaterThanOrEqualTo?: InputMaybe; - /** Greater than or equal to the specified value (case-insensitive). */ - greaterThanOrEqualToInsensitive?: InputMaybe; - /** Included in the specified list. */ - in?: InputMaybe>; - /** Included in the specified list (case-insensitive). */ - inInsensitive?: InputMaybe>; - /** Contains the specified string (case-sensitive). */ - includes?: InputMaybe; /** Contains the specified string (case-insensitive). */ includesInsensitive?: InputMaybe; - /** Is null (if `true` is specified) or is not null (if `false` is specified). */ - isNull?: InputMaybe; - /** Less than the specified value. */ - lessThan?: InputMaybe; - /** Less than the specified value (case-insensitive). */ - lessThanInsensitive?: InputMaybe; - /** Less than or equal to the specified value. */ - lessThanOrEqualTo?: InputMaybe; - /** Less than or equal to the specified value (case-insensitive). */ - lessThanOrEqualToInsensitive?: InputMaybe; - /** Matches the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters. */ - like?: InputMaybe; - /** Matches the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters. */ - likeInsensitive?: InputMaybe; - /** Equal to the specified value, treating null like an ordinary value. */ - notDistinctFrom?: InputMaybe; - /** Equal to the specified value, treating null like an ordinary value (case-insensitive). */ - notDistinctFromInsensitive?: InputMaybe; - /** Does not end with the specified string (case-sensitive). */ - notEndsWith?: InputMaybe; - /** Does not end with the specified string (case-insensitive). */ - notEndsWithInsensitive?: InputMaybe; - /** Not equal to the specified value. */ - notEqualTo?: InputMaybe; - /** Not equal to the specified value (case-insensitive). */ - notEqualToInsensitive?: InputMaybe; - /** Not included in the specified list. */ - notIn?: InputMaybe>; - /** Not included in the specified list (case-insensitive). */ - notInInsensitive?: InputMaybe>; - /** Does not contain the specified string (case-sensitive). */ - notIncludes?: InputMaybe; - /** Does not contain the specified string (case-insensitive). */ - notIncludesInsensitive?: InputMaybe; - /** Does not match the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters. */ - notLike?: InputMaybe; - /** Does not match the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters. */ - notLikeInsensitive?: InputMaybe; - /** Does not start with the specified string (case-sensitive). */ - notStartsWith?: InputMaybe; - /** Does not start with the specified string (case-insensitive). */ - notStartsWithInsensitive?: InputMaybe; - /** Starts with the specified string (case-sensitive). */ - startsWith?: InputMaybe; - /** Starts with the specified string (case-insensitive). */ - startsWithInsensitive?: InputMaybe; }; /** The root subscription type: contains realtime events you can subscribe to with the `subscription` operation. */ @@ -2584,7 +2394,6 @@ export type TagAssignedTagsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2615,8 +2424,6 @@ export type TagCondition = { export type TagFilter = { /** Checks for all expressions in this list. */ and?: InputMaybe>; - /** Filter by the object’s `id` field. */ - id?: InputMaybe; /** Negates the expression. */ not?: InputMaybe; /** Checks for any expressions in this list. */ @@ -2714,7 +2521,6 @@ export type TaskAssignedTagsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2750,7 +2556,6 @@ export type TaskWorkOnTasksArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; - filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2771,16 +2576,10 @@ export type TaskCondition = { export type TaskFilter = { /** Checks for all expressions in this list. */ and?: InputMaybe>; - /** Filter by the object’s `ctfId` field. */ - ctfId?: InputMaybe; - /** Filter by the object’s `id` field. */ - id?: InputMaybe; /** Negates the expression. */ not?: InputMaybe; /** Checks for any expressions in this list. */ or?: InputMaybe>; - /** Filter by the object’s `solved` field. */ - solved?: InputMaybe; /** Filter by the object’s `title` field. */ title?: InputMaybe; }; @@ -2872,6 +2671,42 @@ export enum TasksOrderBy { TitleDesc = 'TITLE_DESC' } +/** All input for the `unassignUserFromTask` mutation. */ +export type UnassignUserFromTaskInput = { + /** + * An arbitrary string value with no semantic meaning. Will be included in the + * payload verbatim. May be used to track mutations by the client. + */ + clientMutationId?: InputMaybe; + profileId?: InputMaybe; + taskId?: InputMaybe; +}; + +/** The output of our `unassignUserFromTask` mutation. */ +export type UnassignUserFromTaskPayload = { + __typename?: 'UnassignUserFromTaskPayload'; + /** + * The exact same `clientMutationId` that was provided in the mutation input, + * unchanged and unused. May be used by a client to track mutations. + */ + clientMutationId?: Maybe; + /** Reads a single `Profile` that is related to this `WorkOnTask`. */ + profile?: Maybe; + /** Our root query field type. Allows us to run any query from our mutation payload. */ + query?: Maybe; + /** Reads a single `Task` that is related to this `WorkOnTask`. */ + task?: Maybe; + workOnTask?: Maybe; + /** An edge for our `WorkOnTask`. May be used by Relay 1. */ + workOnTaskEdge?: Maybe; +}; + + +/** The output of our `unassignUserFromTask` mutation. */ +export type UnassignUserFromTaskPayloadWorkOnTaskEdgeArgs = { + orderBy?: InputMaybe>; +}; + /** All input for the `updateCtfByNodeId` mutation. */ export type UpdateCtfByNodeIdInput = { /** @@ -3287,20 +3122,6 @@ export type WorkOnTaskCondition = { taskId?: InputMaybe; }; -/** A filter to be used against `WorkOnTask` object types. All fields are combined with a logical ‘and.’ */ -export type WorkOnTaskFilter = { - /** Checks for all expressions in this list. */ - and?: InputMaybe>; - /** Negates the expression. */ - not?: InputMaybe; - /** Checks for any expressions in this list. */ - or?: InputMaybe>; - /** Filter by the object’s `profileId` field. */ - profileId?: InputMaybe; - /** Filter by the object’s `taskId` field. */ - taskId?: InputMaybe; -}; - /** An input for mutations affecting `WorkOnTask` */ export type WorkOnTaskInput = { active?: InputMaybe; @@ -3384,6 +3205,22 @@ export type UpdateRoleForUserIdMutationVariables = Exact<{ export type UpdateRoleForUserIdMutation = { __typename?: 'Mutation', updateUserRole?: { __typename?: 'UpdateUserRolePayload', role?: Role | null } | null }; +export type AssignUserToTaskMutationVariables = Exact<{ + profileId: Scalars['Int']['input']; + taskId: Scalars['Int']['input']; +}>; + + +export type AssignUserToTaskMutation = { __typename?: 'Mutation', assignUserToTask?: { __typename?: 'AssignUserToTaskPayload', workOnTask?: { __typename?: 'WorkOnTask', nodeId: string, profileId: number, active: boolean, taskId: number } | null } | null }; + +export type UnassignUserFromTaskMutationVariables = Exact<{ + profileId: Scalars['Int']['input']; + taskId: Scalars['Int']['input']; +}>; + + +export type UnassignUserFromTaskMutation = { __typename?: 'Mutation', unassignUserFromTask?: { __typename?: 'UnassignUserFromTaskPayload', workOnTask?: { __typename?: 'WorkOnTask', nodeId: string, profileId: number, active: boolean, taskId: number } | null } | null }; + export type MeQueryVariables = Exact<{ [key: string]: never; }>; @@ -4136,6 +3973,70 @@ export function useUpdateRoleForUserIdMutation(options: VueApolloComposable.UseM return VueApolloComposable.useMutation(UpdateRoleForUserIdDocument, options); } export type UpdateRoleForUserIdMutationCompositionFunctionResult = VueApolloComposable.UseMutationReturn; +export const AssignUserToTaskDocument = gql` + mutation assignUserToTask($profileId: Int!, $taskId: Int!) { + assignUserToTask(input: {profileId: $profileId, taskId: $taskId}) { + workOnTask { + ...WorkingOnFragment + } + } +} + ${WorkingOnFragmentDoc}`; + +/** + * __useAssignUserToTaskMutation__ + * + * To run a mutation, you first call `useAssignUserToTaskMutation` within a Vue component and pass it any options that fit your needs. + * When your component renders, `useAssignUserToTaskMutation` returns an object that includes: + * - A mutate function that you can call at any time to execute the mutation + * - Several other properties: https://v4.apollo.vuejs.org/api/use-mutation.html#return + * + * @param options that will be passed into the mutation, supported options are listed on: https://v4.apollo.vuejs.org/guide-composable/mutation.html#options; + * + * @example + * const { mutate, loading, error, onDone } = useAssignUserToTaskMutation({ + * variables: { + * profileId: // value for 'profileId' + * taskId: // value for 'taskId' + * }, + * }); + */ +export function useAssignUserToTaskMutation(options: VueApolloComposable.UseMutationOptions | ReactiveFunction> = {}) { + return VueApolloComposable.useMutation(AssignUserToTaskDocument, options); +} +export type AssignUserToTaskMutationCompositionFunctionResult = VueApolloComposable.UseMutationReturn; +export const UnassignUserFromTaskDocument = gql` + mutation unassignUserFromTask($profileId: Int!, $taskId: Int!) { + unassignUserFromTask(input: {profileId: $profileId, taskId: $taskId}) { + workOnTask { + ...WorkingOnFragment + } + } +} + ${WorkingOnFragmentDoc}`; + +/** + * __useUnassignUserFromTaskMutation__ + * + * To run a mutation, you first call `useUnassignUserFromTaskMutation` within a Vue component and pass it any options that fit your needs. + * When your component renders, `useUnassignUserFromTaskMutation` returns an object that includes: + * - A mutate function that you can call at any time to execute the mutation + * - Several other properties: https://v4.apollo.vuejs.org/api/use-mutation.html#return + * + * @param options that will be passed into the mutation, supported options are listed on: https://v4.apollo.vuejs.org/guide-composable/mutation.html#options; + * + * @example + * const { mutate, loading, error, onDone } = useUnassignUserFromTaskMutation({ + * variables: { + * profileId: // value for 'profileId' + * taskId: // value for 'taskId' + * }, + * }); + */ +export function useUnassignUserFromTaskMutation(options: VueApolloComposable.UseMutationOptions | ReactiveFunction> = {}) { + return VueApolloComposable.useMutation(UnassignUserFromTaskDocument, options); +} +export type UnassignUserFromTaskMutationCompositionFunctionResult = VueApolloComposable.UseMutationReturn; export const MeDocument = gql` query Me { me { @@ -6200,6 +6101,24 @@ export const UpdateRoleForUserId = gql` } } `; +export const AssignUserToTask = gql` + mutation assignUserToTask($profileId: Int!, $taskId: Int!) { + assignUserToTask(input: {profileId: $profileId, taskId: $taskId}) { + workOnTask { + ...WorkingOnFragment + } + } +} + ${WorkingOnFragment}`; +export const UnassignUserFromTask = gql` + mutation unassignUserFromTask($profileId: Int!, $taskId: Int!) { + unassignUserFromTask(input: {profileId: $profileId, taskId: $taskId}) { + workOnTask { + ...WorkingOnFragment + } + } +} + ${WorkingOnFragment}`; export const Me = gql` query Me { me { diff --git a/front/src/graphql/Assign.graphql b/front/src/graphql/Assign.graphql new file mode 100644 index 000000000..9ee871fcf --- /dev/null +++ b/front/src/graphql/Assign.graphql @@ -0,0 +1,17 @@ +# GraphQL mutations for assigning/unassigning users to tasks + +mutation assignUserToTask($profileId: Int!, $taskId: Int!) { + assignUserToTask(input: { profileId: $profileId, taskId: $taskId }) { + workOnTask { + ...WorkingOnFragment + } + } +} + +mutation unassignUserFromTask($profileId: Int!, $taskId: Int!) { + unassignUserFromTask(input: { profileId: $profileId, taskId: $taskId }) { + workOnTask { + ...WorkingOnFragment + } + } +} From 679174eba2691388757cdfb897be8319dd5c62ed Mon Sep 17 00:00:00 2001 From: JJ-8 <34778827+JJ-8@users.noreply.github.com> Date: Sun, 25 May 2025 14:25:37 +0200 Subject: [PATCH 2/5] Update outdated graphql schema --- front/graphql.schema.json | 1938 ++++++++++++++++++++++++++++++-- front/src/generated/graphql.ts | 265 +++++ 2 files changed, 2100 insertions(+), 103 deletions(-) diff --git a/front/graphql.schema.json b/front/graphql.schema.json index 7db7e0fd4..74f19d35f 100644 --- a/front/graphql.schema.json +++ b/front/graphql.schema.json @@ -380,6 +380,94 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "AssignedTagFilter", + "description": "A filter to be used against `AssignedTag` object types. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "and", + "description": "Checks for all expressions in this list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "AssignedTagFilter", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "not", + "description": "Negates the expression.", + "type": { + "kind": "INPUT_OBJECT", + "name": "AssignedTagFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "or", + "description": "Checks for any expressions in this list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "AssignedTagFilter", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "tagId", + "description": "Filter by the object’s `tagId` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "taskId", + "description": "Filter by the object’s `taskId` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "AssignedTagInput", @@ -621,6 +709,166 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "BooleanFilter", + "description": "A filter to be used against Boolean fields. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "distinctFrom", + "description": "Not equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "equalTo", + "description": "Equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThan", + "description": "Greater than the specified value.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThanOrEqualTo", + "description": "Greater than or equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "in", + "description": "Included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isNull", + "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThan", + "description": "Less than the specified value.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThanOrEqualTo", + "description": "Less than or equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notDistinctFrom", + "description": "Equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notEqualTo", + "description": "Not equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notIn", + "description": "Not included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "CancelWorkingOnInput", @@ -2021,6 +2269,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "InvitationFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -2547,6 +2807,42 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "endTime", + "description": "Filter by the object’s `endTime` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "DatetimeFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "granted", + "description": "Filter by the object’s `granted` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "BooleanFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "Filter by the object’s `id` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "not", "description": "Negates the expression.", @@ -2579,6 +2875,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "secretsId", + "description": "Filter by the object’s `secretsId` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startTime", + "description": "Filter by the object’s `startTime` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "DatetimeFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "title", "description": "Filter by the object’s `title` field.", @@ -3175,6 +3495,82 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "CtfSecretFilter", + "description": "A filter to be used against `CtfSecret` object types. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "and", + "description": "Checks for all expressions in this list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CtfSecretFilter", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "Filter by the object’s `id` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "not", + "description": "Negates the expression.", + "type": { + "kind": "INPUT_OBJECT", + "name": "CtfSecretFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "or", + "description": "Checks for any expressions in this list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "CtfSecretFilter", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "CtfSecretPatch", @@ -3617,6 +4013,166 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "DatetimeFilter", + "description": "A filter to be used against Datetime fields. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "distinctFrom", + "description": "Not equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "equalTo", + "description": "Equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThan", + "description": "Greater than the specified value.", + "type": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThanOrEqualTo", + "description": "Greater than or equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "in", + "description": "Included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isNull", + "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThan", + "description": "Less than the specified value.", + "type": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThanOrEqualTo", + "description": "Less than or equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notDistinctFrom", + "description": "Equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notEqualTo", + "description": "Not equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notIn", + "description": "Not included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Datetime", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "DeleteAssignedTagByNodeIdInput", @@ -4808,42 +5364,202 @@ "possibleTypes": null }, { - "kind": "OBJECT", - "name": "Invitation", - "description": null, - "isOneOf": null, - "fields": [ + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "description": "A filter to be used against Int fields. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ { - "name": "ctf", - "description": "Reads a single `Ctf` that is related to this `Invitation`.", - "args": [], + "name": "distinctFrom", + "description": "Not equal to the specified value, treating null like an ordinary value.", "type": { - "kind": "OBJECT", - "name": "Ctf", + "kind": "SCALAR", + "name": "Int", "ofType": null }, + "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "ctfId", - "description": null, - "args": [], + "name": "equalTo", + "description": "Equal to the specified value.", "type": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "SCALAR", - "name": "Int", - "ofType": null - } + "kind": "SCALAR", + "name": "Int", + "ofType": null }, + "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "nodeId", - "description": "A globally unique identifier. Can be used in various places throughout the system to identify this single value.", + "name": "greaterThan", + "description": "Greater than the specified value.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThanOrEqualTo", + "description": "Greater than or equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "in", + "description": "Included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isNull", + "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThan", + "description": "Less than the specified value.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThanOrEqualTo", + "description": "Less than or equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notDistinctFrom", + "description": "Equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notEqualTo", + "description": "Not equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notIn", + "description": "Not included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "OBJECT", + "name": "Invitation", + "description": null, + "isOneOf": null, + "fields": [ + { + "name": "ctf", + "description": "Reads a single `Ctf` that is related to this `Invitation`.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Ctf", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ctfId", + "description": null, + "args": [], + "type": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "Int", + "ofType": null + } + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "nodeId", + "description": "A globally unique identifier. Can be used in various places throughout the system to identify this single value.", "args": [], "type": { "kind": "NON_NULL", @@ -4933,6 +5649,94 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "InvitationFilter", + "description": "A filter to be used against `Invitation` object types. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "and", + "description": "Checks for all expressions in this list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "InvitationFilter", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "ctfId", + "description": "Filter by the object’s `ctfId` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "not", + "description": "Negates the expression.", + "type": { + "kind": "INPUT_OBJECT", + "name": "InvitationFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "or", + "description": "Checks for any expressions in this list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "InvitationFilter", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "profileId", + "description": "Filter by the object’s `profileId` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "InvitationInput", @@ -7218,6 +8022,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "InvitationFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -7508,6 +8324,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "WorkOnTaskFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -7809,11 +8637,11 @@ "deprecationReason": null }, { - "name": "not", - "description": "Negates the expression.", + "name": "id", + "description": "Filter by the object’s `id` field.", "type": { "kind": "INPUT_OBJECT", - "name": "ProfileFilter", + "name": "IntFilter", "ofType": null }, "defaultValue": null, @@ -7821,8 +8649,20 @@ "deprecationReason": null }, { - "name": "or", - "description": "Checks for any expressions in this list.", + "name": "not", + "description": "Negates the expression.", + "type": { + "kind": "INPUT_OBJECT", + "name": "ProfileFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "or", + "description": "Checks for any expressions in this list.", "type": { "kind": "LIST", "name": null, @@ -7840,6 +8680,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "role", + "description": "Filter by the object’s `role` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "RoleFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "username", "description": "Filter by the object’s `username` field.", @@ -8641,6 +9493,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "AssignedTagFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -8862,6 +9726,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "CtfSecretFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -9072,6 +9948,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "ProfileFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -9145,6 +10033,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "CtfFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -9304,6 +10204,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "InvitationFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -9466,6 +10378,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "CtfFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -10573,6 +11497,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "WorkOnTaskFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -11288,6 +12224,166 @@ ], "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "RoleFilter", + "description": "A filter to be used against Role fields. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "distinctFrom", + "description": "Not equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "ENUM", + "name": "Role", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "equalTo", + "description": "Equal to the specified value.", + "type": { + "kind": "ENUM", + "name": "Role", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThan", + "description": "Greater than the specified value.", + "type": { + "kind": "ENUM", + "name": "Role", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThanOrEqualTo", + "description": "Greater than or equal to the specified value.", + "type": { + "kind": "ENUM", + "name": "Role", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "in", + "description": "Included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "Role", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isNull", + "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThan", + "description": "Less than the specified value.", + "type": { + "kind": "ENUM", + "name": "Role", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThanOrEqualTo", + "description": "Less than or equal to the specified value.", + "type": { + "kind": "ENUM", + "name": "Role", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notDistinctFrom", + "description": "Equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "ENUM", + "name": "Role", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notEqualTo", + "description": "Not equal to the specified value.", + "type": { + "kind": "ENUM", + "name": "Role", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notIn", + "description": "Not included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "Role", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "SetDiscordEventLinkInput", @@ -11956,125 +13052,589 @@ "isOneOf": null, "fields": [ { - "name": "clientMutationId", - "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", - "args": [], + "name": "clientMutationId", + "description": "The exact same `clientMutationId` that was provided in the mutation input,\nunchanged and unused. May be used by a client to track mutations.", + "args": [], + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "profile", + "description": "Reads a single `Profile` that is related to this `WorkOnTask`.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Profile", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "query", + "description": "Our root query field type. Allows us to run any query from our mutation payload.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Query", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "task", + "description": "Reads a single `Task` that is related to this `WorkOnTask`.", + "args": [], + "type": { + "kind": "OBJECT", + "name": "Task", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "workOnTask", + "description": null, + "args": [], + "type": { + "kind": "OBJECT", + "name": "WorkOnTask", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "workOnTaskEdge", + "description": "An edge for our `WorkOnTask`. May be used by Relay 1.", + "args": [ + { + "name": "orderBy", + "description": "The method to use when ordering `WorkOnTask`.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "ENUM", + "name": "WorkOnTasksOrderBy", + "ofType": null + } + } + }, + "defaultValue": "[PRIMARY_KEY_ASC]", + "isDeprecated": false, + "deprecationReason": null + } + ], + "type": { + "kind": "OBJECT", + "name": "WorkOnTasksEdge", + "ofType": null + }, + "isDeprecated": false, + "deprecationReason": null + } + ], + "inputFields": null, + "interfaces": [], + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "SCALAR", + "name": "String", + "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", + "isOneOf": null, + "fields": null, + "inputFields": null, + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, + { + "kind": "INPUT_OBJECT", + "name": "StringFilter", + "description": "A filter to be used against String fields. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "distinctFrom", + "description": "Not equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "distinctFromInsensitive", + "description": "Not equal to the specified value, treating null like an ordinary value (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "endsWith", + "description": "Ends with the specified string (case-sensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "endsWithInsensitive", + "description": "Ends with the specified string (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "equalTo", + "description": "Equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "equalToInsensitive", + "description": "Equal to the specified value (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThan", + "description": "Greater than the specified value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThanInsensitive", + "description": "Greater than the specified value (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThanOrEqualTo", + "description": "Greater than or equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "greaterThanOrEqualToInsensitive", + "description": "Greater than or equal to the specified value (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "in", + "description": "Included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "inInsensitive", + "description": "Included in the specified list (case-insensitive).", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "includes", + "description": "Contains the specified string (case-sensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "includesInsensitive", + "description": "Contains the specified string (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "isNull", + "description": "Is null (if `true` is specified) or is not null (if `false` is specified).", + "type": { + "kind": "SCALAR", + "name": "Boolean", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThan", + "description": "Less than the specified value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThanInsensitive", + "description": "Less than the specified value (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThanOrEqualTo", + "description": "Less than or equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "lessThanOrEqualToInsensitive", + "description": "Less than or equal to the specified value (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "like", + "description": "Matches the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "likeInsensitive", + "description": "Matches the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notDistinctFrom", + "description": "Equal to the specified value, treating null like an ordinary value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notDistinctFromInsensitive", + "description": "Equal to the specified value, treating null like an ordinary value (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notEndsWith", + "description": "Does not end with the specified string (case-sensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notEndsWithInsensitive", + "description": "Does not end with the specified string (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notEqualTo", + "description": "Not equal to the specified value.", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notEqualToInsensitive", + "description": "Not equal to the specified value (case-insensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notIn", + "description": "Not included in the specified list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notInInsensitive", + "description": "Not included in the specified list (case-insensitive).", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "SCALAR", + "name": "String", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "notIncludes", + "description": "Does not contain the specified string (case-sensitive).", "type": { "kind": "SCALAR", "name": "String", "ofType": null }, + "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "profile", - "description": "Reads a single `Profile` that is related to this `WorkOnTask`.", - "args": [], + "name": "notIncludesInsensitive", + "description": "Does not contain the specified string (case-insensitive).", "type": { - "kind": "OBJECT", - "name": "Profile", + "kind": "SCALAR", + "name": "String", "ofType": null }, + "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "query", - "description": "Our root query field type. Allows us to run any query from our mutation payload.", - "args": [], + "name": "notLike", + "description": "Does not match the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.", "type": { - "kind": "OBJECT", - "name": "Query", + "kind": "SCALAR", + "name": "String", "ofType": null }, + "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "task", - "description": "Reads a single `Task` that is related to this `WorkOnTask`.", - "args": [], + "name": "notLikeInsensitive", + "description": "Does not match the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters.", "type": { - "kind": "OBJECT", - "name": "Task", + "kind": "SCALAR", + "name": "String", "ofType": null }, + "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "workOnTask", - "description": null, - "args": [], + "name": "notStartsWith", + "description": "Does not start with the specified string (case-sensitive).", "type": { - "kind": "OBJECT", - "name": "WorkOnTask", + "kind": "SCALAR", + "name": "String", "ofType": null }, + "defaultValue": null, "isDeprecated": false, "deprecationReason": null }, { - "name": "workOnTaskEdge", - "description": "An edge for our `WorkOnTask`. May be used by Relay 1.", - "args": [ - { - "name": "orderBy", - "description": "The method to use when ordering `WorkOnTask`.", - "type": { - "kind": "LIST", - "name": null, - "ofType": { - "kind": "NON_NULL", - "name": null, - "ofType": { - "kind": "ENUM", - "name": "WorkOnTasksOrderBy", - "ofType": null - } - } - }, - "defaultValue": "[PRIMARY_KEY_ASC]", - "isDeprecated": false, - "deprecationReason": null - } - ], + "name": "notStartsWithInsensitive", + "description": "Does not start with the specified string (case-insensitive).", "type": { - "kind": "OBJECT", - "name": "WorkOnTasksEdge", + "kind": "SCALAR", + "name": "String", "ofType": null }, + "defaultValue": null, "isDeprecated": false, "deprecationReason": null - } - ], - "inputFields": null, - "interfaces": [], - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "SCALAR", - "name": "String", - "description": "The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.", - "isOneOf": null, - "fields": null, - "inputFields": null, - "interfaces": null, - "enumValues": null, - "possibleTypes": null - }, - { - "kind": "INPUT_OBJECT", - "name": "StringFilter", - "description": "A filter to be used against String fields. All fields are combined with a logical ‘and.’", - "isOneOf": false, - "fields": null, - "inputFields": [ + }, { - "name": "includesInsensitive", - "description": "Contains the specified string (case-insensitive).", + "name": "startsWith", + "description": "Starts with the specified string (case-sensitive).", + "type": { + "kind": "SCALAR", + "name": "String", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "startsWithInsensitive", + "description": "Starts with the specified string (case-insensitive).", "type": { "kind": "SCALAR", "name": "String", @@ -12216,6 +13776,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "AssignedTagFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -12529,6 +14101,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "id", + "description": "Filter by the object’s `id` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "not", "description": "Negates the expression.", @@ -12982,6 +14566,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "AssignedTagFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -13469,6 +15065,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "filter", + "description": "A filter to be used in determining which values should be returned by the collection.", + "type": { + "kind": "INPUT_OBJECT", + "name": "WorkOnTaskFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "first", "description": "Only read the first `n` values of the set.", @@ -13625,6 +15233,30 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "ctfId", + "description": "Filter by the object’s `ctfId` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "id", + "description": "Filter by the object’s `id` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "not", "description": "Negates the expression.", @@ -13657,6 +15289,18 @@ "isDeprecated": false, "deprecationReason": null }, + { + "name": "solved", + "description": "Filter by the object’s `solved` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "BooleanFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, { "name": "title", "description": "Filter by the object’s `title` field.", @@ -16210,6 +17854,94 @@ "enumValues": null, "possibleTypes": null }, + { + "kind": "INPUT_OBJECT", + "name": "WorkOnTaskFilter", + "description": "A filter to be used against `WorkOnTask` object types. All fields are combined with a logical ‘and.’", + "isOneOf": false, + "fields": null, + "inputFields": [ + { + "name": "and", + "description": "Checks for all expressions in this list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "WorkOnTaskFilter", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "not", + "description": "Negates the expression.", + "type": { + "kind": "INPUT_OBJECT", + "name": "WorkOnTaskFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "or", + "description": "Checks for any expressions in this list.", + "type": { + "kind": "LIST", + "name": null, + "ofType": { + "kind": "NON_NULL", + "name": null, + "ofType": { + "kind": "INPUT_OBJECT", + "name": "WorkOnTaskFilter", + "ofType": null + } + } + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "profileId", + "description": "Filter by the object’s `profileId` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + }, + { + "name": "taskId", + "description": "Filter by the object’s `taskId` field.", + "type": { + "kind": "INPUT_OBJECT", + "name": "IntFilter", + "ofType": null + }, + "defaultValue": null, + "isDeprecated": false, + "deprecationReason": null + } + ], + "interfaces": null, + "enumValues": null, + "possibleTypes": null + }, { "kind": "INPUT_OBJECT", "name": "WorkOnTaskInput", diff --git a/front/src/generated/graphql.ts b/front/src/generated/graphql.ts index 46d8d5c9d..ecd1b0406 100644 --- a/front/src/generated/graphql.ts +++ b/front/src/generated/graphql.ts @@ -105,6 +105,20 @@ export type AssignedTagCondition = { taskId?: InputMaybe; }; +/** A filter to be used against `AssignedTag` object types. All fields are combined with a logical ‘and.’ */ +export type AssignedTagFilter = { + /** Checks for all expressions in this list. */ + and?: InputMaybe>; + /** Negates the expression. */ + not?: InputMaybe; + /** Checks for any expressions in this list. */ + or?: InputMaybe>; + /** Filter by the object’s `tagId` field. */ + tagId?: InputMaybe; + /** Filter by the object’s `taskId` field. */ + taskId?: InputMaybe; +}; + /** An input for mutations affecting `AssignedTag` */ export type AssignedTagInput = { tagId: Scalars['Int']['input']; @@ -144,6 +158,32 @@ export enum AssignedTagsOrderBy { TaskIdDesc = 'TASK_ID_DESC' } +/** A filter to be used against Boolean fields. All fields are combined with a logical ‘and.’ */ +export type BooleanFilter = { + /** Not equal to the specified value, treating null like an ordinary value. */ + distinctFrom?: InputMaybe; + /** Equal to the specified value. */ + equalTo?: InputMaybe; + /** Greater than the specified value. */ + greaterThan?: InputMaybe; + /** Greater than or equal to the specified value. */ + greaterThanOrEqualTo?: InputMaybe; + /** Included in the specified list. */ + in?: InputMaybe>; + /** Is null (if `true` is specified) or is not null (if `false` is specified). */ + isNull?: InputMaybe; + /** Less than the specified value. */ + lessThan?: InputMaybe; + /** Less than or equal to the specified value. */ + lessThanOrEqualTo?: InputMaybe; + /** Equal to the specified value, treating null like an ordinary value. */ + notDistinctFrom?: InputMaybe; + /** Not equal to the specified value. */ + notEqualTo?: InputMaybe; + /** Not included in the specified list. */ + notIn?: InputMaybe>; +}; + /** All input for the `cancelWorkingOn` mutation. */ export type CancelWorkingOnInput = { /** @@ -479,6 +519,7 @@ export type CtfInvitationsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -527,10 +568,20 @@ export type CtfCondition = { export type CtfFilter = { /** Checks for all expressions in this list. */ and?: InputMaybe>; + /** Filter by the object’s `endTime` field. */ + endTime?: InputMaybe; + /** Filter by the object’s `granted` field. */ + granted?: InputMaybe; + /** Filter by the object’s `id` field. */ + id?: InputMaybe; /** Negates the expression. */ not?: InputMaybe; /** Checks for any expressions in this list. */ or?: InputMaybe>; + /** Filter by the object’s `secretsId` field. */ + secretsId?: InputMaybe; + /** Filter by the object’s `startTime` field. */ + startTime?: InputMaybe; /** Filter by the object’s `title` field. */ title?: InputMaybe; }; @@ -613,6 +664,18 @@ export type CtfSecretCondition = { id?: InputMaybe; }; +/** A filter to be used against `CtfSecret` object types. All fields are combined with a logical ‘and.’ */ +export type CtfSecretFilter = { + /** Checks for all expressions in this list. */ + and?: InputMaybe>; + /** Filter by the object’s `id` field. */ + id?: InputMaybe; + /** Negates the expression. */ + not?: InputMaybe; + /** Checks for any expressions in this list. */ + or?: InputMaybe>; +}; + /** Represents an update to a `CtfSecret`. Fields that are set will be updated. */ export type CtfSecretPatch = { credentials?: InputMaybe; @@ -688,6 +751,32 @@ export enum CtfsOrderBy { TitleDesc = 'TITLE_DESC' } +/** A filter to be used against Datetime fields. All fields are combined with a logical ‘and.’ */ +export type DatetimeFilter = { + /** Not equal to the specified value, treating null like an ordinary value. */ + distinctFrom?: InputMaybe; + /** Equal to the specified value. */ + equalTo?: InputMaybe; + /** Greater than the specified value. */ + greaterThan?: InputMaybe; + /** Greater than or equal to the specified value. */ + greaterThanOrEqualTo?: InputMaybe; + /** Included in the specified list. */ + in?: InputMaybe>; + /** Is null (if `true` is specified) or is not null (if `false` is specified). */ + isNull?: InputMaybe; + /** Less than the specified value. */ + lessThan?: InputMaybe; + /** Less than or equal to the specified value. */ + lessThanOrEqualTo?: InputMaybe; + /** Equal to the specified value, treating null like an ordinary value. */ + notDistinctFrom?: InputMaybe; + /** Not equal to the specified value. */ + notEqualTo?: InputMaybe; + /** Not included in the specified list. */ + notIn?: InputMaybe>; +}; + /** All input for the `deleteAssignedTagByNodeId` mutation. */ export type DeleteAssignedTagByNodeIdInput = { /** @@ -960,6 +1049,32 @@ export type ImportCtfPayload = { query?: Maybe; }; +/** A filter to be used against Int fields. All fields are combined with a logical ‘and.’ */ +export type IntFilter = { + /** Not equal to the specified value, treating null like an ordinary value. */ + distinctFrom?: InputMaybe; + /** Equal to the specified value. */ + equalTo?: InputMaybe; + /** Greater than the specified value. */ + greaterThan?: InputMaybe; + /** Greater than or equal to the specified value. */ + greaterThanOrEqualTo?: InputMaybe; + /** Included in the specified list. */ + in?: InputMaybe>; + /** Is null (if `true` is specified) or is not null (if `false` is specified). */ + isNull?: InputMaybe; + /** Less than the specified value. */ + lessThan?: InputMaybe; + /** Less than or equal to the specified value. */ + lessThanOrEqualTo?: InputMaybe; + /** Equal to the specified value, treating null like an ordinary value. */ + notDistinctFrom?: InputMaybe; + /** Not equal to the specified value. */ + notEqualTo?: InputMaybe; + /** Not included in the specified list. */ + notIn?: InputMaybe>; +}; + export type Invitation = Node & { __typename?: 'Invitation'; /** Reads a single `Ctf` that is related to this `Invitation`. */ @@ -983,6 +1098,20 @@ export type InvitationCondition = { profileId?: InputMaybe; }; +/** A filter to be used against `Invitation` object types. All fields are combined with a logical ‘and.’ */ +export type InvitationFilter = { + /** Checks for all expressions in this list. */ + and?: InputMaybe>; + /** Filter by the object’s `ctfId` field. */ + ctfId?: InputMaybe; + /** Negates the expression. */ + not?: InputMaybe; + /** Checks for any expressions in this list. */ + or?: InputMaybe>; + /** Filter by the object’s `profileId` field. */ + profileId?: InputMaybe; +}; + /** An input for mutations affecting `Invitation` */ export type InvitationInput = { ctfId: Scalars['Int']['input']; @@ -1506,6 +1635,7 @@ export type ProfileInvitationsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1529,6 +1659,7 @@ export type ProfileWorkOnTasksArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1573,10 +1704,14 @@ export type ProfileFilter = { and?: InputMaybe>; /** Filter by the object’s `discordId` field. */ discordId?: InputMaybe; + /** Filter by the object’s `id` field. */ + id?: InputMaybe; /** Negates the expression. */ not?: InputMaybe; /** Checks for any expressions in this list. */ or?: InputMaybe>; + /** Filter by the object’s `role` field. */ + role?: InputMaybe; /** Filter by the object’s `username` field. */ username?: InputMaybe; }; @@ -1782,6 +1917,7 @@ export type QueryAssignedTagsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1818,6 +1954,7 @@ export type QueryCtfSecretsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1842,6 +1979,7 @@ export type QueryCtfsArgs = { export type QueryGuestsArgs = { after?: InputMaybe; before?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1852,6 +1990,7 @@ export type QueryGuestsArgs = { export type QueryIncomingCtfArgs = { after?: InputMaybe; before?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1876,6 +2015,7 @@ export type QueryInvitationsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -1893,6 +2033,7 @@ export type QueryNodeArgs = { export type QueryPastCtfArgs = { after?: InputMaybe; before?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2049,6 +2190,7 @@ export type QueryWorkOnTasksArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2210,6 +2352,32 @@ export enum Role { UserMember = 'USER_MEMBER' } +/** A filter to be used against Role fields. All fields are combined with a logical ‘and.’ */ +export type RoleFilter = { + /** Not equal to the specified value, treating null like an ordinary value. */ + distinctFrom?: InputMaybe; + /** Equal to the specified value. */ + equalTo?: InputMaybe; + /** Greater than the specified value. */ + greaterThan?: InputMaybe; + /** Greater than or equal to the specified value. */ + greaterThanOrEqualTo?: InputMaybe; + /** Included in the specified list. */ + in?: InputMaybe>; + /** Is null (if `true` is specified) or is not null (if `false` is specified). */ + isNull?: InputMaybe; + /** Less than the specified value. */ + lessThan?: InputMaybe; + /** Less than or equal to the specified value. */ + lessThanOrEqualTo?: InputMaybe; + /** Equal to the specified value, treating null like an ordinary value. */ + notDistinctFrom?: InputMaybe; + /** Not equal to the specified value. */ + notEqualTo?: InputMaybe; + /** Not included in the specified list. */ + notIn?: InputMaybe>; +}; + /** All input for the `setDiscordEventLink` mutation. */ export type SetDiscordEventLinkInput = { /** @@ -2358,8 +2526,80 @@ export type StopWorkingOnPayloadWorkOnTaskEdgeArgs = { /** A filter to be used against String fields. All fields are combined with a logical ‘and.’ */ export type StringFilter = { + /** Not equal to the specified value, treating null like an ordinary value. */ + distinctFrom?: InputMaybe; + /** Not equal to the specified value, treating null like an ordinary value (case-insensitive). */ + distinctFromInsensitive?: InputMaybe; + /** Ends with the specified string (case-sensitive). */ + endsWith?: InputMaybe; + /** Ends with the specified string (case-insensitive). */ + endsWithInsensitive?: InputMaybe; + /** Equal to the specified value. */ + equalTo?: InputMaybe; + /** Equal to the specified value (case-insensitive). */ + equalToInsensitive?: InputMaybe; + /** Greater than the specified value. */ + greaterThan?: InputMaybe; + /** Greater than the specified value (case-insensitive). */ + greaterThanInsensitive?: InputMaybe; + /** Greater than or equal to the specified value. */ + greaterThanOrEqualTo?: InputMaybe; + /** Greater than or equal to the specified value (case-insensitive). */ + greaterThanOrEqualToInsensitive?: InputMaybe; + /** Included in the specified list. */ + in?: InputMaybe>; + /** Included in the specified list (case-insensitive). */ + inInsensitive?: InputMaybe>; + /** Contains the specified string (case-sensitive). */ + includes?: InputMaybe; /** Contains the specified string (case-insensitive). */ includesInsensitive?: InputMaybe; + /** Is null (if `true` is specified) or is not null (if `false` is specified). */ + isNull?: InputMaybe; + /** Less than the specified value. */ + lessThan?: InputMaybe; + /** Less than the specified value (case-insensitive). */ + lessThanInsensitive?: InputMaybe; + /** Less than or equal to the specified value. */ + lessThanOrEqualTo?: InputMaybe; + /** Less than or equal to the specified value (case-insensitive). */ + lessThanOrEqualToInsensitive?: InputMaybe; + /** Matches the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters. */ + like?: InputMaybe; + /** Matches the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters. */ + likeInsensitive?: InputMaybe; + /** Equal to the specified value, treating null like an ordinary value. */ + notDistinctFrom?: InputMaybe; + /** Equal to the specified value, treating null like an ordinary value (case-insensitive). */ + notDistinctFromInsensitive?: InputMaybe; + /** Does not end with the specified string (case-sensitive). */ + notEndsWith?: InputMaybe; + /** Does not end with the specified string (case-insensitive). */ + notEndsWithInsensitive?: InputMaybe; + /** Not equal to the specified value. */ + notEqualTo?: InputMaybe; + /** Not equal to the specified value (case-insensitive). */ + notEqualToInsensitive?: InputMaybe; + /** Not included in the specified list. */ + notIn?: InputMaybe>; + /** Not included in the specified list (case-insensitive). */ + notInInsensitive?: InputMaybe>; + /** Does not contain the specified string (case-sensitive). */ + notIncludes?: InputMaybe; + /** Does not contain the specified string (case-insensitive). */ + notIncludesInsensitive?: InputMaybe; + /** Does not match the specified pattern (case-sensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters. */ + notLike?: InputMaybe; + /** Does not match the specified pattern (case-insensitive). An underscore (_) matches any single character; a percent sign (%) matches any sequence of zero or more characters. */ + notLikeInsensitive?: InputMaybe; + /** Does not start with the specified string (case-sensitive). */ + notStartsWith?: InputMaybe; + /** Does not start with the specified string (case-insensitive). */ + notStartsWithInsensitive?: InputMaybe; + /** Starts with the specified string (case-sensitive). */ + startsWith?: InputMaybe; + /** Starts with the specified string (case-insensitive). */ + startsWithInsensitive?: InputMaybe; }; /** The root subscription type: contains realtime events you can subscribe to with the `subscription` operation. */ @@ -2394,6 +2634,7 @@ export type TagAssignedTagsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2424,6 +2665,8 @@ export type TagCondition = { export type TagFilter = { /** Checks for all expressions in this list. */ and?: InputMaybe>; + /** Filter by the object’s `id` field. */ + id?: InputMaybe; /** Negates the expression. */ not?: InputMaybe; /** Checks for any expressions in this list. */ @@ -2521,6 +2764,7 @@ export type TaskAssignedTagsArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2556,6 +2800,7 @@ export type TaskWorkOnTasksArgs = { after?: InputMaybe; before?: InputMaybe; condition?: InputMaybe; + filter?: InputMaybe; first?: InputMaybe; last?: InputMaybe; offset?: InputMaybe; @@ -2576,10 +2821,16 @@ export type TaskCondition = { export type TaskFilter = { /** Checks for all expressions in this list. */ and?: InputMaybe>; + /** Filter by the object’s `ctfId` field. */ + ctfId?: InputMaybe; + /** Filter by the object’s `id` field. */ + id?: InputMaybe; /** Negates the expression. */ not?: InputMaybe; /** Checks for any expressions in this list. */ or?: InputMaybe>; + /** Filter by the object’s `solved` field. */ + solved?: InputMaybe; /** Filter by the object’s `title` field. */ title?: InputMaybe; }; @@ -3122,6 +3373,20 @@ export type WorkOnTaskCondition = { taskId?: InputMaybe; }; +/** A filter to be used against `WorkOnTask` object types. All fields are combined with a logical ‘and.’ */ +export type WorkOnTaskFilter = { + /** Checks for all expressions in this list. */ + and?: InputMaybe>; + /** Negates the expression. */ + not?: InputMaybe; + /** Checks for any expressions in this list. */ + or?: InputMaybe>; + /** Filter by the object’s `profileId` field. */ + profileId?: InputMaybe; + /** Filter by the object’s `taskId` field. */ + taskId?: InputMaybe; +}; + /** An input for mutations affecting `WorkOnTask` */ export type WorkOnTaskInput = { active?: InputMaybe; From ece017458896749742f9c9aaed50b8d9dd25d507 Mon Sep 17 00:00:00 2001 From: JJ-8 <34778827+JJ-8@users.noreply.github.com> Date: Sun, 25 May 2025 14:30:45 +0200 Subject: [PATCH 3/5] Use correct PostgreSQL docker image in CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f18e7c6ad..82476b617 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest services: postgres: - image: postgres:latest + image: postgres:596e4c843a9db32269a3757624d8a6a6f633e01895acb83fe0842497fd897eb7 env: POSTGRES_PASSWORD: ctfnote POSTGRES_USER: ctfnote From e38f226b6e5286cfacae925dc7a592f9f2741906 Mon Sep 17 00:00:00 2001 From: JJ-8 <34778827+JJ-8@users.noreply.github.com> Date: Sun, 25 May 2025 14:33:53 +0200 Subject: [PATCH 4/5] Fix sha256 format for CI PostgreSQL image --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 82476b617..e3003c722 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest services: postgres: - image: postgres:596e4c843a9db32269a3757624d8a6a6f633e01895acb83fe0842497fd897eb7 + image: postgres@sha256:596e4c843a9db32269a3757624d8a6a6f633e01895acb83fe0842497fd897eb7 env: POSTGRES_PASSWORD: ctfnote POSTGRES_USER: ctfnote From da097b8e8c5b4ce0d3c7b2a43bbf721765c924b9 Mon Sep 17 00:00:00 2001 From: JJ-8 <34778827+JJ-8@users.noreply.github.com> Date: Sun, 25 May 2025 14:39:35 +0200 Subject: [PATCH 5/5] Update graphql schema once again Somehow my local version did not match CI/CD. --- front/graphql.schema.json | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/front/graphql.schema.json b/front/graphql.schema.json index 74f19d35f..2845f01c5 100644 --- a/front/graphql.schema.json +++ b/front/graphql.schema.json @@ -1,16 +1,13 @@ { "__schema": { "queryType": { - "name": "Query", - "kind": "OBJECT" + "name": "Query" }, "mutationType": { - "name": "Mutation", - "kind": "OBJECT" + "name": "Mutation" }, "subscriptionType": { - "name": "Subscription", - "kind": "OBJECT" + "name": "Subscription" }, "types": [ {