diff --git a/apps/console/src/pages/organizations/mitigations/MitigationListView.tsx b/apps/console/src/pages/organizations/mitigations/MitigationListView.tsx index d4320d8af..4486761e3 100644 --- a/apps/console/src/pages/organizations/mitigations/MitigationListView.tsx +++ b/apps/console/src/pages/organizations/mitigations/MitigationListView.tsx @@ -1,9 +1,10 @@ -import { Suspense, useEffect, useState } from "react"; +import { Suspense, useEffect, useState, useRef } from "react"; import { graphql, PreloadedQuery, usePreloadedQuery, useQueryLoader, + useMutation, } from "react-relay"; import { useParams, useNavigate, Link } from "react-router"; import { Badge } from "@/components/ui/badge"; @@ -20,16 +21,17 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { MitigationListViewQuery as MitigationListViewQueryType } from "./__generated__/MitigationListViewQuery.graphql"; import { MitigationListViewSkeleton } from "./MitigationListPage"; import { Button } from "@/components/ui/button"; +import { useToast } from "@/hooks/use-toast"; +import { MitigationListViewImportMitigationMutation as MitigationListViewImportMitigationMutationType } from "./__generated__/MitigationListViewImportMitigationMutation.graphql"; const mitigationListViewQuery = graphql` query MitigationListViewQuery($organizationId: ID!, $first: Int) { organization: node(id: $organizationId) { id ... on Organization { - mitigations( - first: $first - orderBy: { direction: ASC, field: CREATED_AT } - ) @connection(key: "MitigationListView_mitigations") { + mitigations(first: $first) + @connection(key: "MitigationListView_mitigations") { + __id edges { node { id @@ -48,6 +50,28 @@ const mitigationListViewQuery = graphql` } `; +const importMitigationMutation = graphql` + mutation MitigationListViewImportMitigationMutation( + $input: ImportMitigationInput! + $connections: [ID!]! + ) { + importMitigation(input: $input) { + mitigationEdges @appendEdge(connections: $connections) { + node { + id + name + description + category + state + importance + createdAt + updatedAt + } + } + } + } +`; + interface Mitigation { id?: string; name?: string; @@ -93,6 +117,14 @@ function MitigationListContent({ const navigate = useNavigate(); const { organizationId } = useParams(); + const fileInputRef = useRef(null); + const [isImporting, setIsImporting] = useState(false); + const { toast } = useToast(); + + const [importMitigation] = + useMutation( + importMitigationMutation + ); // Monitor URL hash for changes and update state accordingly const [hashValue, setHashValue] = useState(window.location.hash); @@ -249,18 +281,75 @@ function MitigationListContent({ } }; + const handleFileChange = (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + + setIsImporting(true); + + importMitigation({ + variables: { + connections: [data.organization.mitigations.__id], + input: { + organizationId: organizationId!, + file: null, + }, + }, + uploadables: { + "input.file": file, + }, + onCompleted: () => { + setIsImporting(false); + toast({ + title: "Mitigations imported", + description: "Mitigations have been imported successfully.", + variant: "default", + }); + if (fileInputRef.current) { + fileInputRef.current.value = ""; + } + }, + onError: (error) => { + setIsImporting(false); + toast({ + title: "Error importing mitigations", + description: error.message, + variant: "destructive", + }); + }, + }); + }; + return ( - - New Mitigation - - +
+ + +
} > + {/* Hidden file input for mitigation import */} + + {/* Global Progress Summary */}
diff --git a/apps/console/src/pages/organizations/mitigations/__generated__/MitigationListViewImportMitigationMutation.graphql.ts b/apps/console/src/pages/organizations/mitigations/__generated__/MitigationListViewImportMitigationMutation.graphql.ts new file mode 100644 index 000000000..61c8f165d --- /dev/null +++ b/apps/console/src/pages/organizations/mitigations/__generated__/MitigationListViewImportMitigationMutation.graphql.ts @@ -0,0 +1,217 @@ +/** + * @generated SignedSource<> + * @lightSyntaxTransform + * @nogrep + */ + +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck + +import { ConcreteRequest } from 'relay-runtime'; +export type MitigationImportance = "ADVANCED" | "MANDATORY" | "PREFERRED"; +export type MitigationState = "IMPLEMENTED" | "IN_PROGRESS" | "NOT_APPLICABLE" | "NOT_STARTED"; +export type ImportMitigationInput = { + file: any; + organizationId: string; +}; +export type MitigationListViewImportMitigationMutation$variables = { + connections: ReadonlyArray; + input: ImportMitigationInput; +}; +export type MitigationListViewImportMitigationMutation$data = { + readonly importMitigation: { + readonly mitigationEdges: ReadonlyArray<{ + readonly node: { + readonly category: string; + readonly createdAt: string; + readonly description: string; + readonly id: string; + readonly importance: MitigationImportance; + readonly name: string; + readonly state: MitigationState; + readonly updatedAt: string; + }; + }>; + }; +}; +export type MitigationListViewImportMitigationMutation = { + response: MitigationListViewImportMitigationMutation$data; + variables: MitigationListViewImportMitigationMutation$variables; +}; + +const node: ConcreteRequest = (function(){ +var v0 = { + "defaultValue": null, + "kind": "LocalArgument", + "name": "connections" +}, +v1 = { + "defaultValue": null, + "kind": "LocalArgument", + "name": "input" +}, +v2 = [ + { + "kind": "Variable", + "name": "input", + "variableName": "input" + } +], +v3 = { + "alias": null, + "args": null, + "concreteType": "MitigationEdge", + "kind": "LinkedField", + "name": "mitigationEdges", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Mitigation", + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "description", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "category", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "state", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "importance", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "createdAt", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "updatedAt", + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": null +}; +return { + "fragment": { + "argumentDefinitions": [ + (v0/*: any*/), + (v1/*: any*/) + ], + "kind": "Fragment", + "metadata": null, + "name": "MitigationListViewImportMitigationMutation", + "selections": [ + { + "alias": null, + "args": (v2/*: any*/), + "concreteType": "ImportMitigationPayload", + "kind": "LinkedField", + "name": "importMitigation", + "plural": false, + "selections": [ + (v3/*: any*/) + ], + "storageKey": null + } + ], + "type": "Mutation", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": [ + (v1/*: any*/), + (v0/*: any*/) + ], + "kind": "Operation", + "name": "MitigationListViewImportMitigationMutation", + "selections": [ + { + "alias": null, + "args": (v2/*: any*/), + "concreteType": "ImportMitigationPayload", + "kind": "LinkedField", + "name": "importMitigation", + "plural": false, + "selections": [ + (v3/*: any*/), + { + "alias": null, + "args": null, + "filters": null, + "handle": "appendEdge", + "key": "", + "kind": "LinkedHandle", + "name": "mitigationEdges", + "handleArgs": [ + { + "kind": "Variable", + "name": "connections", + "variableName": "connections" + } + ] + } + ], + "storageKey": null + } + ] + }, + "params": { + "cacheID": "84c038c572378999bfaacb87e8172b1e", + "id": null, + "metadata": {}, + "name": "MitigationListViewImportMitigationMutation", + "operationKind": "mutation", + "text": "mutation MitigationListViewImportMitigationMutation(\n $input: ImportMitigationInput!\n) {\n importMitigation(input: $input) {\n mitigationEdges {\n node {\n id\n name\n description\n category\n state\n importance\n createdAt\n updatedAt\n }\n }\n }\n}\n" + } +}; +})(); + +(node as any).hash = "59e3d4a8e71cee0dcee606b93d706dad"; + +export default node; diff --git a/apps/console/src/pages/organizations/mitigations/__generated__/MitigationListViewQuery.graphql.ts b/apps/console/src/pages/organizations/mitigations/__generated__/MitigationListViewQuery.graphql.ts index e1106f8fc..6ce2d3d62 100644 --- a/apps/console/src/pages/organizations/mitigations/__generated__/MitigationListViewQuery.graphql.ts +++ b/apps/console/src/pages/organizations/mitigations/__generated__/MitigationListViewQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -19,6 +19,7 @@ export type MitigationListViewQuery$data = { readonly organization: { readonly id: string; readonly mitigations?: { + readonly __id: string; readonly edges: ReadonlyArray<{ readonly node: { readonly category: string; @@ -65,21 +66,13 @@ v3 = { "storageKey": null }, v4 = { - "kind": "Literal", - "name": "orderBy", - "value": { - "direction": "ASC", - "field": "CREATED_AT" - } -}, -v5 = { "alias": null, "args": null, "kind": "ScalarField", "name": "__typename", "storageKey": null }, -v6 = [ +v5 = [ { "alias": null, "args": null, @@ -146,7 +139,7 @@ v6 = [ "name": "updatedAt", "storageKey": null }, - (v5/*: any*/) + (v4/*: any*/) ], "storageKey": null }, @@ -184,15 +177,26 @@ v6 = [ } ], "storageKey": null + }, + { + "kind": "ClientExtension", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "__id", + "storageKey": null + } + ] } ], -v7 = [ +v6 = [ { "kind": "Variable", "name": "first", "variableName": "first" - }, - (v4/*: any*/) + } ]; return { "fragment": { @@ -218,15 +222,13 @@ return { "selections": [ { "alias": "mitigations", - "args": [ - (v4/*: any*/) - ], + "args": null, "concreteType": "MitigationConnection", "kind": "LinkedField", "name": "__MitigationListView_mitigations_connection", "plural": false, - "selections": (v6/*: any*/), - "storageKey": "__MitigationListView_mitigations_connection(orderBy:{\"direction\":\"ASC\",\"field\":\"CREATED_AT\"})" + "selections": (v5/*: any*/), + "storageKey": null } ], "type": "Organization", @@ -256,27 +258,25 @@ return { "name": "node", "plural": false, "selections": [ - (v5/*: any*/), + (v4/*: any*/), (v3/*: any*/), { "kind": "InlineFragment", "selections": [ { "alias": null, - "args": (v7/*: any*/), + "args": (v6/*: any*/), "concreteType": "MitigationConnection", "kind": "LinkedField", "name": "mitigations", "plural": false, - "selections": (v6/*: any*/), + "selections": (v5/*: any*/), "storageKey": null }, { "alias": null, - "args": (v7/*: any*/), - "filters": [ - "orderBy" - ], + "args": (v6/*: any*/), + "filters": null, "handle": "connection", "key": "MitigationListView_mitigations", "kind": "LinkedHandle", @@ -292,7 +292,7 @@ return { ] }, "params": { - "cacheID": "cb49e5e7740ec71ce0b8e1abbdbcf24d", + "cacheID": "9951f5e4be50df7a883af63426fe5fde", "id": null, "metadata": { "connection": [ @@ -309,11 +309,11 @@ return { }, "name": "MitigationListViewQuery", "operationKind": "query", - "text": "query MitigationListViewQuery(\n $organizationId: ID!\n $first: Int\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n mitigations(first: $first, orderBy: {direction: ASC, field: CREATED_AT}) {\n edges {\n node {\n id\n name\n description\n category\n state\n importance\n createdAt\n updatedAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n" + "text": "query MitigationListViewQuery(\n $organizationId: ID!\n $first: Int\n) {\n organization: node(id: $organizationId) {\n __typename\n id\n ... on Organization {\n mitigations(first: $first) {\n edges {\n node {\n id\n name\n description\n category\n state\n importance\n createdAt\n updatedAt\n __typename\n }\n cursor\n }\n pageInfo {\n endCursor\n hasNextPage\n }\n }\n }\n }\n}\n" } }; })(); -(node as any).hash = "ee7fdf984d5cb376068ba53d0a56c59b"; +(node as any).hash = "c2da6b42a986dd18cd18603c5f5809ad"; export default node; diff --git a/pkg/probo/mitigation_service.go b/pkg/probo/mitigation_service.go index 04817773d..50922fdb6 100644 --- a/pkg/probo/mitigation_service.go +++ b/pkg/probo/mitigation_service.go @@ -46,6 +46,14 @@ type ( State *coredata.MitigationState Importance *coredata.MitigationImportance } + + ImportMitigationRequest struct { + Mitigations []struct { + Name string `json:"name"` + Description string `json:"description"` + Category string `json:"category"` + } `json:"mitigations"` + } ) func (s MitigationService) Get( @@ -68,6 +76,65 @@ func (s MitigationService) Get( return mitigation, nil } +func (s MitigationService) Import( + ctx context.Context, + organizationID gid.GID, + req ImportMitigationRequest, +) (*page.Page[*coredata.Mitigation, coredata.MitigationOrderField], error) { + + importedMitigations := coredata.Mitigations{} + for _, mitigation := range req.Mitigations { + now := time.Now() + + mitigationID, err := gid.NewGID(organizationID.TenantID(), coredata.MitigationEntityType) + if err != nil { + return nil, fmt.Errorf("cannot create global id: %w", err) + } + + importedMitigations = append(importedMitigations, &coredata.Mitigation{ + ID: mitigationID, + OrganizationID: organizationID, + Name: mitigation.Name, + Description: mitigation.Description, + Category: mitigation.Category, + State: coredata.MitigationStateNotStarted, + Standards: []string{}, + Importance: coredata.MitigationImportancePreferred, + CreatedAt: now, + UpdatedAt: now, + }) + } + + err := s.svc.pg.WithTx( + ctx, + func(tx pg.Conn) error { + for _, mitigation := range importedMitigations { + if err := mitigation.Insert(ctx, tx, s.svc.scope); err != nil { + return fmt.Errorf("cannot insert mitigation: %w", err) + } + } + + return nil + }, + ) + + if err != nil { + return nil, fmt.Errorf("cannot import mitigations: %w", err) + } + + cursor := page.NewCursor( + len(importedMitigations), + nil, + page.Head, + page.OrderBy[coredata.MitigationOrderField]{ + Field: coredata.MitigationOrderFieldCreatedAt, + Direction: page.OrderDirectionAsc, + }, + ) + + return page.NewPage(importedMitigations, cursor), nil +} + func (s MitigationService) Update( ctx context.Context, req UpdateMitigationRequest, diff --git a/pkg/server/api/console/v1/schema.graphql b/pkg/server/api/console/v1/schema.graphql index 4fce4ece0..1331a39f7 100644 --- a/pkg/server/api/console/v1/schema.graphql +++ b/pkg/server/api/console/v1/schema.graphql @@ -916,7 +916,7 @@ type UpdateMitigationPayload { } type ImportMitigationPayload { - success: Boolean! + mitigationEdges: [MitigationEdge!]! } type CreateTaskPayload { diff --git a/pkg/server/api/console/v1/schema/schema.go b/pkg/server/api/console/v1/schema/schema.go index 243f4ce41..8599bb28e 100644 --- a/pkg/server/api/console/v1/schema/schema.go +++ b/pkg/server/api/console/v1/schema/schema.go @@ -187,6 +187,10 @@ type ComplexityRoot struct { FrameworkEdge func(childComplexity int) int } + ImportMitigationPayload struct { + MitigationEdges func(childComplexity int) int + } + InviteUserPayload struct { Success func(childComplexity int) int } @@ -231,6 +235,7 @@ type ComplexityRoot struct { DeleteTask func(childComplexity int, input types.DeleteTaskInput) int DeleteVendor func(childComplexity int, input types.DeleteVendorInput) int ImportFramework func(childComplexity int, input types.ImportFrameworkInput) int + ImportMitigation func(childComplexity int, input types.ImportMitigationInput) int InviteUser func(childComplexity int, input types.InviteUserInput) int RemoveUser func(childComplexity int, input types.RemoveUserInput) int UnassignTask func(childComplexity int, input types.UnassignTaskInput) int @@ -448,34 +453,35 @@ type MitigationResolver interface { Tasks(ctx context.Context, obj *types.Mitigation, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TaskOrderBy) (*types.TaskConnection, error) } type MutationResolver interface { - CreateVendor(ctx context.Context, input types.CreateVendorInput) (*types.CreateVendorPayload, error) - UpdateVendor(ctx context.Context, input types.UpdateVendorInput) (*types.UpdateVendorPayload, error) - DeleteVendor(ctx context.Context, input types.DeleteVendorInput) (*types.DeleteVendorPayload, error) - CreatePeople(ctx context.Context, input types.CreatePeopleInput) (*types.CreatePeoplePayload, error) - UpdatePeople(ctx context.Context, input types.UpdatePeopleInput) (*types.UpdatePeoplePayload, error) - DeletePeople(ctx context.Context, input types.DeletePeopleInput) (*types.DeletePeoplePayload, error) CreateOrganization(ctx context.Context, input types.CreateOrganizationInput) (*types.CreateOrganizationPayload, error) UpdateOrganization(ctx context.Context, input types.UpdateOrganizationInput) (*types.UpdateOrganizationPayload, error) DeleteOrganization(ctx context.Context, input types.DeleteOrganizationInput) (*types.DeleteOrganizationPayload, error) - CreateTask(ctx context.Context, input types.CreateTaskInput) (*types.CreateTaskPayload, error) - UpdateTask(ctx context.Context, input types.UpdateTaskInput) (*types.UpdateTaskPayload, error) - DeleteTask(ctx context.Context, input types.DeleteTaskInput) (*types.DeleteTaskPayload, error) - AssignTask(ctx context.Context, input types.AssignTaskInput) (*types.AssignTaskPayload, error) - UnassignTask(ctx context.Context, input types.UnassignTaskInput) (*types.UnassignTaskPayload, error) + ConfirmEmail(ctx context.Context, input types.ConfirmEmailInput) (*types.ConfirmEmailPayload, error) + InviteUser(ctx context.Context, input types.InviteUserInput) (*types.InviteUserPayload, error) + RemoveUser(ctx context.Context, input types.RemoveUserInput) (*types.RemoveUserPayload, error) + CreatePeople(ctx context.Context, input types.CreatePeopleInput) (*types.CreatePeoplePayload, error) + UpdatePeople(ctx context.Context, input types.UpdatePeopleInput) (*types.UpdatePeoplePayload, error) + DeletePeople(ctx context.Context, input types.DeletePeopleInput) (*types.DeletePeoplePayload, error) + CreateVendor(ctx context.Context, input types.CreateVendorInput) (*types.CreateVendorPayload, error) + UpdateVendor(ctx context.Context, input types.UpdateVendorInput) (*types.UpdateVendorPayload, error) + DeleteVendor(ctx context.Context, input types.DeleteVendorInput) (*types.DeleteVendorPayload, error) CreateFramework(ctx context.Context, input types.CreateFrameworkInput) (*types.CreateFrameworkPayload, error) UpdateFramework(ctx context.Context, input types.UpdateFrameworkInput) (*types.UpdateFrameworkPayload, error) ImportFramework(ctx context.Context, input types.ImportFrameworkInput) (*types.ImportFrameworkPayload, error) DeleteFramework(ctx context.Context, input types.DeleteFrameworkInput) (*types.DeleteFrameworkPayload, error) CreateMitigation(ctx context.Context, input types.CreateMitigationInput) (*types.CreateMitigationPayload, error) UpdateMitigation(ctx context.Context, input types.UpdateMitigationInput) (*types.UpdateMitigationPayload, error) + ImportMitigation(ctx context.Context, input types.ImportMitigationInput) (*types.ImportMitigationPayload, error) + CreateTask(ctx context.Context, input types.CreateTaskInput) (*types.CreateTaskPayload, error) + UpdateTask(ctx context.Context, input types.UpdateTaskInput) (*types.UpdateTaskPayload, error) + DeleteTask(ctx context.Context, input types.DeleteTaskInput) (*types.DeleteTaskPayload, error) + AssignTask(ctx context.Context, input types.AssignTaskInput) (*types.AssignTaskPayload, error) + UnassignTask(ctx context.Context, input types.UnassignTaskInput) (*types.UnassignTaskPayload, error) UploadEvidence(ctx context.Context, input types.UploadEvidenceInput) (*types.UploadEvidencePayload, error) DeleteEvidence(ctx context.Context, input types.DeleteEvidenceInput) (*types.DeleteEvidencePayload, error) CreatePolicy(ctx context.Context, input types.CreatePolicyInput) (*types.CreatePolicyPayload, error) UpdatePolicy(ctx context.Context, input types.UpdatePolicyInput) (*types.UpdatePolicyPayload, error) DeletePolicy(ctx context.Context, input types.DeletePolicyInput) (*types.DeletePolicyPayload, error) - ConfirmEmail(ctx context.Context, input types.ConfirmEmailInput) (*types.ConfirmEmailPayload, error) - InviteUser(ctx context.Context, input types.InviteUserInput) (*types.InviteUserPayload, error) - RemoveUser(ctx context.Context, input types.RemoveUserInput) (*types.RemoveUserPayload, error) } type OrganizationResolver interface { LogoURL(ctx context.Context, obj *types.Organization) (*string, error) @@ -889,6 +895,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.ImportFrameworkPayload.FrameworkEdge(childComplexity), true + case "ImportMitigationPayload.mitigationEdges": + if e.complexity.ImportMitigationPayload.MitigationEdges == nil { + break + } + + return e.complexity.ImportMitigationPayload.MitigationEdges(childComplexity), true + case "InviteUserPayload.success": if e.complexity.InviteUserPayload.Success == nil { break @@ -1196,6 +1209,18 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Mutation.ImportFramework(childComplexity, args["input"].(types.ImportFrameworkInput)), true + case "Mutation.importMitigation": + if e.complexity.Mutation.ImportMitigation == nil { + break + } + + args, err := ec.field_Mutation_importMitigation_args(context.TODO(), rawArgs) + if err != nil { + return 0, false + } + + return e.complexity.Mutation.ImportMitigation(childComplexity, args["input"].(types.ImportMitigationInput)), true + case "Mutation.inviteUser": if e.complexity.Mutation.InviteUser == nil { break @@ -2080,6 +2105,7 @@ func (e *executableSchema) Exec(ctx context.Context) graphql.ResponseHandler { ec.unmarshalInputEvidenceOrder, ec.unmarshalInputFrameworkOrder, ec.unmarshalInputImportFrameworkInput, + ec.unmarshalInputImportMitigationInput, ec.unmarshalInputInviteUserInput, ec.unmarshalInputMitigationOrder, ec.unmarshalInputOrganizationOrder, @@ -2195,7 +2221,8 @@ func (ec *executionContext) introspectType(name string) (*introspection.Type, er } var sources = []*ast.Source{ - {Name: "../schema.graphql", Input: `directive @goField( + {Name: "../schema.graphql", Input: `# Directives +directive @goField( forceResolver: Boolean name: String omittable: Boolean @@ -2208,16 +2235,33 @@ directive @goModel( directive @goEnum(value: String) on ENUM_VALUE +# Scalars scalar CursorKey scalar Void scalar Datetime scalar Upload scalar Duration +# Interfaces interface Node { id: ID! } +# Pagination +type PageInfo { + hasNextPage: Boolean! + hasPreviousPage: Boolean! + startCursor: CursorKey + endCursor: CursorKey +} + +# Enums +enum OrderDirection + @goModel(model: "github.com/getprobo/probo/pkg/page.OrderDirection") { + ASC @goEnum(value: "github.com/getprobo/probo/pkg/page.OrderDirectionAsc") + DESC @goEnum(value: "github.com/getprobo/probo/pkg/page.OrderDirectionDesc") +} + enum MitigationState @goModel(model: "github.com/getprobo/probo/pkg/coredata.MitigationState") { NOT_STARTED @@ -2290,84 +2334,53 @@ enum MitigationImportance ) } -type PageInfo { - hasNextPage: Boolean! - hasPreviousPage: Boolean! - startCursor: CursorKey - endCursor: CursorKey +enum ServiceCriticality + @goModel(model: "github.com/getprobo/probo/pkg/coredata.ServiceCriticality") { + LOW + @goEnum( + value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityLow" + ) + MEDIUM + @goEnum( + value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityMedium" + ) + HIGH + @goEnum( + value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityHigh" + ) } -type OrganizationConnection { - edges: [OrganizationEdge!]! - pageInfo: PageInfo! +enum RiskTier + @goModel(model: "github.com/getprobo/probo/pkg/coredata.RiskTier") { + CRITICAL + @goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierCritical") + SIGNIFICANT + @goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierSignificant") + GENERAL + @goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierGeneral") } -type OrganizationEdge { - cursor: CursorKey! - node: Organization! +enum PolicyStatus + @goModel(model: "github.com/getprobo/probo/pkg/coredata.PolicyStatus") { + DRAFT + @goEnum(value: "github.com/getprobo/probo/pkg/coredata.PolicyStatusDraft") + ACTIVE + @goEnum(value: "github.com/getprobo/probo/pkg/coredata.PolicyStatusActive") } -type Organization implements Node { - id: ID! - name: String! - logoUrl: String @goField(forceResolver: true) - - users( - first: Int - after: CursorKey - last: Int - before: CursorKey - orderBy: UserOrder - ): UserConnection! @goField(forceResolver: true) - - frameworks( - first: Int - after: CursorKey - last: Int - before: CursorKey - orderBy: FrameworkOrder - ): FrameworkConnection! @goField(forceResolver: true) - - vendors( - first: Int - after: CursorKey - last: Int - before: CursorKey - orderBy: VendorOrder - ): VendorConnection! @goField(forceResolver: true) - - peoples( - first: Int - after: CursorKey - last: Int - before: CursorKey - orderBy: PeopleOrder - ): PeopleConnection! @goField(forceResolver: true) - - policies( - first: Int - after: CursorKey - last: Int - before: CursorKey - orderBy: PolicyOrder - ): PolicyConnection! @goField(forceResolver: true) - - mitigations( - first: Int - after: CursorKey - last: Int - before: CursorKey - orderBy: MitigationOrder - ): MitigationConnection! @goField(forceResolver: true) - - createdAt: Datetime! - updatedAt: Datetime! +enum EvidenceType + @goModel(model: "github.com/getprobo/probo/pkg/coredata.EvidenceType") { + FILE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceTypeFile") + LINK @goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceTypeLink") } -enum OrderDirection - @goModel(model: "github.com/getprobo/probo/pkg/page.OrderDirection") { - ASC @goEnum(value: "github.com/getprobo/probo/pkg/page.OrderDirectionAsc") - DESC @goEnum(value: "github.com/getprobo/probo/pkg/page.OrderDirectionDesc") +# Order Field Enums +enum UserOrderField + @goModel(model: "github.com/getprobo/probo/pkg/coredata.UserOrderField") { + CREATED_AT + @goEnum( + value: "github.com/getprobo/probo/pkg/coredata.UserOrderFieldCreatedAt" + ) } enum PeopleOrderField @@ -2430,6 +2443,21 @@ enum EvidenceOrderField CREATED_AT } +enum OrganizationOrderField { + NAME + CREATED_AT + UPDATED_AT +} + +# Order Input Types +input UserOrder + @goModel( + model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.UserOrderBy" + ) { + direction: OrderDirection! + field: UserOrderField! +} + input PeopleOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.PeopleOrderBy" @@ -2494,14 +2522,75 @@ input EvidenceOrder field: EvidenceOrderField! } -type PeopleConnection { - edges: [PeopleEdge!]! - pageInfo: PageInfo! +input OrganizationOrder { + direction: OrderDirection! + field: OrganizationOrderField! } -type PeopleEdge { - cursor: CursorKey! - node: People! +# Core Types +type Organization implements Node { + id: ID! + name: String! + logoUrl: String @goField(forceResolver: true) + + users( + first: Int + after: CursorKey + last: Int + before: CursorKey + orderBy: UserOrder + ): UserConnection! @goField(forceResolver: true) + + frameworks( + first: Int + after: CursorKey + last: Int + before: CursorKey + orderBy: FrameworkOrder + ): FrameworkConnection! @goField(forceResolver: true) + + vendors( + first: Int + after: CursorKey + last: Int + before: CursorKey + orderBy: VendorOrder + ): VendorConnection! @goField(forceResolver: true) + + peoples( + first: Int + after: CursorKey + last: Int + before: CursorKey + orderBy: PeopleOrder + ): PeopleConnection! @goField(forceResolver: true) + + policies( + first: Int + after: CursorKey + last: Int + before: CursorKey + orderBy: PolicyOrder + ): PolicyConnection! @goField(forceResolver: true) + + mitigations( + first: Int + after: CursorKey + last: Int + before: CursorKey + orderBy: MitigationOrder + ): MitigationConnection! @goField(forceResolver: true) + + createdAt: Datetime! + updatedAt: Datetime! +} + +type User implements Node { + id: ID! + fullName: String! + email: String! + createdAt: Datetime! + updatedAt: Datetime! } type People implements Node { @@ -2514,16 +2603,6 @@ type People implements Node { updatedAt: Datetime! } -type VendorConnection { - edges: [VendorEdge!]! - pageInfo: PageInfo! -} - -type VendorEdge { - cursor: CursorKey! - node: Vendor! -} - type Vendor implements Node { id: ID! name: String! @@ -2539,16 +2618,6 @@ type Vendor implements Node { updatedAt: Datetime! } -type FrameworkConnection { - edges: [FrameworkEdge!]! - pageInfo: PageInfo! -} - -type FrameworkEdge { - cursor: CursorKey! - node: Framework! -} - type Framework implements Node { id: ID! name: String! @@ -2566,16 +2635,6 @@ type Framework implements Node { updatedAt: Datetime! } -type ControlConnection { - edges: [ControlEdge!]! - pageInfo: PageInfo! -} - -type ControlEdge { - cursor: CursorKey! - node: Control! -} - type Control implements Node { id: ID! referenceId: String! @@ -2585,16 +2644,6 @@ type Control implements Node { updatedAt: Datetime! } -type MitigationConnection { - edges: [MitigationEdge!]! - pageInfo: PageInfo! -} - -type MitigationEdge { - cursor: CursorKey! - node: Mitigation! -} - type Mitigation implements Node { id: ID! category: String! @@ -2615,16 +2664,6 @@ type Mitigation implements Node { updatedAt: Datetime! } -type TaskConnection { - edges: [TaskEdge!]! - pageInfo: PageInfo! -} - -type TaskEdge { - cursor: CursorKey! - node: Task! -} - type Task implements Node { id: ID! name: String! @@ -2645,22 +2684,6 @@ type Task implements Node { updatedAt: Datetime! } -type EvidenceConnection { - edges: [EvidenceEdge!]! - pageInfo: PageInfo! -} - -type EvidenceEdge { - cursor: CursorKey! - node: Evidence! -} - -enum EvidenceType - @goModel(model: "github.com/getprobo/probo/pkg/coredata.EvidenceType") { - FILE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceTypeFile") - LINK @goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceTypeLink") -} - type Evidence implements Node { id: ID! fileUrl: String @goField(forceResolver: true) @@ -2676,20 +2699,13 @@ type Evidence implements Node { updatedAt: Datetime! } -type UserConnection { - edges: [UserEdge!]! - pageInfo: PageInfo! -} - -type UserEdge { - cursor: CursorKey! - node: User! -} - -type User implements Node { +type Policy implements Node { id: ID! - fullName: String! - email: String! + name: String! + status: PolicyStatus! + content: String! + reviewDate: Datetime + owner: People! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } @@ -2699,14 +2715,8 @@ type Session { expiresAt: Datetime! } -type Query { - node(id: ID!): Node! - viewer: Viewer! -} - type Viewer { id: ID! - user: User! organizations( @@ -2718,15 +2728,115 @@ type Viewer { ): OrganizationConnection! @goField(forceResolver: true) } +# Connection Types +type OrganizationConnection { + edges: [OrganizationEdge!]! + pageInfo: PageInfo! +} + +type OrganizationEdge { + cursor: CursorKey! + node: Organization! +} + +type UserConnection { + edges: [UserEdge!]! + pageInfo: PageInfo! +} + +type UserEdge { + cursor: CursorKey! + node: User! +} + +type PeopleConnection { + edges: [PeopleEdge!]! + pageInfo: PageInfo! +} + +type PeopleEdge { + cursor: CursorKey! + node: People! +} + +type VendorConnection { + edges: [VendorEdge!]! + pageInfo: PageInfo! +} + +type VendorEdge { + cursor: CursorKey! + node: Vendor! +} + +type FrameworkConnection { + edges: [FrameworkEdge!]! + pageInfo: PageInfo! +} + +type FrameworkEdge { + cursor: CursorKey! + node: Framework! +} + +type ControlConnection { + edges: [ControlEdge!]! + pageInfo: PageInfo! +} + +type ControlEdge { + cursor: CursorKey! + node: Control! +} + +type MitigationConnection { + edges: [MitigationEdge!]! + pageInfo: PageInfo! +} + +type MitigationEdge { + cursor: CursorKey! + node: Mitigation! +} + +type TaskConnection { + edges: [TaskEdge!]! + pageInfo: PageInfo! +} + +type TaskEdge { + cursor: CursorKey! + node: Task! +} + +type EvidenceConnection { + edges: [EvidenceEdge!]! + pageInfo: PageInfo! +} + +type EvidenceEdge { + cursor: CursorKey! + node: Evidence! +} + +type PolicyConnection { + edges: [PolicyEdge!]! + pageInfo: PageInfo! +} + +type PolicyEdge { + cursor: CursorKey! + node: Policy! +} + +# Root Types +type Query { + node(id: ID!): Node! + viewer: Viewer! +} + type Mutation { - createVendor(input: CreateVendorInput!): CreateVendorPayload! - updateVendor(input: UpdateVendorInput!): UpdateVendorPayload! - deleteVendor(input: DeleteVendorInput!): DeleteVendorPayload! - - createPeople(input: CreatePeopleInput!): CreatePeoplePayload! - updatePeople(input: UpdatePeopleInput!): UpdatePeoplePayload! - deletePeople(input: DeletePeopleInput!): DeletePeoplePayload! - + # Organization mutations createOrganization( input: CreateOrganizationInput! ): CreateOrganizationPayload! @@ -2737,30 +2847,62 @@ type Mutation { input: DeleteOrganizationInput! ): DeleteOrganizationPayload! + # User mutations + confirmEmail(input: ConfirmEmailInput!): ConfirmEmailPayload! + inviteUser(input: InviteUserInput!): InviteUserPayload! + removeUser(input: RemoveUserInput!): RemoveUserPayload! + + # People mutations + createPeople(input: CreatePeopleInput!): CreatePeoplePayload! + updatePeople(input: UpdatePeopleInput!): UpdatePeoplePayload! + deletePeople(input: DeletePeopleInput!): DeletePeoplePayload! + + # Vendor mutations + createVendor(input: CreateVendorInput!): CreateVendorPayload! + updateVendor(input: UpdateVendorInput!): UpdateVendorPayload! + deleteVendor(input: DeleteVendorInput!): DeleteVendorPayload! + + # Framework mutations + createFramework(input: CreateFrameworkInput!): CreateFrameworkPayload! + updateFramework(input: UpdateFrameworkInput!): UpdateFrameworkPayload! + importFramework(input: ImportFrameworkInput!): ImportFrameworkPayload! + deleteFramework(input: DeleteFrameworkInput!): DeleteFrameworkPayload! + + # Mitigation mutations + createMitigation(input: CreateMitigationInput!): CreateMitigationPayload! + updateMitigation(input: UpdateMitigationInput!): UpdateMitigationPayload! + importMitigation(input: ImportMitigationInput!): ImportMitigationPayload! + + # Task mutations createTask(input: CreateTaskInput!): CreateTaskPayload! updateTask(input: UpdateTaskInput!): UpdateTaskPayload! deleteTask(input: DeleteTaskInput!): DeleteTaskPayload! assignTask(input: AssignTaskInput!): AssignTaskPayload! unassignTask(input: UnassignTaskInput!): UnassignTaskPayload! - createFramework(input: CreateFrameworkInput!): CreateFrameworkPayload! - updateFramework(input: UpdateFrameworkInput!): UpdateFrameworkPayload! - importFramework(input: ImportFrameworkInput!): ImportFrameworkPayload! - deleteFramework(input: DeleteFrameworkInput!): DeleteFrameworkPayload! - - createMitigation(input: CreateMitigationInput!): CreateMitigationPayload! - updateMitigation(input: UpdateMitigationInput!): UpdateMitigationPayload! - + # Evidence mutations uploadEvidence(input: UploadEvidenceInput!): UploadEvidencePayload! deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload! + # Policy mutations createPolicy(input: CreatePolicyInput!): CreatePolicyPayload! updatePolicy(input: UpdatePolicyInput!): UpdatePolicyPayload! deletePolicy(input: DeletePolicyInput!): DeletePolicyPayload! +} - confirmEmail(input: ConfirmEmailInput!): ConfirmEmailPayload! - inviteUser(input: InviteUserInput!): InviteUserPayload! - removeUser(input: RemoveUserInput!): RemoveUserPayload! +# Input Types +input CreateOrganizationInput { + name: String! +} + +input UpdateOrganizationInput { + organizationId: ID! + name: String + logo: Upload +} + +input DeleteOrganizationInput { + organizationId: ID! } input CreateVendorInput { @@ -2776,12 +2918,21 @@ input CreateVendorInput { privacyPolicyUrl: String } -input DeleteVendorInput { - vendorId: ID! +input UpdateVendorInput { + id: ID! + name: String + description: String + serviceStartAt: Datetime + serviceTerminationAt: Datetime + serviceCriticality: ServiceCriticality + riskTier: RiskTier + statusPageUrl: String + termsOfServiceUrl: String + privacyPolicyUrl: String } -input DeletePeopleInput { - peopleId: ID! +input DeleteVendorInput { + vendorId: ID! } input CreatePeopleInput { @@ -2800,113 +2951,8 @@ input UpdatePeopleInput { kind: PeopleKind } -enum ServiceCriticality - @goModel(model: "github.com/getprobo/probo/pkg/coredata.ServiceCriticality") { - LOW - @goEnum( - value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityLow" - ) - MEDIUM - @goEnum( - value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityMedium" - ) - HIGH - @goEnum( - value: "github.com/getprobo/probo/pkg/coredata.ServiceCriticalityHigh" - ) -} - -enum RiskTier - @goModel(model: "github.com/getprobo/probo/pkg/coredata.RiskTier") { - CRITICAL - @goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierCritical") - SIGNIFICANT - @goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierSignificant") - GENERAL - @goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskTierGeneral") -} - -input UpdateVendorInput { - id: ID! - name: String - description: String - serviceStartAt: Datetime - serviceTerminationAt: Datetime - serviceCriticality: ServiceCriticality - riskTier: RiskTier - statusPageUrl: String - termsOfServiceUrl: String - privacyPolicyUrl: String -} - -type CreatePeoplePayload { - peopleEdge: PeopleEdge! -} - -type CreateVendorPayload { - vendorEdge: VendorEdge! -} - -type DeleteVendorPayload { - deletedVendorId: ID! -} - -type DeletePeoplePayload { - deletedPeopleId: ID! -} - -input CreateOrganizationInput { - name: String! -} - -input UpdateOrganizationInput { - organizationId: ID! - name: String - logo: Upload -} - -input DeleteOrganizationInput { - organizationId: ID! -} - -type CreateOrganizationPayload { - organizationEdge: OrganizationEdge! -} - -type UpdateOrganizationPayload { - organization: Organization! -} - -type DeleteOrganizationPayload { - deletedOrganizationId: ID! -} - -input CreateTaskInput { - mitigationId: ID! - name: String! - description: String! - timeEstimate: Duration - assignedToId: ID -} - -type CreateTaskPayload { - taskEdge: TaskEdge! -} - -input DeleteTaskInput { - taskId: ID! -} - -type DeleteTaskPayload { - deletedTaskId: ID! -} - -input DeleteFrameworkInput { - frameworkId: ID! -} - -type DeleteFrameworkPayload { - deletedFrameworkId: ID! +input DeletePeopleInput { + peopleId: ID! } input CreateFrameworkInput { @@ -2921,8 +2967,13 @@ input UpdateFrameworkInput { description: String } -type CreateFrameworkPayload { - frameworkEdge: FrameworkEdge! +input ImportFrameworkInput { + organizationId: ID! + file: Upload! +} + +input DeleteFrameworkInput { + frameworkId: ID! } input CreateMitigationInput { @@ -2933,22 +2984,6 @@ input CreateMitigationInput { importance: MitigationImportance! } -type CreateMitigationPayload { - mitigationEdge: MitigationEdge! -} - -type UpdateFrameworkPayload { - framework: Framework! -} - -type UpdateVendorPayload { - vendor: Vendor! -} - -type UpdatePeoplePayload { - people: People! -} - input UpdateMitigationInput { id: ID! name: String @@ -2958,8 +2993,38 @@ input UpdateMitigationInput { importance: MitigationImportance } -type UpdateMitigationPayload { - mitigation: Mitigation! +input ImportMitigationInput { + organizationId: ID! + file: Upload! +} + +input CreateTaskInput { + mitigationId: ID! + name: String! + description: String! + timeEstimate: Duration + assignedToId: ID +} + +input UpdateTaskInput { + taskId: ID! + name: String + description: String + state: TaskState + timeEstimate: Duration +} + +input DeleteTaskInput { + taskId: ID! +} + +input AssignTaskInput { + taskId: ID! + assignedToId: ID! +} + +input UnassignTaskInput { + taskId: ID! } input UploadEvidenceInput { @@ -2971,26 +3036,10 @@ input UploadEvidenceInput { description: String! } -type UploadEvidencePayload { - evidenceEdge: EvidenceEdge! -} - input DeleteEvidenceInput { evidenceId: ID! } -type DeleteEvidencePayload { - deletedEvidenceId: ID! -} - -enum PolicyStatus - @goModel(model: "github.com/getprobo/probo/pkg/coredata.PolicyStatus") { - DRAFT - @goEnum(value: "github.com/getprobo/probo/pkg/coredata.PolicyStatusDraft") - ACTIVE - @goEnum(value: "github.com/getprobo/probo/pkg/coredata.PolicyStatusActive") -} - input CreatePolicyInput { organizationId: ID! name: String! @@ -3013,6 +3062,114 @@ input DeletePolicyInput { policyId: ID! } +input ConfirmEmailInput { + token: String! +} + +input InviteUserInput { + organizationId: ID! + email: String! + fullName: String! +} + +input RemoveUserInput { + organizationId: ID! + userId: ID! +} + +# Payload Types +type CreateOrganizationPayload { + organizationEdge: OrganizationEdge! +} + +type UpdateOrganizationPayload { + organization: Organization! +} + +type DeleteOrganizationPayload { + deletedOrganizationId: ID! +} + +type CreateVendorPayload { + vendorEdge: VendorEdge! +} + +type UpdateVendorPayload { + vendor: Vendor! +} + +type DeleteVendorPayload { + deletedVendorId: ID! +} + +type CreatePeoplePayload { + peopleEdge: PeopleEdge! +} + +type UpdatePeoplePayload { + people: People! +} + +type DeletePeoplePayload { + deletedPeopleId: ID! +} + +type CreateFrameworkPayload { + frameworkEdge: FrameworkEdge! +} + +type UpdateFrameworkPayload { + framework: Framework! +} + +type ImportFrameworkPayload { + frameworkEdge: FrameworkEdge! +} + +type DeleteFrameworkPayload { + deletedFrameworkId: ID! +} + +type CreateMitigationPayload { + mitigationEdge: MitigationEdge! +} + +type UpdateMitigationPayload { + mitigation: Mitigation! +} + +type ImportMitigationPayload { + mitigationEdges: [MitigationEdge!]! +} + +type CreateTaskPayload { + taskEdge: TaskEdge! +} + +type UpdateTaskPayload { + task: Task! +} + +type DeleteTaskPayload { + deletedTaskId: ID! +} + +type AssignTaskPayload { + task: Task! +} + +type UnassignTaskPayload { + task: Task! +} + +type UploadEvidencePayload { + evidenceEdge: EvidenceEdge! +} + +type DeleteEvidencePayload { + deletedEvidenceId: ID! +} + type CreatePolicyPayload { policyEdge: PolicyEdge! } @@ -3025,118 +3182,17 @@ type DeletePolicyPayload { deletedPolicyId: ID! } -type Policy implements Node { - id: ID! - name: String! - status: PolicyStatus! - content: String! - reviewDate: Datetime - owner: People! @goField(forceResolver: true) - createdAt: Datetime! - updatedAt: Datetime! -} - -type PolicyConnection { - edges: [PolicyEdge!]! - pageInfo: PageInfo! -} - -type PolicyEdge { - cursor: CursorKey! - node: Policy! -} - -input UpdateTaskInput { - taskId: ID! - name: String - description: String - state: TaskState - timeEstimate: Duration -} - -type UpdateTaskPayload { - task: Task! -} - -input ConfirmEmailInput { - token: String! -} - type ConfirmEmailPayload { success: Boolean! } -input ImportFrameworkInput { - organizationId: ID! - file: Upload! -} - -type ImportFrameworkPayload { - frameworkEdge: FrameworkEdge! -} - -input AssignTaskInput { - taskId: ID! - assignedToId: ID! -} - -type AssignTaskPayload { - task: Task! -} - -input UnassignTaskInput { - taskId: ID! -} - -type UnassignTaskPayload { - task: Task! -} - -input InviteUserInput { - organizationId: ID! - email: String! - fullName: String! -} - type InviteUserPayload { success: Boolean! } -input RemoveUserInput { - organizationId: ID! - userId: ID! -} - type RemoveUserPayload { success: Boolean! } - -enum OrganizationOrderField { - NAME - CREATED_AT - UPDATED_AT -} - -input OrganizationOrder { - direction: OrderDirection! - field: OrganizationOrderField! -} - -enum UserOrderField - @goModel(model: "github.com/getprobo/probo/pkg/coredata.UserOrderField") { - CREATED_AT - @goEnum( - value: "github.com/getprobo/probo/pkg/coredata.UserOrderFieldCreatedAt" - ) -} - -input UserOrder - @goModel( - model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.UserOrderBy" - ) { - direction: OrderDirection! - field: UserOrderField! -} `, BuiltIn: false}, } var parsedSchema = gqlparser.MustLoadSchema(sources...) @@ -3726,6 +3782,29 @@ func (ec *executionContext) field_Mutation_importFramework_argsInput( return zeroVal, nil } +func (ec *executionContext) field_Mutation_importMitigation_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { + var err error + args := map[string]any{} + arg0, err := ec.field_Mutation_importMitigation_argsInput(ctx, rawArgs) + if err != nil { + return nil, err + } + args["input"] = arg0 + return args, nil +} +func (ec *executionContext) field_Mutation_importMitigation_argsInput( + ctx context.Context, + rawArgs map[string]any, +) (types.ImportMitigationInput, error) { + ctx = graphql.WithPathContext(ctx, graphql.NewPathWithField("input")) + if tmp, ok := rawArgs["input"]; ok { + return ec.unmarshalNImportMitigationInput2githubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐImportMitigationInput(ctx, tmp) + } + + var zeroVal types.ImportMitigationInput + return zeroVal, nil +} + func (ec *executionContext) field_Mutation_inviteUser_args(ctx context.Context, rawArgs map[string]any) (map[string]any, error) { var err error args := map[string]any{} @@ -7352,6 +7431,56 @@ func (ec *executionContext) fieldContext_ImportFrameworkPayload_frameworkEdge(_ return fc, nil } +func (ec *executionContext) _ImportMitigationPayload_mitigationEdges(ctx context.Context, field graphql.CollectedField, obj *types.ImportMitigationPayload) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_ImportMitigationPayload_mitigationEdges(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return obj.MitigationEdges, nil + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.([]*types.MitigationEdge) + fc.Result = res + return ec.marshalNMitigationEdge2ᚕᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐMitigationEdgeᚄ(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_ImportMitigationPayload_mitigationEdges(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "ImportMitigationPayload", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "cursor": + return ec.fieldContext_MitigationEdge_cursor(ctx, field) + case "node": + return ec.fieldContext_MitigationEdge_node(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type MitigationEdge", field.Name) + }, + } + return fc, nil +} + func (ec *executionContext) _InviteUserPayload_success(ctx context.Context, field graphql.CollectedField, obj *types.InviteUserPayload) (ret graphql.Marshaler) { fc, err := ec.fieldContext_InviteUserPayload_success(ctx, field) if err != nil { @@ -8021,8 +8150,8 @@ func (ec *executionContext) fieldContext_MitigationEdge_node(_ context.Context, return fc, nil } -func (ec *executionContext) _Mutation_createVendor(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_createVendor(ctx, field) +func (ec *executionContext) _Mutation_createOrganization(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_createOrganization(ctx, field) if err != nil { return graphql.Null } @@ -8035,7 +8164,7 @@ func (ec *executionContext) _Mutation_createVendor(ctx context.Context, field gr }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().CreateVendor(rctx, fc.Args["input"].(types.CreateVendorInput)) + return ec.resolvers.Mutation().CreateOrganization(rctx, fc.Args["input"].(types.CreateOrganizationInput)) }) if err != nil { ec.Error(ctx, err) @@ -8047,12 +8176,12 @@ func (ec *executionContext) _Mutation_createVendor(ctx context.Context, field gr } return graphql.Null } - res := resTmp.(*types.CreateVendorPayload) + res := resTmp.(*types.CreateOrganizationPayload) fc.Result = res - return ec.marshalNCreateVendorPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐCreateVendorPayload(ctx, field.Selections, res) + return ec.marshalNCreateOrganizationPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐCreateOrganizationPayload(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_createVendor(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_createOrganization(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -8060,10 +8189,10 @@ func (ec *executionContext) fieldContext_Mutation_createVendor(ctx context.Conte IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "vendorEdge": - return ec.fieldContext_CreateVendorPayload_vendorEdge(ctx, field) + case "organizationEdge": + return ec.fieldContext_CreateOrganizationPayload_organizationEdge(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type CreateVendorPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type CreateOrganizationPayload", field.Name) }, } defer func() { @@ -8073,15 +8202,15 @@ func (ec *executionContext) fieldContext_Mutation_createVendor(ctx context.Conte } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_createVendor_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_createOrganization_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } return fc, nil } -func (ec *executionContext) _Mutation_updateVendor(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_updateVendor(ctx, field) +func (ec *executionContext) _Mutation_updateOrganization(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_updateOrganization(ctx, field) if err != nil { return graphql.Null } @@ -8094,7 +8223,7 @@ func (ec *executionContext) _Mutation_updateVendor(ctx context.Context, field gr }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().UpdateVendor(rctx, fc.Args["input"].(types.UpdateVendorInput)) + return ec.resolvers.Mutation().UpdateOrganization(rctx, fc.Args["input"].(types.UpdateOrganizationInput)) }) if err != nil { ec.Error(ctx, err) @@ -8106,12 +8235,12 @@ func (ec *executionContext) _Mutation_updateVendor(ctx context.Context, field gr } return graphql.Null } - res := resTmp.(*types.UpdateVendorPayload) + res := resTmp.(*types.UpdateOrganizationPayload) fc.Result = res - return ec.marshalNUpdateVendorPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐUpdateVendorPayload(ctx, field.Selections, res) + return ec.marshalNUpdateOrganizationPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐUpdateOrganizationPayload(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_updateVendor(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_updateOrganization(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -8119,10 +8248,10 @@ func (ec *executionContext) fieldContext_Mutation_updateVendor(ctx context.Conte IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "vendor": - return ec.fieldContext_UpdateVendorPayload_vendor(ctx, field) + case "organization": + return ec.fieldContext_UpdateOrganizationPayload_organization(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type UpdateVendorPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type UpdateOrganizationPayload", field.Name) }, } defer func() { @@ -8132,15 +8261,15 @@ func (ec *executionContext) fieldContext_Mutation_updateVendor(ctx context.Conte } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_updateVendor_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_updateOrganization_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } return fc, nil } -func (ec *executionContext) _Mutation_deleteVendor(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_deleteVendor(ctx, field) +func (ec *executionContext) _Mutation_deleteOrganization(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_deleteOrganization(ctx, field) if err != nil { return graphql.Null } @@ -8153,7 +8282,7 @@ func (ec *executionContext) _Mutation_deleteVendor(ctx context.Context, field gr }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().DeleteVendor(rctx, fc.Args["input"].(types.DeleteVendorInput)) + return ec.resolvers.Mutation().DeleteOrganization(rctx, fc.Args["input"].(types.DeleteOrganizationInput)) }) if err != nil { ec.Error(ctx, err) @@ -8165,12 +8294,12 @@ func (ec *executionContext) _Mutation_deleteVendor(ctx context.Context, field gr } return graphql.Null } - res := resTmp.(*types.DeleteVendorPayload) + res := resTmp.(*types.DeleteOrganizationPayload) fc.Result = res - return ec.marshalNDeleteVendorPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDeleteVendorPayload(ctx, field.Selections, res) + return ec.marshalNDeleteOrganizationPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDeleteOrganizationPayload(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_deleteVendor(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_deleteOrganization(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -8178,10 +8307,10 @@ func (ec *executionContext) fieldContext_Mutation_deleteVendor(ctx context.Conte IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "deletedVendorId": - return ec.fieldContext_DeleteVendorPayload_deletedVendorId(ctx, field) + case "deletedOrganizationId": + return ec.fieldContext_DeleteOrganizationPayload_deletedOrganizationId(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type DeleteVendorPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type DeleteOrganizationPayload", field.Name) }, } defer func() { @@ -8191,7 +8320,184 @@ func (ec *executionContext) fieldContext_Mutation_deleteVendor(ctx context.Conte } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_deleteVendor_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_deleteOrganization_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_confirmEmail(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_confirmEmail(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().ConfirmEmail(rctx, fc.Args["input"].(types.ConfirmEmailInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.ConfirmEmailPayload) + fc.Result = res + return ec.marshalNConfirmEmailPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐConfirmEmailPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_confirmEmail(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "success": + return ec.fieldContext_ConfirmEmailPayload_success(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ConfirmEmailPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_confirmEmail_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_inviteUser(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_inviteUser(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().InviteUser(rctx, fc.Args["input"].(types.InviteUserInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.InviteUserPayload) + fc.Result = res + return ec.marshalNInviteUserPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐInviteUserPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_inviteUser(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "success": + return ec.fieldContext_InviteUserPayload_success(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type InviteUserPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_inviteUser_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_removeUser(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_removeUser(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().RemoveUser(rctx, fc.Args["input"].(types.RemoveUserInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.RemoveUserPayload) + fc.Result = res + return ec.marshalNRemoveUserPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐRemoveUserPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_removeUser(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "success": + return ec.fieldContext_RemoveUserPayload_success(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type RemoveUserPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_removeUser_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } @@ -8375,8 +8681,8 @@ func (ec *executionContext) fieldContext_Mutation_deletePeople(ctx context.Conte return fc, nil } -func (ec *executionContext) _Mutation_createOrganization(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_createOrganization(ctx, field) +func (ec *executionContext) _Mutation_createVendor(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_createVendor(ctx, field) if err != nil { return graphql.Null } @@ -8389,7 +8695,7 @@ func (ec *executionContext) _Mutation_createOrganization(ctx context.Context, fi }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().CreateOrganization(rctx, fc.Args["input"].(types.CreateOrganizationInput)) + return ec.resolvers.Mutation().CreateVendor(rctx, fc.Args["input"].(types.CreateVendorInput)) }) if err != nil { ec.Error(ctx, err) @@ -8401,12 +8707,12 @@ func (ec *executionContext) _Mutation_createOrganization(ctx context.Context, fi } return graphql.Null } - res := resTmp.(*types.CreateOrganizationPayload) + res := resTmp.(*types.CreateVendorPayload) fc.Result = res - return ec.marshalNCreateOrganizationPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐCreateOrganizationPayload(ctx, field.Selections, res) + return ec.marshalNCreateVendorPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐCreateVendorPayload(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_createOrganization(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_createVendor(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -8414,10 +8720,10 @@ func (ec *executionContext) fieldContext_Mutation_createOrganization(ctx context IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "organizationEdge": - return ec.fieldContext_CreateOrganizationPayload_organizationEdge(ctx, field) + case "vendorEdge": + return ec.fieldContext_CreateVendorPayload_vendorEdge(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type CreateOrganizationPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type CreateVendorPayload", field.Name) }, } defer func() { @@ -8427,15 +8733,15 @@ func (ec *executionContext) fieldContext_Mutation_createOrganization(ctx context } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_createOrganization_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_createVendor_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } return fc, nil } -func (ec *executionContext) _Mutation_updateOrganization(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_updateOrganization(ctx, field) +func (ec *executionContext) _Mutation_updateVendor(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_updateVendor(ctx, field) if err != nil { return graphql.Null } @@ -8448,7 +8754,7 @@ func (ec *executionContext) _Mutation_updateOrganization(ctx context.Context, fi }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().UpdateOrganization(rctx, fc.Args["input"].(types.UpdateOrganizationInput)) + return ec.resolvers.Mutation().UpdateVendor(rctx, fc.Args["input"].(types.UpdateVendorInput)) }) if err != nil { ec.Error(ctx, err) @@ -8460,12 +8766,12 @@ func (ec *executionContext) _Mutation_updateOrganization(ctx context.Context, fi } return graphql.Null } - res := resTmp.(*types.UpdateOrganizationPayload) + res := resTmp.(*types.UpdateVendorPayload) fc.Result = res - return ec.marshalNUpdateOrganizationPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐUpdateOrganizationPayload(ctx, field.Selections, res) + return ec.marshalNUpdateVendorPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐUpdateVendorPayload(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_updateOrganization(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_updateVendor(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -8473,10 +8779,10 @@ func (ec *executionContext) fieldContext_Mutation_updateOrganization(ctx context IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "organization": - return ec.fieldContext_UpdateOrganizationPayload_organization(ctx, field) + case "vendor": + return ec.fieldContext_UpdateVendorPayload_vendor(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type UpdateOrganizationPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type UpdateVendorPayload", field.Name) }, } defer func() { @@ -8486,15 +8792,15 @@ func (ec *executionContext) fieldContext_Mutation_updateOrganization(ctx context } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_updateOrganization_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_updateVendor_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } return fc, nil } -func (ec *executionContext) _Mutation_deleteOrganization(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_deleteOrganization(ctx, field) +func (ec *executionContext) _Mutation_deleteVendor(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_deleteVendor(ctx, field) if err != nil { return graphql.Null } @@ -8507,7 +8813,7 @@ func (ec *executionContext) _Mutation_deleteOrganization(ctx context.Context, fi }() resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().DeleteOrganization(rctx, fc.Args["input"].(types.DeleteOrganizationInput)) + return ec.resolvers.Mutation().DeleteVendor(rctx, fc.Args["input"].(types.DeleteVendorInput)) }) if err != nil { ec.Error(ctx, err) @@ -8519,12 +8825,12 @@ func (ec *executionContext) _Mutation_deleteOrganization(ctx context.Context, fi } return graphql.Null } - res := resTmp.(*types.DeleteOrganizationPayload) + res := resTmp.(*types.DeleteVendorPayload) fc.Result = res - return ec.marshalNDeleteOrganizationPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDeleteOrganizationPayload(ctx, field.Selections, res) + return ec.marshalNDeleteVendorPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDeleteVendorPayload(ctx, field.Selections, res) } -func (ec *executionContext) fieldContext_Mutation_deleteOrganization(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Mutation_deleteVendor(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Mutation", Field: field, @@ -8532,10 +8838,10 @@ func (ec *executionContext) fieldContext_Mutation_deleteOrganization(ctx context IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "deletedOrganizationId": - return ec.fieldContext_DeleteOrganizationPayload_deletedOrganizationId(ctx, field) + case "deletedVendorId": + return ec.fieldContext_DeleteVendorPayload_deletedVendorId(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type DeleteOrganizationPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type DeleteVendorPayload", field.Name) }, } defer func() { @@ -8545,302 +8851,7 @@ func (ec *executionContext) fieldContext_Mutation_deleteOrganization(ctx context } }() ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_deleteOrganization_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } - return fc, nil -} - -func (ec *executionContext) _Mutation_createTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_createTask(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().CreateTask(rctx, fc.Args["input"].(types.CreateTaskInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*types.CreateTaskPayload) - fc.Result = res - return ec.marshalNCreateTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐCreateTaskPayload(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_Mutation_createTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Mutation", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "taskEdge": - return ec.fieldContext_CreateTaskPayload_taskEdge(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type CreateTaskPayload", field.Name) - }, - } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_createTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } - return fc, nil -} - -func (ec *executionContext) _Mutation_updateTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_updateTask(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().UpdateTask(rctx, fc.Args["input"].(types.UpdateTaskInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*types.UpdateTaskPayload) - fc.Result = res - return ec.marshalNUpdateTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐUpdateTaskPayload(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_Mutation_updateTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Mutation", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "task": - return ec.fieldContext_UpdateTaskPayload_task(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type UpdateTaskPayload", field.Name) - }, - } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_updateTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } - return fc, nil -} - -func (ec *executionContext) _Mutation_deleteTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_deleteTask(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().DeleteTask(rctx, fc.Args["input"].(types.DeleteTaskInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*types.DeleteTaskPayload) - fc.Result = res - return ec.marshalNDeleteTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDeleteTaskPayload(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_Mutation_deleteTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Mutation", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "deletedTaskId": - return ec.fieldContext_DeleteTaskPayload_deletedTaskId(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type DeleteTaskPayload", field.Name) - }, - } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_deleteTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } - return fc, nil -} - -func (ec *executionContext) _Mutation_assignTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_assignTask(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().AssignTask(rctx, fc.Args["input"].(types.AssignTaskInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*types.AssignTaskPayload) - fc.Result = res - return ec.marshalNAssignTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐAssignTaskPayload(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_Mutation_assignTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Mutation", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "task": - return ec.fieldContext_AssignTaskPayload_task(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type AssignTaskPayload", field.Name) - }, - } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_assignTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } - return fc, nil -} - -func (ec *executionContext) _Mutation_unassignTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_unassignTask(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().UnassignTask(rctx, fc.Args["input"].(types.UnassignTaskInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*types.UnassignTaskPayload) - fc.Result = res - return ec.marshalNUnassignTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐUnassignTaskPayload(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_Mutation_unassignTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Mutation", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "task": - return ec.fieldContext_UnassignTaskPayload_task(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type UnassignTaskPayload", field.Name) - }, - } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_unassignTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + if fc.Args, err = ec.field_Mutation_deleteVendor_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { ec.Error(ctx, err) return fc, err } @@ -9201,6 +9212,360 @@ func (ec *executionContext) fieldContext_Mutation_updateMitigation(ctx context.C return fc, nil } +func (ec *executionContext) _Mutation_importMitigation(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_importMitigation(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().ImportMitigation(rctx, fc.Args["input"].(types.ImportMitigationInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.ImportMitigationPayload) + fc.Result = res + return ec.marshalNImportMitigationPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐImportMitigationPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_importMitigation(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "mitigationEdges": + return ec.fieldContext_ImportMitigationPayload_mitigationEdges(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type ImportMitigationPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_importMitigation_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_createTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_createTask(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().CreateTask(rctx, fc.Args["input"].(types.CreateTaskInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.CreateTaskPayload) + fc.Result = res + return ec.marshalNCreateTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐCreateTaskPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_createTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "taskEdge": + return ec.fieldContext_CreateTaskPayload_taskEdge(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type CreateTaskPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_createTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_updateTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_updateTask(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().UpdateTask(rctx, fc.Args["input"].(types.UpdateTaskInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.UpdateTaskPayload) + fc.Result = res + return ec.marshalNUpdateTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐUpdateTaskPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_updateTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "task": + return ec.fieldContext_UpdateTaskPayload_task(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type UpdateTaskPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_updateTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_deleteTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_deleteTask(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().DeleteTask(rctx, fc.Args["input"].(types.DeleteTaskInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.DeleteTaskPayload) + fc.Result = res + return ec.marshalNDeleteTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐDeleteTaskPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_deleteTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "deletedTaskId": + return ec.fieldContext_DeleteTaskPayload_deletedTaskId(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type DeleteTaskPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_deleteTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_assignTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_assignTask(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().AssignTask(rctx, fc.Args["input"].(types.AssignTaskInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.AssignTaskPayload) + fc.Result = res + return ec.marshalNAssignTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐAssignTaskPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_assignTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "task": + return ec.fieldContext_AssignTaskPayload_task(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type AssignTaskPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_assignTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + +func (ec *executionContext) _Mutation_unassignTask(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { + fc, err := ec.fieldContext_Mutation_unassignTask(ctx, field) + if err != nil { + return graphql.Null + } + ctx = graphql.WithFieldContext(ctx, fc) + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + ret = graphql.Null + } + }() + resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { + ctx = rctx // use context from middleware stack in children + return ec.resolvers.Mutation().UnassignTask(rctx, fc.Args["input"].(types.UnassignTaskInput)) + }) + if err != nil { + ec.Error(ctx, err) + return graphql.Null + } + if resTmp == nil { + if !graphql.HasFieldError(ctx, fc) { + ec.Errorf(ctx, "must not be null") + } + return graphql.Null + } + res := resTmp.(*types.UnassignTaskPayload) + fc.Result = res + return ec.marshalNUnassignTaskPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐUnassignTaskPayload(ctx, field.Selections, res) +} + +func (ec *executionContext) fieldContext_Mutation_unassignTask(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "Mutation", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "task": + return ec.fieldContext_UnassignTaskPayload_task(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type UnassignTaskPayload", field.Name) + }, + } + defer func() { + if r := recover(); r != nil { + err = ec.Recover(ctx, r) + ec.Error(ctx, err) + } + }() + ctx = graphql.WithFieldContext(ctx, fc) + if fc.Args, err = ec.field_Mutation_unassignTask_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { + ec.Error(ctx, err) + return fc, err + } + return fc, nil +} + func (ec *executionContext) _Mutation_uploadEvidence(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { fc, err := ec.fieldContext_Mutation_uploadEvidence(ctx, field) if err != nil { @@ -9496,183 +9861,6 @@ func (ec *executionContext) fieldContext_Mutation_deletePolicy(ctx context.Conte return fc, nil } -func (ec *executionContext) _Mutation_confirmEmail(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_confirmEmail(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().ConfirmEmail(rctx, fc.Args["input"].(types.ConfirmEmailInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*types.ConfirmEmailPayload) - fc.Result = res - return ec.marshalNConfirmEmailPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐConfirmEmailPayload(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_Mutation_confirmEmail(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Mutation", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "success": - return ec.fieldContext_ConfirmEmailPayload_success(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type ConfirmEmailPayload", field.Name) - }, - } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_confirmEmail_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } - return fc, nil -} - -func (ec *executionContext) _Mutation_inviteUser(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_inviteUser(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().InviteUser(rctx, fc.Args["input"].(types.InviteUserInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*types.InviteUserPayload) - fc.Result = res - return ec.marshalNInviteUserPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐInviteUserPayload(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_Mutation_inviteUser(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Mutation", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "success": - return ec.fieldContext_InviteUserPayload_success(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type InviteUserPayload", field.Name) - }, - } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_inviteUser_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } - return fc, nil -} - -func (ec *executionContext) _Mutation_removeUser(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - fc, err := ec.fieldContext_Mutation_removeUser(ctx, field) - if err != nil { - return graphql.Null - } - ctx = graphql.WithFieldContext(ctx, fc) - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (any, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Mutation().RemoveUser(rctx, fc.Args["input"].(types.RemoveUserInput)) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*types.RemoveUserPayload) - fc.Result = res - return ec.marshalNRemoveUserPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐRemoveUserPayload(ctx, field.Selections, res) -} - -func (ec *executionContext) fieldContext_Mutation_removeUser(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { - fc = &graphql.FieldContext{ - Object: "Mutation", - Field: field, - IsMethod: true, - IsResolver: true, - Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - switch field.Name { - case "success": - return ec.fieldContext_RemoveUserPayload_success(ctx, field) - } - return nil, fmt.Errorf("no field named %q was found under type RemoveUserPayload", field.Name) - }, - } - defer func() { - if r := recover(); r != nil { - err = ec.Recover(ctx, r) - ec.Error(ctx, err) - } - }() - ctx = graphql.WithFieldContext(ctx, fc) - if fc.Args, err = ec.field_Mutation_removeUser_args(ctx, field.ArgumentMap(ec.Variables)); err != nil { - ec.Error(ctx, err) - return fc, err - } - return fc, nil -} - func (ec *executionContext) _Organization_id(ctx context.Context, field graphql.CollectedField, obj *types.Organization) (ret graphql.Marshaler) { fc, err := ec.fieldContext_Organization_id(ctx, field) if err != nil { @@ -17339,6 +17527,40 @@ func (ec *executionContext) unmarshalInputImportFrameworkInput(ctx context.Conte return it, nil } +func (ec *executionContext) unmarshalInputImportMitigationInput(ctx context.Context, obj any) (types.ImportMitigationInput, error) { + var it types.ImportMitigationInput + asMap := map[string]any{} + for k, v := range obj.(map[string]any) { + asMap[k] = v + } + + fieldsInOrder := [...]string{"organizationId", "file"} + for _, k := range fieldsInOrder { + v, ok := asMap[k] + if !ok { + continue + } + switch k { + case "organizationId": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("organizationId")) + data, err := ec.unmarshalNID2githubᚗcomᚋgetproboᚋproboᚋpkgᚋgidᚐGID(ctx, v) + if err != nil { + return it, err + } + it.OrganizationID = data + case "file": + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("file")) + data, err := ec.unmarshalNUpload2githubᚗcomᚋ99designsᚋgqlgenᚋgraphqlᚐUpload(ctx, v) + if err != nil { + return it, err + } + it.File = data + } + } + + return it, nil +} + func (ec *executionContext) unmarshalInputInviteUserInput(ctx context.Context, obj any) (types.InviteUserInput, error) { var it types.InviteUserInput asMap := map[string]any{} @@ -18162,6 +18384,13 @@ func (ec *executionContext) _Node(ctx context.Context, sel ast.SelectionSet, obj return graphql.Null } return ec._Organization(ctx, sel, obj) + case types.User: + return ec._User(ctx, sel, &obj) + case *types.User: + if obj == nil { + return graphql.Null + } + return ec._User(ctx, sel, obj) case types.People: return ec._People(ctx, sel, &obj) case *types.People: @@ -18211,13 +18440,6 @@ func (ec *executionContext) _Node(ctx context.Context, sel ast.SelectionSet, obj return graphql.Null } return ec._Evidence(ctx, sel, obj) - case types.User: - return ec._User(ctx, sel, &obj) - case *types.User: - if obj == nil { - return graphql.Null - } - return ec._User(ctx, sel, obj) case types.Policy: return ec._Policy(ctx, sel, &obj) case *types.Policy: @@ -19434,6 +19656,45 @@ func (ec *executionContext) _ImportFrameworkPayload(ctx context.Context, sel ast return out } +var importMitigationPayloadImplementors = []string{"ImportMitigationPayload"} + +func (ec *executionContext) _ImportMitigationPayload(ctx context.Context, sel ast.SelectionSet, obj *types.ImportMitigationPayload) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, importMitigationPayloadImplementors) + + out := graphql.NewFieldSet(fields) + deferred := make(map[string]*graphql.FieldSet) + for i, field := range fields { + switch field.Name { + case "__typename": + out.Values[i] = graphql.MarshalString("ImportMitigationPayload") + case "mitigationEdges": + out.Values[i] = ec._ImportMitigationPayload_mitigationEdges(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + default: + panic("unknown field " + strconv.Quote(field.Name)) + } + } + out.Dispatch(ctx) + if out.Invalids > 0 { + return graphql.Null + } + + atomic.AddInt32(&ec.deferred, int32(len(deferred))) + + for label, dfs := range deferred { + ec.processDeferredGroup(graphql.DeferredGroup{ + Label: label, + Path: graphql.GetPath(ctx), + FieldSet: dfs, + Context: ctx, + }) + } + + return out +} + var inviteUserPayloadImplementors = []string{"InviteUserPayload"} func (ec *executionContext) _InviteUserPayload(ctx context.Context, sel ast.SelectionSet, obj *types.InviteUserPayload) graphql.Marshaler { @@ -19690,23 +19951,44 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) switch field.Name { case "__typename": out.Values[i] = graphql.MarshalString("Mutation") - case "createVendor": + case "createOrganization": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_createVendor(ctx, field) + return ec._Mutation_createOrganization(ctx, field) }) if out.Values[i] == graphql.Null { out.Invalids++ } - case "updateVendor": + case "updateOrganization": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_updateVendor(ctx, field) + return ec._Mutation_updateOrganization(ctx, field) }) if out.Values[i] == graphql.Null { out.Invalids++ } - case "deleteVendor": + case "deleteOrganization": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_deleteVendor(ctx, field) + return ec._Mutation_deleteOrganization(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "confirmEmail": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_confirmEmail(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "inviteUser": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_inviteUser(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "removeUser": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_removeUser(ctx, field) }) if out.Values[i] == graphql.Null { out.Invalids++ @@ -19732,58 +20014,23 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) if out.Values[i] == graphql.Null { out.Invalids++ } - case "createOrganization": + case "createVendor": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_createOrganization(ctx, field) + return ec._Mutation_createVendor(ctx, field) }) if out.Values[i] == graphql.Null { out.Invalids++ } - case "updateOrganization": + case "updateVendor": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_updateOrganization(ctx, field) + return ec._Mutation_updateVendor(ctx, field) }) if out.Values[i] == graphql.Null { out.Invalids++ } - case "deleteOrganization": + case "deleteVendor": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_deleteOrganization(ctx, field) - }) - if out.Values[i] == graphql.Null { - out.Invalids++ - } - case "createTask": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_createTask(ctx, field) - }) - if out.Values[i] == graphql.Null { - out.Invalids++ - } - case "updateTask": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_updateTask(ctx, field) - }) - if out.Values[i] == graphql.Null { - out.Invalids++ - } - case "deleteTask": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_deleteTask(ctx, field) - }) - if out.Values[i] == graphql.Null { - out.Invalids++ - } - case "assignTask": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_assignTask(ctx, field) - }) - if out.Values[i] == graphql.Null { - out.Invalids++ - } - case "unassignTask": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_unassignTask(ctx, field) + return ec._Mutation_deleteVendor(ctx, field) }) if out.Values[i] == graphql.Null { out.Invalids++ @@ -19830,6 +20077,48 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) if out.Values[i] == graphql.Null { out.Invalids++ } + case "importMitigation": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_importMitigation(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "createTask": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_createTask(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "updateTask": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_updateTask(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "deleteTask": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_deleteTask(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "assignTask": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_assignTask(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "unassignTask": + out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { + return ec._Mutation_unassignTask(ctx, field) + }) + if out.Values[i] == graphql.Null { + out.Invalids++ + } case "uploadEvidence": out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { return ec._Mutation_uploadEvidence(ctx, field) @@ -19865,27 +20154,6 @@ func (ec *executionContext) _Mutation(ctx context.Context, sel ast.SelectionSet) if out.Values[i] == graphql.Null { out.Invalids++ } - case "confirmEmail": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_confirmEmail(ctx, field) - }) - if out.Values[i] == graphql.Null { - out.Invalids++ - } - case "inviteUser": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_inviteUser(ctx, field) - }) - if out.Values[i] == graphql.Null { - out.Invalids++ - } - case "removeUser": - out.Values[i] = ec.OperationContext.RootResolverMiddleware(innerCtx, func(ctx context.Context) (res graphql.Marshaler) { - return ec._Mutation_removeUser(ctx, field) - }) - if out.Values[i] == graphql.Null { - out.Invalids++ - } default: panic("unknown field " + strconv.Quote(field.Name)) } @@ -22917,6 +23185,25 @@ func (ec *executionContext) marshalNImportFrameworkPayload2ᚖgithubᚗcomᚋget return ec._ImportFrameworkPayload(ctx, sel, v) } +func (ec *executionContext) unmarshalNImportMitigationInput2githubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐImportMitigationInput(ctx context.Context, v any) (types.ImportMitigationInput, error) { + res, err := ec.unmarshalInputImportMitigationInput(ctx, v) + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalNImportMitigationPayload2githubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐImportMitigationPayload(ctx context.Context, sel ast.SelectionSet, v types.ImportMitigationPayload) graphql.Marshaler { + return ec._ImportMitigationPayload(ctx, sel, &v) +} + +func (ec *executionContext) marshalNImportMitigationPayload2ᚖgithubᚗcomᚋgetproboᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐImportMitigationPayload(ctx context.Context, sel ast.SelectionSet, v *types.ImportMitigationPayload) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec._ImportMitigationPayload(ctx, sel, v) +} + func (ec *executionContext) unmarshalNInt2int(ctx context.Context, v any) (int, error) { res, err := graphql.UnmarshalInt(v) return res, graphql.ErrorOnPath(ctx, err) diff --git a/pkg/server/api/console/v1/types/types.go b/pkg/server/api/console/v1/types/types.go index 052522ec5..e663e54ee 100644 --- a/pkg/server/api/console/v1/types/types.go +++ b/pkg/server/api/console/v1/types/types.go @@ -256,6 +256,15 @@ type ImportFrameworkPayload struct { FrameworkEdge *FrameworkEdge `json:"frameworkEdge"` } +type ImportMitigationInput struct { + OrganizationID gid.GID `json:"organizationId"` + File graphql.Upload `json:"file"` +} + +type ImportMitigationPayload struct { + MitigationEdges []*MitigationEdge `json:"mitigationEdges"` +} + type InviteUserInput struct { OrganizationID gid.GID `json:"organizationId"` Email string `json:"email"` diff --git a/pkg/server/api/console/v1/v1_resolver.go b/pkg/server/api/console/v1/v1_resolver.go index 62517d126..48ab02c81 100644 --- a/pkg/server/api/console/v1/v1_resolver.go +++ b/pkg/server/api/console/v1/v1_resolver.go @@ -86,6 +86,170 @@ func (r *mitigationResolver) Tasks(ctx context.Context, obj *types.Mitigation, f return types.NewTaskConnection(page), nil } +// CreateOrganization is the resolver for the createOrganization field. +func (r *mutationResolver) CreateOrganization(ctx context.Context, input types.CreateOrganizationInput) (*types.CreateOrganizationPayload, error) { + svc := r.proboSvc.WithTenant(gid.NewTenantID()) + + organization, err := svc.Organizations.Create(ctx, probo.CreateOrganizationRequest{ + Name: input.Name, + }) + if err != nil { + return nil, fmt.Errorf("cannot create organization: %w", err) + } + + err = r.usrmgrSvc.EnrollUserInOrganization(ctx, UserFromContext(ctx).ID, organization.ID) + if err != nil { + return nil, fmt.Errorf("cannot add user to organization: %w", err) + } + + tenantIDs, _ := ctx.Value(userTenantContextKey).(*[]gid.TenantID) + *tenantIDs = append(*tenantIDs, organization.ID.TenantID()) + + return &types.CreateOrganizationPayload{ + OrganizationEdge: types.NewOrganizationEdge(organization, coredata.OrganizationOrderFieldCreatedAt), + }, nil +} + +// UpdateOrganization is the resolver for the updateOrganization field. +func (r *mutationResolver) UpdateOrganization(ctx context.Context, input types.UpdateOrganizationInput) (*types.UpdateOrganizationPayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.OrganizationID.TenantID()) + + req := probo.UpdateOrganizationRequest{ + ID: input.OrganizationID, + Name: input.Name, + } + + if input.Logo != nil { + req.File = input.Logo.File + } + + organization, err := svc.Organizations.Update(ctx, req) + if err != nil { + return nil, fmt.Errorf("cannot update organization: %w", err) + } + + return &types.UpdateOrganizationPayload{ + Organization: types.NewOrganization(organization), + }, nil +} + +// DeleteOrganization is the resolver for the deleteOrganization field. +func (r *mutationResolver) DeleteOrganization(ctx context.Context, input types.DeleteOrganizationInput) (*types.DeleteOrganizationPayload, error) { + panic(fmt.Errorf("not implemented: DeleteOrganization - deleteOrganization")) +} + +// ConfirmEmail is the resolver for the confirmEmail field. +func (r *mutationResolver) ConfirmEmail(ctx context.Context, input types.ConfirmEmailInput) (*types.ConfirmEmailPayload, error) { + err := r.usrmgrSvc.ConfirmEmail(ctx, input.Token) + + if err != nil { + return nil, err + } + + return &types.ConfirmEmailPayload{Success: true}, nil +} + +// InviteUser is the resolver for the inviteUser field. +func (r *mutationResolver) InviteUser(ctx context.Context, input types.InviteUserInput) (*types.InviteUserPayload, error) { + user := UserFromContext(ctx) + + organizations, err := r.usrmgrSvc.ListOrganizationsForUserID(ctx, user.ID) + if err != nil { + panic(fmt.Errorf("failed to list organizations for user: %w", err)) + } + + for _, organization := range organizations { + if organization.ID == input.OrganizationID { + err := r.usrmgrSvc.InviteUser(ctx, input.OrganizationID, input.FullName, input.Email) + if err != nil { + return nil, err + } + + return &types.InviteUserPayload{Success: true}, nil + } + } + + return nil, fmt.Errorf("organization not found") +} + +// RemoveUser is the resolver for the removeUser field. +func (r *mutationResolver) RemoveUser(ctx context.Context, input types.RemoveUserInput) (*types.RemoveUserPayload, error) { + user := UserFromContext(ctx) + + organizations, err := r.usrmgrSvc.ListOrganizationsForUserID(ctx, user.ID) + if err != nil { + panic(fmt.Errorf("failed to list organizations for user: %w", err)) + } + + for _, organization := range organizations { + if organization.ID == input.OrganizationID { + err := r.usrmgrSvc.RemoveUser(ctx, input.OrganizationID, input.UserID) + if err != nil { + return nil, err + } + + return &types.RemoveUserPayload{Success: true}, nil + } + } + + return nil, fmt.Errorf("organization not found") +} + +// CreatePeople is the resolver for the createPeople field. +func (r *mutationResolver) CreatePeople(ctx context.Context, input types.CreatePeopleInput) (*types.CreatePeoplePayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.OrganizationID.TenantID()) + + people, err := svc.Peoples.Create(ctx, probo.CreatePeopleRequest{ + OrganizationID: input.OrganizationID, + FullName: input.FullName, + PrimaryEmailAddress: input.PrimaryEmailAddress, + AdditionalEmailAddresses: []string{}, + Kind: input.Kind, + }) + + if err != nil { + return nil, fmt.Errorf("cannot create people: %w", err) + } + + return &types.CreatePeoplePayload{ + PeopleEdge: types.NewPeopleEdge(people, coredata.PeopleOrderFieldFullName), + }, nil +} + +// UpdatePeople is the resolver for the updatePeople field. +func (r *mutationResolver) UpdatePeople(ctx context.Context, input types.UpdatePeopleInput) (*types.UpdatePeoplePayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.ID.TenantID()) + + people, err := svc.Peoples.Update(ctx, probo.UpdatePeopleRequest{ + ID: input.ID, + FullName: input.FullName, + PrimaryEmailAddress: input.PrimaryEmailAddress, + AdditionalEmailAddresses: &input.AdditionalEmailAddresses, + Kind: input.Kind, + }) + if err != nil { + return nil, fmt.Errorf("cannot update people: %w", err) + } + + return &types.UpdatePeoplePayload{ + People: types.NewPeople(people), + }, nil +} + +// DeletePeople is the resolver for the deletePeople field. +func (r *mutationResolver) DeletePeople(ctx context.Context, input types.DeletePeopleInput) (*types.DeletePeoplePayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.PeopleID.TenantID()) + + err := svc.Peoples.Delete(ctx, input.PeopleID) + if err != nil { + return nil, fmt.Errorf("cannot delete people: %w", err) + } + + return &types.DeletePeoplePayload{ + DeletedPeopleID: input.PeopleID, + }, nil +} + // CreateVendor is the resolver for the createVendor field. func (r *mutationResolver) CreateVendor(ctx context.Context, input types.CreateVendorInput) (*types.CreateVendorPayload, error) { svc := r.GetTenantServiceIfAuthorized(ctx, input.OrganizationID.TenantID()) @@ -149,194 +313,6 @@ func (r *mutationResolver) DeleteVendor(ctx context.Context, input types.DeleteV }, nil } -// CreatePeople is the resolver for the createPeople field. -func (r *mutationResolver) CreatePeople(ctx context.Context, input types.CreatePeopleInput) (*types.CreatePeoplePayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.OrganizationID.TenantID()) - - people, err := svc.Peoples.Create(ctx, probo.CreatePeopleRequest{ - OrganizationID: input.OrganizationID, - FullName: input.FullName, - PrimaryEmailAddress: input.PrimaryEmailAddress, - AdditionalEmailAddresses: []string{}, - Kind: input.Kind, - }) - - if err != nil { - return nil, fmt.Errorf("cannot create people: %w", err) - } - - return &types.CreatePeoplePayload{ - PeopleEdge: types.NewPeopleEdge(people, coredata.PeopleOrderFieldFullName), - }, nil -} - -// UpdatePeople is the resolver for the updatePeople field. -func (r *mutationResolver) UpdatePeople(ctx context.Context, input types.UpdatePeopleInput) (*types.UpdatePeoplePayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.ID.TenantID()) - - people, err := svc.Peoples.Update(ctx, probo.UpdatePeopleRequest{ - ID: input.ID, - FullName: input.FullName, - PrimaryEmailAddress: input.PrimaryEmailAddress, - AdditionalEmailAddresses: &input.AdditionalEmailAddresses, - Kind: input.Kind, - }) - if err != nil { - return nil, fmt.Errorf("cannot update people: %w", err) - } - - return &types.UpdatePeoplePayload{ - People: types.NewPeople(people), - }, nil -} - -// DeletePeople is the resolver for the deletePeople field. -func (r *mutationResolver) DeletePeople(ctx context.Context, input types.DeletePeopleInput) (*types.DeletePeoplePayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.PeopleID.TenantID()) - - err := svc.Peoples.Delete(ctx, input.PeopleID) - if err != nil { - return nil, fmt.Errorf("cannot delete people: %w", err) - } - - return &types.DeletePeoplePayload{ - DeletedPeopleID: input.PeopleID, - }, nil -} - -// CreateOrganization is the resolver for the createOrganization field. -func (r *mutationResolver) CreateOrganization(ctx context.Context, input types.CreateOrganizationInput) (*types.CreateOrganizationPayload, error) { - svc := r.proboSvc.WithTenant(gid.NewTenantID()) - - organization, err := svc.Organizations.Create(ctx, probo.CreateOrganizationRequest{ - Name: input.Name, - }) - if err != nil { - return nil, fmt.Errorf("cannot create organization: %w", err) - } - - err = r.usrmgrSvc.EnrollUserInOrganization(ctx, UserFromContext(ctx).ID, organization.ID) - if err != nil { - return nil, fmt.Errorf("cannot add user to organization: %w", err) - } - - tenantIDs, _ := ctx.Value(userTenantContextKey).(*[]gid.TenantID) - *tenantIDs = append(*tenantIDs, organization.ID.TenantID()) - - return &types.CreateOrganizationPayload{ - OrganizationEdge: types.NewOrganizationEdge(organization, coredata.OrganizationOrderFieldCreatedAt), - }, nil -} - -// UpdateOrganization is the resolver for the updateOrganization field. -func (r *mutationResolver) UpdateOrganization(ctx context.Context, input types.UpdateOrganizationInput) (*types.UpdateOrganizationPayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.OrganizationID.TenantID()) - - req := probo.UpdateOrganizationRequest{ - ID: input.OrganizationID, - Name: input.Name, - } - - if input.Logo != nil { - req.File = input.Logo.File - } - - organization, err := svc.Organizations.Update(ctx, req) - if err != nil { - return nil, fmt.Errorf("cannot update organization: %w", err) - } - - return &types.UpdateOrganizationPayload{ - Organization: types.NewOrganization(organization), - }, nil -} - -// DeleteOrganization is the resolver for the deleteOrganization field. -func (r *mutationResolver) DeleteOrganization(ctx context.Context, input types.DeleteOrganizationInput) (*types.DeleteOrganizationPayload, error) { - panic(fmt.Errorf("not implemented: DeleteOrganization - deleteOrganization")) -} - -// CreateTask is the resolver for the createTask field. -func (r *mutationResolver) CreateTask(ctx context.Context, input types.CreateTaskInput) (*types.CreateTaskPayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.MitigationID.TenantID()) - - task, err := svc.Tasks.Create(ctx, probo.CreateTaskRequest{ - MitigationID: input.MitigationID, - Name: input.Name, - Description: input.Description, - TimeEstimate: input.TimeEstimate, - }) - if err != nil { - return nil, fmt.Errorf("cannot create task: %w", err) - } - - return &types.CreateTaskPayload{ - TaskEdge: types.NewTaskEdge(task, coredata.TaskOrderFieldCreatedAt), - }, nil -} - -// UpdateTask is the resolver for the updateTask field. -func (r *mutationResolver) UpdateTask(ctx context.Context, input types.UpdateTaskInput) (*types.UpdateTaskPayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) - - task, err := svc.Tasks.Update(ctx, probo.UpdateTaskRequest{ - TaskID: input.TaskID, - Name: input.Name, - Description: input.Description, - State: input.State, - TimeEstimate: input.TimeEstimate, - }) - if err != nil { - return nil, fmt.Errorf("cannot update task: %w", err) - } - - return &types.UpdateTaskPayload{ - Task: types.NewTask(task), - }, nil -} - -// DeleteTask is the resolver for the deleteTask field. -func (r *mutationResolver) DeleteTask(ctx context.Context, input types.DeleteTaskInput) (*types.DeleteTaskPayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) - - err := svc.Tasks.Delete(ctx, input.TaskID) - if err != nil { - return nil, fmt.Errorf("cannot delete task: %w", err) - } - - return &types.DeleteTaskPayload{ - DeletedTaskID: input.TaskID, - }, nil -} - -// AssignTask is the resolver for the assignTask field. -func (r *mutationResolver) AssignTask(ctx context.Context, input types.AssignTaskInput) (*types.AssignTaskPayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) - - task, err := svc.Tasks.Assign(ctx, input.TaskID, input.AssignedToID) - if err != nil { - return nil, fmt.Errorf("cannot assign task: %w", err) - } - - return &types.AssignTaskPayload{ - Task: types.NewTask(task), - }, nil -} - -// UnassignTask is the resolver for the unassignTask field. -func (r *mutationResolver) UnassignTask(ctx context.Context, input types.UnassignTaskInput) (*types.UnassignTaskPayload, error) { - svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) - - task, err := svc.Tasks.Unassign(ctx, input.TaskID) - if err != nil { - return nil, fmt.Errorf("cannot unassign task: %w", err) - } - - return &types.UnassignTaskPayload{ - Task: types.NewTask(task), - }, nil -} - // CreateFramework is the resolver for the createFramework field. func (r *mutationResolver) CreateFramework(ctx context.Context, input types.CreateFrameworkInput) (*types.CreateFrameworkPayload, error) { svc := r.GetTenantServiceIfAuthorized(ctx, input.OrganizationID.TenantID()) @@ -446,6 +422,111 @@ func (r *mutationResolver) UpdateMitigation(ctx context.Context, input types.Upd }, nil } +// ImportMitigation is the resolver for the importMitigation field. +func (r *mutationResolver) ImportMitigation(ctx context.Context, input types.ImportMitigationInput) (*types.ImportMitigationPayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.OrganizationID.TenantID()) + + var req probo.ImportMitigationRequest + if err := json.NewDecoder(input.File.File).Decode(&req.Mitigations); err != nil { + return nil, fmt.Errorf("cannot unmarshal mitigation: %w", err) + } + + mitigations, err := svc.Mitigations.Import(ctx, input.OrganizationID, req) + if err != nil { + return nil, fmt.Errorf("cannot import mitigation: %w", err) + } + + mitigationEdges := make([]*types.MitigationEdge, len(mitigations.Data)) + for i, mitigation := range mitigations.Data { + mitigationEdges[i] = types.NewMitigationEdge(mitigation, coredata.MitigationOrderFieldCreatedAt) + } + + return &types.ImportMitigationPayload{ + MitigationEdges: mitigationEdges, + }, nil +} + +// CreateTask is the resolver for the createTask field. +func (r *mutationResolver) CreateTask(ctx context.Context, input types.CreateTaskInput) (*types.CreateTaskPayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.MitigationID.TenantID()) + + task, err := svc.Tasks.Create(ctx, probo.CreateTaskRequest{ + MitigationID: input.MitigationID, + Name: input.Name, + Description: input.Description, + TimeEstimate: input.TimeEstimate, + }) + if err != nil { + return nil, fmt.Errorf("cannot create task: %w", err) + } + + return &types.CreateTaskPayload{ + TaskEdge: types.NewTaskEdge(task, coredata.TaskOrderFieldCreatedAt), + }, nil +} + +// UpdateTask is the resolver for the updateTask field. +func (r *mutationResolver) UpdateTask(ctx context.Context, input types.UpdateTaskInput) (*types.UpdateTaskPayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) + + task, err := svc.Tasks.Update(ctx, probo.UpdateTaskRequest{ + TaskID: input.TaskID, + Name: input.Name, + Description: input.Description, + State: input.State, + TimeEstimate: input.TimeEstimate, + }) + if err != nil { + return nil, fmt.Errorf("cannot update task: %w", err) + } + + return &types.UpdateTaskPayload{ + Task: types.NewTask(task), + }, nil +} + +// DeleteTask is the resolver for the deleteTask field. +func (r *mutationResolver) DeleteTask(ctx context.Context, input types.DeleteTaskInput) (*types.DeleteTaskPayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) + + err := svc.Tasks.Delete(ctx, input.TaskID) + if err != nil { + return nil, fmt.Errorf("cannot delete task: %w", err) + } + + return &types.DeleteTaskPayload{ + DeletedTaskID: input.TaskID, + }, nil +} + +// AssignTask is the resolver for the assignTask field. +func (r *mutationResolver) AssignTask(ctx context.Context, input types.AssignTaskInput) (*types.AssignTaskPayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) + + task, err := svc.Tasks.Assign(ctx, input.TaskID, input.AssignedToID) + if err != nil { + return nil, fmt.Errorf("cannot assign task: %w", err) + } + + return &types.AssignTaskPayload{ + Task: types.NewTask(task), + }, nil +} + +// UnassignTask is the resolver for the unassignTask field. +func (r *mutationResolver) UnassignTask(ctx context.Context, input types.UnassignTaskInput) (*types.UnassignTaskPayload, error) { + svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) + + task, err := svc.Tasks.Unassign(ctx, input.TaskID) + if err != nil { + return nil, fmt.Errorf("cannot unassign task: %w", err) + } + + return &types.UnassignTaskPayload{ + Task: types.NewTask(task), + }, nil +} + // UploadEvidence is the resolver for the uploadEvidence field. func (r *mutationResolver) UploadEvidence(ctx context.Context, input types.UploadEvidenceInput) (*types.UploadEvidencePayload, error) { svc := r.GetTenantServiceIfAuthorized(ctx, input.TaskID.TenantID()) @@ -554,63 +635,6 @@ func (r *mutationResolver) DeletePolicy(ctx context.Context, input types.DeleteP }, nil } -// ConfirmEmail is the resolver for the confirmEmail field. -func (r *mutationResolver) ConfirmEmail(ctx context.Context, input types.ConfirmEmailInput) (*types.ConfirmEmailPayload, error) { - err := r.usrmgrSvc.ConfirmEmail(ctx, input.Token) - - if err != nil { - return nil, err - } - - return &types.ConfirmEmailPayload{Success: true}, nil -} - -// InviteUser is the resolver for the inviteUser field. -func (r *mutationResolver) InviteUser(ctx context.Context, input types.InviteUserInput) (*types.InviteUserPayload, error) { - user := UserFromContext(ctx) - - organizations, err := r.usrmgrSvc.ListOrganizationsForUserID(ctx, user.ID) - if err != nil { - panic(fmt.Errorf("failed to list organizations for user: %w", err)) - } - - for _, organization := range organizations { - if organization.ID == input.OrganizationID { - err := r.usrmgrSvc.InviteUser(ctx, input.OrganizationID, input.FullName, input.Email) - if err != nil { - return nil, err - } - - return &types.InviteUserPayload{Success: true}, nil - } - } - - return nil, fmt.Errorf("organization not found") -} - -// RemoveUser is the resolver for the removeUser field. -func (r *mutationResolver) RemoveUser(ctx context.Context, input types.RemoveUserInput) (*types.RemoveUserPayload, error) { - user := UserFromContext(ctx) - - organizations, err := r.usrmgrSvc.ListOrganizationsForUserID(ctx, user.ID) - if err != nil { - panic(fmt.Errorf("failed to list organizations for user: %w", err)) - } - - for _, organization := range organizations { - if organization.ID == input.OrganizationID { - err := r.usrmgrSvc.RemoveUser(ctx, input.OrganizationID, input.UserID) - if err != nil { - return nil, err - } - - return &types.RemoveUserPayload{Success: true}, nil - } - } - - return nil, fmt.Errorf("organization not found") -} - // LogoURL is the resolver for the logoUrl field. func (r *organizationResolver) LogoURL(ctx context.Context, obj *types.Organization) (*string, error) { svc := r.GetTenantServiceIfAuthorized(ctx, obj.ID.TenantID())