diff --git a/apps/trust/src/components/AuditRow.tsx b/apps/trust/src/components/AuditRow.tsx index 8d2de853e..80dcc8100 100644 --- a/apps/trust/src/components/AuditRow.tsx +++ b/apps/trust/src/components/AuditRow.tsx @@ -14,7 +14,7 @@ import { Table, useToast, } from "@probo/ui"; -import { type PropsWithChildren, useState } from "react"; +import { type PropsWithChildren } from "react"; import { useFragment, useMutation } from "react-relay"; import { useLocation, useNavigate, useSearchParams } from "react-router"; import { graphql } from "relay-runtime"; @@ -29,8 +29,13 @@ import type { AuditRowFragment$key } from "./__generated__/AuditRowFragment.grap const requestAccessMutation = graphql` mutation AuditRow_requestAccessMutation($input: RequestReportAccessInput!) { requestReportAccess(input: $input) { - trustCenterAccess { - id + audit { + report { + access { + id + status + } + } } } } @@ -51,7 +56,10 @@ const auditRowFragment = graphql` id filename isUserAuthorized - hasUserRequestedAccess + access { + id + status + } } framework { id @@ -70,9 +78,7 @@ export function AuditRow(props: { audit: AuditRowFragment$key }) { const navigate = useNavigate(); const audit = useFragment(auditRowFragment, props.audit); - const [hasRequested, setHasRequested] = useState( - audit.report?.hasUserRequestedAccess, - ); + const hasRequested = !!audit.report?.access; const [requestAccess, isRequestingAccess] = useMutation(requestAccessMutation); @@ -95,7 +101,6 @@ export function AuditRow(props: { audit: AuditRowFragment$key }) { }); return; } - setHasRequested(true); toast({ title: __("Success"), description: __("Access request submitted successfully."), diff --git a/apps/trust/src/components/DocumentRow.tsx b/apps/trust/src/components/DocumentRow.tsx index e084bc657..72f3c2729 100644 --- a/apps/trust/src/components/DocumentRow.tsx +++ b/apps/trust/src/components/DocumentRow.tsx @@ -9,7 +9,6 @@ import { Spinner, useToast, } from "@probo/ui"; -import { useState } from "react"; import { useFragment, useMutation } from "react-relay"; import { useLocation, useNavigate, useSearchParams } from "react-router"; import { graphql } from "relay-runtime"; @@ -26,8 +25,11 @@ const requestAccessMutation = graphql` $input: RequestDocumentAccessInput! ) { requestDocumentAccess(input: $input) { - trustCenterAccess { - id + document { + access { + id + status + } } } } @@ -46,7 +48,10 @@ const documentRowFragment = graphql` id title isUserAuthorized - hasUserRequestedAccess + access { + id + status + } } `; @@ -58,9 +63,7 @@ export function DocumentRow(props: { document: DocumentRowFragment$key }) { const [searchParams] = useSearchParams(); const document = useFragment(documentRowFragment, props.document); - const [hasRequested, setHasRequested] = useState( - document.hasUserRequestedAccess, - ); + const hasRequested = !!document.access; const [requestAccess, isRequestingAccess] = useMutation(requestAccessMutation); @@ -83,7 +86,6 @@ export function DocumentRow(props: { document: DocumentRowFragment$key }) { }); return; } - setHasRequested(true); toast({ title: __("Success"), description: __("Access request submitted successfully."), diff --git a/apps/trust/src/components/OrganizationSidebar.tsx b/apps/trust/src/components/OrganizationSidebar.tsx index 5759d1afd..5ea7fdc8a 100644 --- a/apps/trust/src/components/OrganizationSidebar.tsx +++ b/apps/trust/src/components/OrganizationSidebar.tsx @@ -12,7 +12,7 @@ import { } from "@probo/ui"; import { type PropsWithChildren } from "react"; import { useMutation } from "react-relay"; -import { useNavigate, useSearchParams } from "react-router"; +import { useLocation, useNavigate, useSearchParams } from "react-router"; import { graphql } from "relay-runtime"; import type { TrustGraphCurrentQuery$data } from "#/queries/__generated__/TrustGraphCurrentQuery.graphql"; @@ -41,6 +41,7 @@ export function OrganizationSidebar({ const theme = useSystemTheme(); const [searchParams] = useSearchParams(); const navigate = useNavigate(); + const location = useLocation(); const logoFileUrl = theme === "dark" ? (trustCenter?.darkLogoFileUrl ?? trustCenter?.logoFileUrl) : trustCenter?.logoFileUrl; @@ -66,6 +67,8 @@ export function OrganizationSidebar({ description: __("Access request submitted successfully."), variant: "success", }); + + window.location.href = location.pathname; }, onError: (error) => { if (error instanceof UnAuthenticatedError) { diff --git a/apps/trust/src/components/TrustCenterFileRow.tsx b/apps/trust/src/components/TrustCenterFileRow.tsx index b6bb25306..ccde91de2 100644 --- a/apps/trust/src/components/TrustCenterFileRow.tsx +++ b/apps/trust/src/components/TrustCenterFileRow.tsx @@ -9,7 +9,6 @@ import { Spinner, useToast, } from "@probo/ui"; -import { useState } from "react"; import { useFragment, useMutation } from "react-relay"; import { useLocation, useNavigate, useSearchParams } from "react-router"; import { graphql } from "relay-runtime"; @@ -26,8 +25,11 @@ const requestAccessMutation = graphql` $input: RequestTrustCenterFileAccessInput! ) { requestTrustCenterFileAccess(input: $input) { - trustCenterAccess { - id + file { + access { + id + status + } } } } @@ -48,7 +50,10 @@ const trustCenterFileRowFragment = graphql` id name isUserAuthorized - hasUserRequestedAccess + access { + id + status + } } `; @@ -62,7 +67,7 @@ export function TrustCenterFileRow(props: { const navigate = useNavigate(); const file = useFragment(trustCenterFileRowFragment, props.file); - const [hasRequested, setHasRequested] = useState(file.hasUserRequestedAccess); + const hasRequested = !!file.access; const [requestAccess, isRequestingAccess] = useMutation( @@ -87,7 +92,6 @@ export function TrustCenterFileRow(props: { }); return; } - setHasRequested(true); toast({ title: __("Success"), description: __("Access request submitted successfully."), diff --git a/apps/trust/src/components/__generated__/AuditRowFragment.graphql.ts b/apps/trust/src/components/__generated__/AuditRowFragment.graphql.ts index c24672d79..265082710 100644 --- a/apps/trust/src/components/__generated__/AuditRowFragment.graphql.ts +++ b/apps/trust/src/components/__generated__/AuditRowFragment.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<9540bd74ce3b0dd5366c237b56070d9f>> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -9,6 +9,7 @@ // @ts-nocheck import { ReaderFragment } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; import { FragmentRefs } from "relay-runtime"; export type AuditRowFragment$data = { readonly framework: { @@ -19,8 +20,11 @@ export type AuditRowFragment$data = { }; readonly name: string | null | undefined; readonly report: { + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; readonly filename: string; - readonly hasUserRequestedAccess: boolean; readonly id: string; readonly isUserAuthorized: boolean; } | null | undefined; @@ -79,8 +83,20 @@ return { { "alias": null, "args": null, - "kind": "ScalarField", - "name": "hasUserRequestedAccess", + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v1/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], "storageKey": null } ], @@ -119,6 +135,6 @@ return { }; })(); -(node as any).hash = "ebf47a97014ba4dad0da94f2bb01666f"; +(node as any).hash = "1e3e89368594b05e0926b5ee8bc7c0b5"; export default node; diff --git a/apps/trust/src/components/__generated__/AuditRow_requestAccessMutation.graphql.ts b/apps/trust/src/components/__generated__/AuditRow_requestAccessMutation.graphql.ts index 56b768015..516d222f7 100644 --- a/apps/trust/src/components/__generated__/AuditRow_requestAccessMutation.graphql.ts +++ b/apps/trust/src/components/__generated__/AuditRow_requestAccessMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<0e5c234b565a3031a774995bff249b97>> + * @generated SignedSource<<5439a269fe5c79f6d90f2421fdacb090>> * @lightSyntaxTransform * @nogrep */ @@ -9,6 +9,7 @@ // @ts-nocheck import { ConcreteRequest } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; export type RequestReportAccessInput = { reportId: string; }; @@ -17,9 +18,14 @@ export type AuditRow_requestAccessMutation$variables = { }; export type AuditRow_requestAccessMutation$data = { readonly requestReportAccess: { - readonly trustCenterAccess: { - readonly id: string; - }; + readonly audit: { + readonly report: { + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; + } | null | undefined; + } | null | undefined; }; }; export type AuditRow_requestAccessMutation = { @@ -37,48 +43,79 @@ var v0 = [ ], v1 = [ { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } - ], - "concreteType": "RequestAccessesPayload", - "kind": "LinkedField", - "name": "requestReportAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "TrustCenterAccess", - "kind": "LinkedField", - "name": "trustCenterAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null + "kind": "Variable", + "name": "input", + "variableName": "input" } -]; +], +v2 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}, +v3 = { + "alias": null, + "args": null, + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v2/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], + "storageKey": null +}; return { "fragment": { "argumentDefinitions": (v0/*: any*/), "kind": "Fragment", "metadata": null, "name": "AuditRow_requestAccessMutation", - "selections": (v1/*: any*/), + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestReportAccessPayload", + "kind": "LinkedField", + "name": "requestReportAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Audit", + "kind": "LinkedField", + "name": "audit", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Report", + "kind": "LinkedField", + "name": "report", + "plural": false, + "selections": [ + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": null + } + ], "type": "Mutation", "abstractKey": null }, @@ -87,19 +124,56 @@ return { "argumentDefinitions": (v0/*: any*/), "kind": "Operation", "name": "AuditRow_requestAccessMutation", - "selections": (v1/*: any*/) + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestReportAccessPayload", + "kind": "LinkedField", + "name": "requestReportAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Audit", + "kind": "LinkedField", + "name": "audit", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Report", + "kind": "LinkedField", + "name": "report", + "plural": false, + "selections": [ + (v3/*: any*/), + (v2/*: any*/) + ], + "storageKey": null + }, + (v2/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] }, "params": { - "cacheID": "6760f1ec8a6990f62461c3fab2b2934a", + "cacheID": "8d33e98c3b907ff4ddf6d08a0d9e7ff8", "id": null, "metadata": {}, "name": "AuditRow_requestAccessMutation", "operationKind": "mutation", - "text": "mutation AuditRow_requestAccessMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" + "text": "mutation AuditRow_requestAccessMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n audit {\n report {\n access {\n id\n status\n }\n id\n }\n id\n }\n }\n}\n" } }; })(); -(node as any).hash = "6ab5eb701126385e717a381e21e55ae0"; +(node as any).hash = "01e09978f688128c89698e9a0877fa37"; export default node; diff --git a/apps/trust/src/components/__generated__/DocumentRowFragment.graphql.ts b/apps/trust/src/components/__generated__/DocumentRowFragment.graphql.ts index add4734e1..6ba93b5ad 100644 --- a/apps/trust/src/components/__generated__/DocumentRowFragment.graphql.ts +++ b/apps/trust/src/components/__generated__/DocumentRowFragment.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<396f9d87342c909ca373f60a1e6f7ff3>> + * @generated SignedSource<<5698d403c8907dad78a4070f710f46b4>> * @lightSyntaxTransform * @nogrep */ @@ -9,9 +9,13 @@ // @ts-nocheck import { ReaderFragment } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; import { FragmentRefs } from "relay-runtime"; export type DocumentRowFragment$data = { - readonly hasUserRequestedAccess: boolean; + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; readonly id: string; readonly isUserAuthorized: boolean; readonly title: string; @@ -22,19 +26,21 @@ export type DocumentRowFragment$key = { readonly " $fragmentSpreads": FragmentRefs<"DocumentRowFragment">; }; -const node: ReaderFragment = { +const node: ReaderFragment = (function(){ +var v0 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}; +return { "argumentDefinitions": [], "kind": "Fragment", "metadata": null, "name": "DocumentRowFragment", "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, + (v0/*: any*/), { "alias": null, "args": null, @@ -52,15 +58,28 @@ const node: ReaderFragment = { { "alias": null, "args": null, - "kind": "ScalarField", - "name": "hasUserRequestedAccess", + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v0/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], "storageKey": null } ], "type": "Document", "abstractKey": null }; +})(); -(node as any).hash = "1b0f0b9cae621268d72b0fd0646aa672"; +(node as any).hash = "6839ab4ad70d571dcce4e74583723244"; export default node; diff --git a/apps/trust/src/components/__generated__/DocumentRow_requestAccessMutation.graphql.ts b/apps/trust/src/components/__generated__/DocumentRow_requestAccessMutation.graphql.ts index adf8814d6..735f8e580 100644 --- a/apps/trust/src/components/__generated__/DocumentRow_requestAccessMutation.graphql.ts +++ b/apps/trust/src/components/__generated__/DocumentRow_requestAccessMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -9,6 +9,7 @@ // @ts-nocheck import { ConcreteRequest } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; export type RequestDocumentAccessInput = { documentId: string; }; @@ -17,9 +18,12 @@ export type DocumentRow_requestAccessMutation$variables = { }; export type DocumentRow_requestAccessMutation$data = { readonly requestDocumentAccess: { - readonly trustCenterAccess: { - readonly id: string; - }; + readonly document: { + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; + } | null | undefined; }; }; export type DocumentRow_requestAccessMutation = { @@ -37,48 +41,68 @@ var v0 = [ ], v1 = [ { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } - ], - "concreteType": "RequestAccessesPayload", - "kind": "LinkedField", - "name": "requestDocumentAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "TrustCenterAccess", - "kind": "LinkedField", - "name": "trustCenterAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null + "kind": "Variable", + "name": "input", + "variableName": "input" } -]; +], +v2 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}, +v3 = { + "alias": null, + "args": null, + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v2/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], + "storageKey": null +}; return { "fragment": { "argumentDefinitions": (v0/*: any*/), "kind": "Fragment", "metadata": null, "name": "DocumentRow_requestAccessMutation", - "selections": (v1/*: any*/), + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestDocumentAccessPayload", + "kind": "LinkedField", + "name": "requestDocumentAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Document", + "kind": "LinkedField", + "name": "document", + "plural": false, + "selections": [ + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], "type": "Mutation", "abstractKey": null }, @@ -87,19 +111,44 @@ return { "argumentDefinitions": (v0/*: any*/), "kind": "Operation", "name": "DocumentRow_requestAccessMutation", - "selections": (v1/*: any*/) + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestDocumentAccessPayload", + "kind": "LinkedField", + "name": "requestDocumentAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Document", + "kind": "LinkedField", + "name": "document", + "plural": false, + "selections": [ + (v3/*: any*/), + (v2/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] }, "params": { - "cacheID": "13715b7cb8784d050b6d0381e460bbad", + "cacheID": "0bd652390e5413f5ba2c66af0796cbc9", "id": null, "metadata": {}, "name": "DocumentRow_requestAccessMutation", "operationKind": "mutation", - "text": "mutation DocumentRow_requestAccessMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" + "text": "mutation DocumentRow_requestAccessMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n document {\n access {\n id\n status\n }\n id\n }\n }\n}\n" } }; })(); -(node as any).hash = "ca9026b04c2de91067759e3a80e5c276"; +(node as any).hash = "bc8897aa5c4a7d7fb05604f8aa3b8491"; export default node; diff --git a/apps/trust/src/components/__generated__/TrustCenterFileRowFragment.graphql.ts b/apps/trust/src/components/__generated__/TrustCenterFileRowFragment.graphql.ts index 744db0863..6079c4077 100644 --- a/apps/trust/src/components/__generated__/TrustCenterFileRowFragment.graphql.ts +++ b/apps/trust/src/components/__generated__/TrustCenterFileRowFragment.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<0261adc72d21035b906b6156ea9d0b40>> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -9,9 +9,13 @@ // @ts-nocheck import { ReaderFragment } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; import { FragmentRefs } from "relay-runtime"; export type TrustCenterFileRowFragment$data = { - readonly hasUserRequestedAccess: boolean; + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; readonly id: string; readonly isUserAuthorized: boolean; readonly name: string; @@ -22,19 +26,21 @@ export type TrustCenterFileRowFragment$key = { readonly " $fragmentSpreads": FragmentRefs<"TrustCenterFileRowFragment">; }; -const node: ReaderFragment = { +const node: ReaderFragment = (function(){ +var v0 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}; +return { "argumentDefinitions": [], "kind": "Fragment", "metadata": null, "name": "TrustCenterFileRowFragment", "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, + (v0/*: any*/), { "alias": null, "args": null, @@ -52,15 +58,28 @@ const node: ReaderFragment = { { "alias": null, "args": null, - "kind": "ScalarField", - "name": "hasUserRequestedAccess", + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v0/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], "storageKey": null } ], "type": "TrustCenterFile", "abstractKey": null }; +})(); -(node as any).hash = "4ff11c14e65566f0dfe3a77ea73903e8"; +(node as any).hash = "98e5e399ab6d45c22cd85d663cfb3748"; export default node; diff --git a/apps/trust/src/components/__generated__/TrustCenterFileRow_requestAccessMutation.graphql.ts b/apps/trust/src/components/__generated__/TrustCenterFileRow_requestAccessMutation.graphql.ts index 44ffac5a0..ea9f36f54 100644 --- a/apps/trust/src/components/__generated__/TrustCenterFileRow_requestAccessMutation.graphql.ts +++ b/apps/trust/src/components/__generated__/TrustCenterFileRow_requestAccessMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<<19d9adae53e45d4399358c9307928265>> * @lightSyntaxTransform * @nogrep */ @@ -9,6 +9,7 @@ // @ts-nocheck import { ConcreteRequest } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; export type RequestTrustCenterFileAccessInput = { trustCenterFileId: string; }; @@ -17,9 +18,12 @@ export type TrustCenterFileRow_requestAccessMutation$variables = { }; export type TrustCenterFileRow_requestAccessMutation$data = { readonly requestTrustCenterFileAccess: { - readonly trustCenterAccess: { - readonly id: string; - }; + readonly file: { + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; + } | null | undefined; }; }; export type TrustCenterFileRow_requestAccessMutation = { @@ -37,48 +41,68 @@ var v0 = [ ], v1 = [ { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } - ], - "concreteType": "RequestAccessesPayload", - "kind": "LinkedField", - "name": "requestTrustCenterFileAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "TrustCenterAccess", - "kind": "LinkedField", - "name": "trustCenterAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null + "kind": "Variable", + "name": "input", + "variableName": "input" } -]; +], +v2 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}, +v3 = { + "alias": null, + "args": null, + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v2/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], + "storageKey": null +}; return { "fragment": { "argumentDefinitions": (v0/*: any*/), "kind": "Fragment", "metadata": null, "name": "TrustCenterFileRow_requestAccessMutation", - "selections": (v1/*: any*/), + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestFileAccessPayload", + "kind": "LinkedField", + "name": "requestTrustCenterFileAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "TrustCenterFile", + "kind": "LinkedField", + "name": "file", + "plural": false, + "selections": [ + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], "type": "Mutation", "abstractKey": null }, @@ -87,19 +111,44 @@ return { "argumentDefinitions": (v0/*: any*/), "kind": "Operation", "name": "TrustCenterFileRow_requestAccessMutation", - "selections": (v1/*: any*/) + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestFileAccessPayload", + "kind": "LinkedField", + "name": "requestTrustCenterFileAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "TrustCenterFile", + "kind": "LinkedField", + "name": "file", + "plural": false, + "selections": [ + (v3/*: any*/), + (v2/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] }, "params": { - "cacheID": "77a09810aa9c3ddf3a3baddf709f9a42", + "cacheID": "f96fd0464a34ad565cc7b6bb2e13308f", "id": null, "metadata": {}, "name": "TrustCenterFileRow_requestAccessMutation", "operationKind": "mutation", - "text": "mutation TrustCenterFileRow_requestAccessMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" + "text": "mutation TrustCenterFileRow_requestAccessMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n file {\n access {\n id\n status\n }\n id\n }\n }\n}\n" } }; })(); -(node as any).hash = "eba04489de9ec18ab9816328a481ef33"; +(node as any).hash = "1a9f7ac6860d4bca88d04d73f9c6020d"; export default node; diff --git a/apps/trust/src/hooks/__generated__/useRequestAccessCallback_documentMutation.graphql.ts b/apps/trust/src/hooks/__generated__/useRequestAccessCallback_documentMutation.graphql.ts index 308d03420..689ed606d 100644 --- a/apps/trust/src/hooks/__generated__/useRequestAccessCallback_documentMutation.graphql.ts +++ b/apps/trust/src/hooks/__generated__/useRequestAccessCallback_documentMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<6b6304c9a22de890f171632f8c9dabe1>> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -9,6 +9,7 @@ // @ts-nocheck import { ConcreteRequest } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; export type RequestDocumentAccessInput = { documentId: string; }; @@ -17,9 +18,12 @@ export type useRequestAccessCallback_documentMutation$variables = { }; export type useRequestAccessCallback_documentMutation$data = { readonly requestDocumentAccess: { - readonly trustCenterAccess: { - readonly id: string; - }; + readonly document: { + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; + } | null | undefined; }; }; export type useRequestAccessCallback_documentMutation = { @@ -37,48 +41,68 @@ var v0 = [ ], v1 = [ { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } - ], - "concreteType": "RequestAccessesPayload", - "kind": "LinkedField", - "name": "requestDocumentAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "TrustCenterAccess", - "kind": "LinkedField", - "name": "trustCenterAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null + "kind": "Variable", + "name": "input", + "variableName": "input" } -]; +], +v2 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}, +v3 = { + "alias": null, + "args": null, + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v2/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], + "storageKey": null +}; return { "fragment": { "argumentDefinitions": (v0/*: any*/), "kind": "Fragment", "metadata": null, "name": "useRequestAccessCallback_documentMutation", - "selections": (v1/*: any*/), + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestDocumentAccessPayload", + "kind": "LinkedField", + "name": "requestDocumentAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Document", + "kind": "LinkedField", + "name": "document", + "plural": false, + "selections": [ + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], "type": "Mutation", "abstractKey": null }, @@ -87,19 +111,44 @@ return { "argumentDefinitions": (v0/*: any*/), "kind": "Operation", "name": "useRequestAccessCallback_documentMutation", - "selections": (v1/*: any*/) + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestDocumentAccessPayload", + "kind": "LinkedField", + "name": "requestDocumentAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Document", + "kind": "LinkedField", + "name": "document", + "plural": false, + "selections": [ + (v3/*: any*/), + (v2/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] }, "params": { - "cacheID": "849ea6a746660bdee8ebf805baef7a33", + "cacheID": "e3153093fd3da3f95ac5bc98a09163a7", "id": null, "metadata": {}, "name": "useRequestAccessCallback_documentMutation", "operationKind": "mutation", - "text": "mutation useRequestAccessCallback_documentMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" + "text": "mutation useRequestAccessCallback_documentMutation(\n $input: RequestDocumentAccessInput!\n) {\n requestDocumentAccess(input: $input) {\n document {\n access {\n id\n status\n }\n id\n }\n }\n}\n" } }; })(); -(node as any).hash = "1ff8b5f560d8c3024e6d5c11bb2ed889"; +(node as any).hash = "afc533a5d5b764f81f6bc7632f1614ff"; export default node; diff --git a/apps/trust/src/hooks/__generated__/useRequestAccessCallback_fileMutation.graphql.ts b/apps/trust/src/hooks/__generated__/useRequestAccessCallback_fileMutation.graphql.ts index eccff5d4e..4e50d240a 100644 --- a/apps/trust/src/hooks/__generated__/useRequestAccessCallback_fileMutation.graphql.ts +++ b/apps/trust/src/hooks/__generated__/useRequestAccessCallback_fileMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<<6db2a4322199d638b3f1ac498ecd066b>> + * @generated SignedSource<<688bb06b7534c867b9427a6fcbb52d57>> * @lightSyntaxTransform * @nogrep */ @@ -9,6 +9,7 @@ // @ts-nocheck import { ConcreteRequest } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; export type RequestTrustCenterFileAccessInput = { trustCenterFileId: string; }; @@ -17,9 +18,12 @@ export type useRequestAccessCallback_fileMutation$variables = { }; export type useRequestAccessCallback_fileMutation$data = { readonly requestTrustCenterFileAccess: { - readonly trustCenterAccess: { - readonly id: string; - }; + readonly file: { + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; + } | null | undefined; }; }; export type useRequestAccessCallback_fileMutation = { @@ -37,48 +41,68 @@ var v0 = [ ], v1 = [ { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } - ], - "concreteType": "RequestAccessesPayload", - "kind": "LinkedField", - "name": "requestTrustCenterFileAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "TrustCenterAccess", - "kind": "LinkedField", - "name": "trustCenterAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null + "kind": "Variable", + "name": "input", + "variableName": "input" } -]; +], +v2 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}, +v3 = { + "alias": null, + "args": null, + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v2/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], + "storageKey": null +}; return { "fragment": { "argumentDefinitions": (v0/*: any*/), "kind": "Fragment", "metadata": null, "name": "useRequestAccessCallback_fileMutation", - "selections": (v1/*: any*/), + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestFileAccessPayload", + "kind": "LinkedField", + "name": "requestTrustCenterFileAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "TrustCenterFile", + "kind": "LinkedField", + "name": "file", + "plural": false, + "selections": [ + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], "type": "Mutation", "abstractKey": null }, @@ -87,19 +111,44 @@ return { "argumentDefinitions": (v0/*: any*/), "kind": "Operation", "name": "useRequestAccessCallback_fileMutation", - "selections": (v1/*: any*/) + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestFileAccessPayload", + "kind": "LinkedField", + "name": "requestTrustCenterFileAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "TrustCenterFile", + "kind": "LinkedField", + "name": "file", + "plural": false, + "selections": [ + (v3/*: any*/), + (v2/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] }, "params": { - "cacheID": "1ed0d9f8a3b3dc08c2af16101729d3a9", + "cacheID": "0c66e592bdb92aa92fbaef21c8133e17", "id": null, "metadata": {}, "name": "useRequestAccessCallback_fileMutation", "operationKind": "mutation", - "text": "mutation useRequestAccessCallback_fileMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" + "text": "mutation useRequestAccessCallback_fileMutation(\n $input: RequestTrustCenterFileAccessInput!\n) {\n requestTrustCenterFileAccess(input: $input) {\n file {\n access {\n id\n status\n }\n id\n }\n }\n}\n" } }; })(); -(node as any).hash = "5105b60de987b135523ada9ee2777dea"; +(node as any).hash = "0dbe835b29f81d086b94cfecb8fc832f"; export default node; diff --git a/apps/trust/src/hooks/__generated__/useRequestAccessCallback_reportMutation.graphql.ts b/apps/trust/src/hooks/__generated__/useRequestAccessCallback_reportMutation.graphql.ts index e5cadc7af..0c793890d 100644 --- a/apps/trust/src/hooks/__generated__/useRequestAccessCallback_reportMutation.graphql.ts +++ b/apps/trust/src/hooks/__generated__/useRequestAccessCallback_reportMutation.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<> * @lightSyntaxTransform * @nogrep */ @@ -9,6 +9,7 @@ // @ts-nocheck import { ConcreteRequest } from 'relay-runtime'; +export type DocumentAccessStatus = "GRANTED" | "REJECTED" | "REQUESTED" | "REVOKED"; export type RequestReportAccessInput = { reportId: string; }; @@ -17,9 +18,14 @@ export type useRequestAccessCallback_reportMutation$variables = { }; export type useRequestAccessCallback_reportMutation$data = { readonly requestReportAccess: { - readonly trustCenterAccess: { - readonly id: string; - }; + readonly audit: { + readonly report: { + readonly access: { + readonly id: string; + readonly status: DocumentAccessStatus; + } | null | undefined; + } | null | undefined; + } | null | undefined; }; }; export type useRequestAccessCallback_reportMutation = { @@ -37,48 +43,79 @@ var v0 = [ ], v1 = [ { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } - ], - "concreteType": "RequestAccessesPayload", - "kind": "LinkedField", - "name": "requestReportAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "TrustCenterAccess", - "kind": "LinkedField", - "name": "trustCenterAccess", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null + "kind": "Variable", + "name": "input", + "variableName": "input" } -]; +], +v2 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}, +v3 = { + "alias": null, + "args": null, + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v2/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], + "storageKey": null +}; return { "fragment": { "argumentDefinitions": (v0/*: any*/), "kind": "Fragment", "metadata": null, "name": "useRequestAccessCallback_reportMutation", - "selections": (v1/*: any*/), + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestReportAccessPayload", + "kind": "LinkedField", + "name": "requestReportAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Audit", + "kind": "LinkedField", + "name": "audit", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Report", + "kind": "LinkedField", + "name": "report", + "plural": false, + "selections": [ + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": null + } + ], "type": "Mutation", "abstractKey": null }, @@ -87,19 +124,56 @@ return { "argumentDefinitions": (v0/*: any*/), "kind": "Operation", "name": "useRequestAccessCallback_reportMutation", - "selections": (v1/*: any*/) + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "RequestReportAccessPayload", + "kind": "LinkedField", + "name": "requestReportAccess", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Audit", + "kind": "LinkedField", + "name": "audit", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Report", + "kind": "LinkedField", + "name": "report", + "plural": false, + "selections": [ + (v3/*: any*/), + (v2/*: any*/) + ], + "storageKey": null + }, + (v2/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] }, "params": { - "cacheID": "c859384ca219b8302245e0bed292e698", + "cacheID": "82539e9ad64aa2bd9e5bd2cac4597f23", "id": null, "metadata": {}, "name": "useRequestAccessCallback_reportMutation", "operationKind": "mutation", - "text": "mutation useRequestAccessCallback_reportMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n trustCenterAccess {\n id\n }\n }\n}\n" + "text": "mutation useRequestAccessCallback_reportMutation(\n $input: RequestReportAccessInput!\n) {\n requestReportAccess(input: $input) {\n audit {\n report {\n access {\n id\n status\n }\n id\n }\n id\n }\n }\n}\n" } }; })(); -(node as any).hash = "6ad61c2f6638f5d31c9c25b0044f080a"; +(node as any).hash = "6b07d19642a0227f76f81bb64dac82ea"; export default node; diff --git a/apps/trust/src/hooks/useRequestAccessCallback.ts b/apps/trust/src/hooks/useRequestAccessCallback.ts index 9e0a6af8e..92d53ff1e 100644 --- a/apps/trust/src/hooks/useRequestAccessCallback.ts +++ b/apps/trust/src/hooks/useRequestAccessCallback.ts @@ -3,7 +3,7 @@ import { useTranslate } from "@probo/i18n"; import { useToast } from "@probo/ui"; import { useEffect } from "react"; import { useMutation } from "react-relay"; -import { useSearchParams } from "react-router"; +import { useLocation, useSearchParams } from "react-router"; import { graphql } from "relay-runtime"; import type { useRequestAccessCallback_allMutation } from "./__generated__/useRequestAccessCallback_allMutation.graphql"; @@ -16,8 +16,11 @@ const documentMutation = graphql` $input: RequestDocumentAccessInput! ) { requestDocumentAccess(input: $input) { - trustCenterAccess { - id + document { + access { + id + status + } } } } @@ -28,8 +31,13 @@ const reportMutation = graphql` $input: RequestReportAccessInput! ) { requestReportAccess(input: $input) { - trustCenterAccess { - id + audit { + report { + access { + id + status + } + } } } } @@ -40,8 +48,11 @@ const fileMutation = graphql` $input: RequestTrustCenterFileAccessInput! ) { requestTrustCenterFileAccess(input: $input) { - trustCenterAccess { - id + file { + access { + id + status + } } } } @@ -75,6 +86,7 @@ function successToastArgs(__: (s: string) => string) { export function useRequestAccessCallback() { const [searchParams, setSearchParams] = useSearchParams(); + const location = useLocation(); const documentId = searchParams.get("request-document-id"); const reportId = searchParams.get("request-report-id"); @@ -173,6 +185,7 @@ export function useRequestAccessCallback() { toast(successToastArgs(__)); searchParams.delete("request-all"); setSearchParams(searchParams); + window.location.href = location.pathname; }, onError: (error) => { toast(errorToastArgs(__, error)); @@ -194,5 +207,6 @@ export function useRequestAccessCallback() { searchParams, setSearchParams, toast, + location, ]); } diff --git a/apps/trust/src/queries/__generated__/TrustGraphCurrentDocumentsQuery.graphql.ts b/apps/trust/src/queries/__generated__/TrustGraphCurrentDocumentsQuery.graphql.ts index 4539fcd6e..f173a4ff0 100644 --- a/apps/trust/src/queries/__generated__/TrustGraphCurrentDocumentsQuery.graphql.ts +++ b/apps/trust/src/queries/__generated__/TrustGraphCurrentDocumentsQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<<49da700d766fbc346562bd5c8ec01ade>> * @lightSyntaxTransform * @nogrep */ @@ -89,8 +89,20 @@ v5 = { v6 = { "alias": null, "args": null, - "kind": "ScalarField", - "name": "hasUserRequestedAccess", + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v0/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "status", + "storageKey": null + } + ], "storageKey": null }; return { @@ -324,12 +336,12 @@ return { ] }, "params": { - "cacheID": "c9c4cb18da98c40646fbbe21c2c5b46f", + "cacheID": "479815df76932e5e2a6c57f97efdd029", "id": null, "metadata": {}, "name": "TrustGraphCurrentDocumentsQuery", "operationKind": "query", - "text": "query TrustGraphCurrentDocumentsQuery {\n currentTrustCenter {\n id\n organization {\n name\n id\n }\n documents(first: 50) {\n edges {\n node {\n id\n documentType\n ...DocumentRowFragment\n }\n }\n }\n trustCenterFiles(first: 50) {\n edges {\n node {\n id\n category\n ...TrustCenterFileRowFragment\n }\n }\n }\n }\n}\n\nfragment DocumentRowFragment on Document {\n id\n title\n isUserAuthorized\n hasUserRequestedAccess\n}\n\nfragment TrustCenterFileRowFragment on TrustCenterFile {\n id\n name\n isUserAuthorized\n hasUserRequestedAccess\n}\n" + "text": "query TrustGraphCurrentDocumentsQuery {\n currentTrustCenter {\n id\n organization {\n name\n id\n }\n documents(first: 50) {\n edges {\n node {\n id\n documentType\n ...DocumentRowFragment\n }\n }\n }\n trustCenterFiles(first: 50) {\n edges {\n node {\n id\n category\n ...TrustCenterFileRowFragment\n }\n }\n }\n }\n}\n\nfragment DocumentRowFragment on Document {\n id\n title\n isUserAuthorized\n access {\n id\n status\n }\n}\n\nfragment TrustCenterFileRowFragment on TrustCenterFile {\n id\n name\n isUserAuthorized\n access {\n id\n status\n }\n}\n" } }; })(); diff --git a/apps/trust/src/queries/__generated__/TrustGraphCurrentQuery.graphql.ts b/apps/trust/src/queries/__generated__/TrustGraphCurrentQuery.graphql.ts index d0b920fa9..9613281c9 100644 --- a/apps/trust/src/queries/__generated__/TrustGraphCurrentQuery.graphql.ts +++ b/apps/trust/src/queries/__generated__/TrustGraphCurrentQuery.graphql.ts @@ -1,5 +1,5 @@ /** - * @generated SignedSource<> + * @generated SignedSource<<47a6e80d3532b4c93d18495c2be7676d>> * @lightSyntaxTransform * @nogrep */ @@ -184,8 +184,14 @@ v15 = { v16 = { "alias": null, "args": null, - "kind": "ScalarField", - "name": "hasUserRequestedAccess", + "concreteType": "DocumentAccess", + "kind": "LinkedField", + "name": "access", + "plural": false, + "selections": [ + (v0/*: any*/), + (v6/*: any*/) + ], "storageKey": null }; return { @@ -648,12 +654,12 @@ return { ] }, "params": { - "cacheID": "442afcae5b414e0130cd702cf01f5c63", + "cacheID": "42b477429f092f97b0f444433a78c6d1", "id": null, "metadata": {}, "name": "TrustGraphCurrentQuery", "operationKind": "query", - "text": "query TrustGraphCurrentQuery {\n currentTrustCenter {\n id\n slug\n logoFileUrl\n darkLogoFileUrl\n nonDisclosureAgreement {\n fileName\n fileUrl\n viewerSignature {\n status\n id\n }\n }\n organization {\n name\n description\n websiteUrl\n email\n headquarterAddress\n id\n }\n ...OverviewPageFragment\n vendorInfo: vendors(first: 0) {\n totalCount\n }\n audits(first: 50) {\n edges {\n node {\n id\n ...AuditRowFragment\n }\n }\n }\n }\n}\n\nfragment AuditRowFragment on Audit {\n name\n report {\n id\n filename\n isUserAuthorized\n hasUserRequestedAccess\n }\n framework {\n id\n name\n lightLogoURL\n darkLogoURL\n }\n}\n\nfragment DocumentRowFragment on Document {\n id\n title\n isUserAuthorized\n hasUserRequestedAccess\n}\n\nfragment OverviewPageFragment on TrustCenter {\n references(first: 14) {\n edges {\n node {\n id\n name\n logoUrl\n websiteUrl\n }\n }\n }\n vendors(first: 3) {\n edges {\n node {\n id\n countries\n ...VendorRowFragment\n }\n }\n }\n documents(first: 5) {\n edges {\n node {\n id\n ...DocumentRowFragment\n documentType\n }\n }\n }\n trustCenterFiles(first: 5) {\n edges {\n node {\n id\n category\n ...TrustCenterFileRowFragment\n }\n }\n }\n}\n\nfragment TrustCenterFileRowFragment on TrustCenterFile {\n id\n name\n isUserAuthorized\n hasUserRequestedAccess\n}\n\nfragment VendorRowFragment on Vendor {\n name\n description\n websiteUrl\n countries\n}\n" + "text": "query TrustGraphCurrentQuery {\n currentTrustCenter {\n id\n slug\n logoFileUrl\n darkLogoFileUrl\n nonDisclosureAgreement {\n fileName\n fileUrl\n viewerSignature {\n status\n id\n }\n }\n organization {\n name\n description\n websiteUrl\n email\n headquarterAddress\n id\n }\n ...OverviewPageFragment\n vendorInfo: vendors(first: 0) {\n totalCount\n }\n audits(first: 50) {\n edges {\n node {\n id\n ...AuditRowFragment\n }\n }\n }\n }\n}\n\nfragment AuditRowFragment on Audit {\n name\n report {\n id\n filename\n isUserAuthorized\n access {\n id\n status\n }\n }\n framework {\n id\n name\n lightLogoURL\n darkLogoURL\n }\n}\n\nfragment DocumentRowFragment on Document {\n id\n title\n isUserAuthorized\n access {\n id\n status\n }\n}\n\nfragment OverviewPageFragment on TrustCenter {\n references(first: 14) {\n edges {\n node {\n id\n name\n logoUrl\n websiteUrl\n }\n }\n }\n vendors(first: 3) {\n edges {\n node {\n id\n countries\n ...VendorRowFragment\n }\n }\n }\n documents(first: 5) {\n edges {\n node {\n id\n ...DocumentRowFragment\n documentType\n }\n }\n }\n trustCenterFiles(first: 5) {\n edges {\n node {\n id\n category\n ...TrustCenterFileRowFragment\n }\n }\n }\n}\n\nfragment TrustCenterFileRowFragment on TrustCenterFile {\n id\n name\n isUserAuthorized\n access {\n id\n status\n }\n}\n\nfragment VendorRowFragment on Vendor {\n name\n description\n websiteUrl\n countries\n}\n" } }; })(); diff --git a/pkg/server/api/trust/v1/schema.graphql b/pkg/server/api/trust/v1/schema.graphql index 317e22cc9..cca3aa901 100644 --- a/pkg/server/api/trust/v1/schema.graphql +++ b/pkg/server/api/trust/v1/schema.graphql @@ -63,7 +63,7 @@ type Document implements Node @nda { title: String! documentType: DocumentType! isUserAuthorized: Boolean! @goField(forceResolver: true) - hasUserRequestedAccess: Boolean! @goField(forceResolver: true) + access: DocumentAccess @goField(forceResolver: true) } type DocumentConnection @nda { @@ -87,7 +87,7 @@ type Report implements Node @nda { id: ID! filename: String! isUserAuthorized: Boolean! @goField(forceResolver: true) - hasUserRequestedAccess: Boolean! @goField(forceResolver: true) + access: DocumentAccess @goField(forceResolver: true) } type Audit implements Node @nda { @@ -478,7 +478,7 @@ type TrustCenterFile implements Node @nda { name: String! category: String! isUserAuthorized: Boolean! @goField(forceResolver: true) - hasUserRequestedAccess: Boolean! @goField(forceResolver: true) + access: DocumentAccess @goField(forceResolver: true) } type TrustCenterFileConnection @nda { @@ -552,6 +552,33 @@ type TrustCenterAccess implements Node { updatedAt: Datetime! } +enum DocumentAccessStatus + @goModel( + model: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatus" + ) { + REQUESTED + @goEnum( + value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRequested" + ) + GRANTED + @goEnum( + value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusGranted" + ) + REJECTED + @goEnum( + value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRejected" + ) + REVOKED + @goEnum( + value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRevoked" + ) +} + +type DocumentAccess implements Node { + id: ID! + status: DocumentAccessStatus! +} + input SendMagicLinkInput { email: EmailAddr! continue: String @@ -569,6 +596,18 @@ type VerifyMagicLinkPayload { continue: String } +type RequestDocumentAccessPayload { + document: Document +} + +type RequestReportAccessPayload { + audit: Audit +} + +type RequestFileAccessPayload { + file: TrustCenterFile +} + type RequestAccessesPayload { trustCenterAccess: TrustCenterAccess! } @@ -772,15 +811,15 @@ type Mutation { requestDocumentAccess( input: RequestDocumentAccessInput! - ): RequestAccessesPayload! @session(required: PRESENT) @nda + ): RequestDocumentAccessPayload! @session(required: PRESENT) @nda requestReportAccess( input: RequestReportAccessInput! - ): RequestAccessesPayload! @session(required: PRESENT) @nda + ): RequestReportAccessPayload! @session(required: PRESENT) @nda requestTrustCenterFileAccess( input: RequestTrustCenterFileAccessInput! - ): RequestAccessesPayload! @session(required: PRESENT) @nda + ): RequestFileAccessPayload! @session(required: PRESENT) @nda acceptElectronicSignature( input: AcceptElectronicSignatureInput! diff --git a/pkg/server/api/trust/v1/schema/schema.go b/pkg/server/api/trust/v1/schema/schema.go index dd8cb1d91..e5d76e497 100644 --- a/pkg/server/api/trust/v1/schema/schema.go +++ b/pkg/server/api/trust/v1/schema/schema.go @@ -78,11 +78,16 @@ type ComplexityRoot struct { } Document struct { - DocumentType func(childComplexity int) int - HasUserRequestedAccess func(childComplexity int) int - ID func(childComplexity int) int - IsUserAuthorized func(childComplexity int) int - Title func(childComplexity int) int + Access func(childComplexity int) int + DocumentType func(childComplexity int) int + ID func(childComplexity int) int + IsUserAuthorized func(childComplexity int) int + Title func(childComplexity int) int + } + + DocumentAccess struct { + ID func(childComplexity int) int + Status func(childComplexity int) int } DocumentConnection struct { @@ -182,16 +187,28 @@ type ComplexityRoot struct { } Report struct { - Filename func(childComplexity int) int - HasUserRequestedAccess func(childComplexity int) int - ID func(childComplexity int) int - IsUserAuthorized func(childComplexity int) int + Access func(childComplexity int) int + Filename func(childComplexity int) int + ID func(childComplexity int) int + IsUserAuthorized func(childComplexity int) int } RequestAccessesPayload struct { TrustCenterAccess func(childComplexity int) int } + RequestDocumentAccessPayload struct { + Document func(childComplexity int) int + } + + RequestFileAccessPayload struct { + File func(childComplexity int) int + } + + RequestReportAccessPayload struct { + Audit func(childComplexity int) int + } + SendMagicLinkPayload struct { Success func(childComplexity int) int } @@ -220,11 +237,11 @@ type ComplexityRoot struct { } TrustCenterFile struct { - Category func(childComplexity int) int - HasUserRequestedAccess func(childComplexity int) int - ID func(childComplexity int) int - IsUserAuthorized func(childComplexity int) int - Name func(childComplexity int) int + Access func(childComplexity int) int + Category func(childComplexity int) int + ID func(childComplexity int) int + IsUserAuthorized func(childComplexity int) int + Name func(childComplexity int) int } TrustCenterFileConnection struct { @@ -287,7 +304,7 @@ type AuditResolver interface { } type DocumentResolver interface { IsUserAuthorized(ctx context.Context, obj *types.Document) (bool, error) - HasUserRequestedAccess(ctx context.Context, obj *types.Document) (bool, error) + Access(ctx context.Context, obj *types.Document) (*types.DocumentAccess, error) } type FrameworkResolver interface { LightLogoURL(ctx context.Context, obj *types.Framework) (*string, error) @@ -300,9 +317,9 @@ type MutationResolver interface { ExportDocumentPDF(ctx context.Context, input types.ExportDocumentPDFInput) (*types.ExportDocumentPDFPayload, error) ExportReportPDF(ctx context.Context, input types.ExportReportPDFInput) (*types.ExportReportPDFPayload, error) ExportTrustCenterFile(ctx context.Context, input types.ExportTrustCenterFileInput) (*types.ExportTrustCenterFilePayload, error) - RequestDocumentAccess(ctx context.Context, input types.RequestDocumentAccessInput) (*types.RequestAccessesPayload, error) - RequestReportAccess(ctx context.Context, input types.RequestReportAccessInput) (*types.RequestAccessesPayload, error) - RequestTrustCenterFileAccess(ctx context.Context, input types.RequestTrustCenterFileAccessInput) (*types.RequestAccessesPayload, error) + RequestDocumentAccess(ctx context.Context, input types.RequestDocumentAccessInput) (*types.RequestDocumentAccessPayload, error) + RequestReportAccess(ctx context.Context, input types.RequestReportAccessInput) (*types.RequestReportAccessPayload, error) + RequestTrustCenterFileAccess(ctx context.Context, input types.RequestTrustCenterFileAccessInput) (*types.RequestFileAccessPayload, error) AcceptElectronicSignature(ctx context.Context, input types.AcceptElectronicSignatureInput) (*types.AcceptElectronicSignaturePayload, error) RecordSigningEvent(ctx context.Context, input types.RecordSigningEventInput) (*types.RecordSigningEventPayload, error) } @@ -320,7 +337,7 @@ type QueryResolver interface { } type ReportResolver interface { IsUserAuthorized(ctx context.Context, obj *types.Report) (bool, error) - HasUserRequestedAccess(ctx context.Context, obj *types.Report) (bool, error) + Access(ctx context.Context, obj *types.Report) (*types.DocumentAccess, error) } type TrustCenterResolver interface { LogoFileURL(ctx context.Context, obj *types.TrustCenter) (*string, error) @@ -335,7 +352,7 @@ type TrustCenterResolver interface { } type TrustCenterFileResolver interface { IsUserAuthorized(ctx context.Context, obj *types.TrustCenterFile) (bool, error) - HasUserRequestedAccess(ctx context.Context, obj *types.TrustCenterFile) (bool, error) + Access(ctx context.Context, obj *types.TrustCenterFile) (*types.DocumentAccess, error) } type TrustCenterReferenceResolver interface { LogoURL(ctx context.Context, obj *types.TrustCenterReference) (string, error) @@ -416,18 +433,18 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.ComplexityRoot.AuditEdge.Node(childComplexity), true + case "Document.access": + if e.ComplexityRoot.Document.Access == nil { + break + } + + return e.ComplexityRoot.Document.Access(childComplexity), true case "Document.documentType": if e.ComplexityRoot.Document.DocumentType == nil { break } return e.ComplexityRoot.Document.DocumentType(childComplexity), true - case "Document.hasUserRequestedAccess": - if e.ComplexityRoot.Document.HasUserRequestedAccess == nil { - break - } - - return e.ComplexityRoot.Document.HasUserRequestedAccess(childComplexity), true case "Document.id": if e.ComplexityRoot.Document.ID == nil { break @@ -447,6 +464,19 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.ComplexityRoot.Document.Title(childComplexity), true + case "DocumentAccess.id": + if e.ComplexityRoot.DocumentAccess.ID == nil { + break + } + + return e.ComplexityRoot.DocumentAccess.ID(childComplexity), true + case "DocumentAccess.status": + if e.ComplexityRoot.DocumentAccess.Status == nil { + break + } + + return e.ComplexityRoot.DocumentAccess.Status(childComplexity), true + case "DocumentConnection.edges": if e.ComplexityRoot.DocumentConnection.Edges == nil { break @@ -841,18 +871,18 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.ComplexityRoot.RecordSigningEventPayload.Success(childComplexity), true + case "Report.access": + if e.ComplexityRoot.Report.Access == nil { + break + } + + return e.ComplexityRoot.Report.Access(childComplexity), true case "Report.filename": if e.ComplexityRoot.Report.Filename == nil { break } return e.ComplexityRoot.Report.Filename(childComplexity), true - case "Report.hasUserRequestedAccess": - if e.ComplexityRoot.Report.HasUserRequestedAccess == nil { - break - } - - return e.ComplexityRoot.Report.HasUserRequestedAccess(childComplexity), true case "Report.id": if e.ComplexityRoot.Report.ID == nil { break @@ -873,6 +903,27 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.ComplexityRoot.RequestAccessesPayload.TrustCenterAccess(childComplexity), true + case "RequestDocumentAccessPayload.document": + if e.ComplexityRoot.RequestDocumentAccessPayload.Document == nil { + break + } + + return e.ComplexityRoot.RequestDocumentAccessPayload.Document(childComplexity), true + + case "RequestFileAccessPayload.file": + if e.ComplexityRoot.RequestFileAccessPayload.File == nil { + break + } + + return e.ComplexityRoot.RequestFileAccessPayload.File(childComplexity), true + + case "RequestReportAccessPayload.audit": + if e.ComplexityRoot.RequestReportAccessPayload.Audit == nil { + break + } + + return e.ComplexityRoot.RequestReportAccessPayload.Audit(childComplexity), true + case "SendMagicLinkPayload.success": if e.ComplexityRoot.SendMagicLinkPayload.Success == nil { break @@ -1009,18 +1060,18 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin return e.ComplexityRoot.TrustCenterAccess.UpdatedAt(childComplexity), true + case "TrustCenterFile.access": + if e.ComplexityRoot.TrustCenterFile.Access == nil { + break + } + + return e.ComplexityRoot.TrustCenterFile.Access(childComplexity), true case "TrustCenterFile.category": if e.ComplexityRoot.TrustCenterFile.Category == nil { break } return e.ComplexityRoot.TrustCenterFile.Category(childComplexity), true - case "TrustCenterFile.hasUserRequestedAccess": - if e.ComplexityRoot.TrustCenterFile.HasUserRequestedAccess == nil { - break - } - - return e.ComplexityRoot.TrustCenterFile.HasUserRequestedAccess(childComplexity), true case "TrustCenterFile.id": if e.ComplexityRoot.TrustCenterFile.ID == nil { break @@ -1363,7 +1414,7 @@ type Document implements Node @nda { title: String! documentType: DocumentType! isUserAuthorized: Boolean! @goField(forceResolver: true) - hasUserRequestedAccess: Boolean! @goField(forceResolver: true) + access: DocumentAccess @goField(forceResolver: true) } type DocumentConnection @nda { @@ -1387,7 +1438,7 @@ type Report implements Node @nda { id: ID! filename: String! isUserAuthorized: Boolean! @goField(forceResolver: true) - hasUserRequestedAccess: Boolean! @goField(forceResolver: true) + access: DocumentAccess @goField(forceResolver: true) } type Audit implements Node @nda { @@ -1778,7 +1829,7 @@ type TrustCenterFile implements Node @nda { name: String! category: String! isUserAuthorized: Boolean! @goField(forceResolver: true) - hasUserRequestedAccess: Boolean! @goField(forceResolver: true) + access: DocumentAccess @goField(forceResolver: true) } type TrustCenterFileConnection @nda { @@ -1852,6 +1903,33 @@ type TrustCenterAccess implements Node { updatedAt: Datetime! } +enum DocumentAccessStatus + @goModel( + model: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatus" + ) { + REQUESTED + @goEnum( + value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRequested" + ) + GRANTED + @goEnum( + value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusGranted" + ) + REJECTED + @goEnum( + value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRejected" + ) + REVOKED + @goEnum( + value: "go.probo.inc/probo/pkg/coredata.TrustCenterDocumentAccessStatusRevoked" + ) +} + +type DocumentAccess implements Node { + id: ID! + status: DocumentAccessStatus! +} + input SendMagicLinkInput { email: EmailAddr! continue: String @@ -1869,6 +1947,18 @@ type VerifyMagicLinkPayload { continue: String } +type RequestDocumentAccessPayload { + document: Document +} + +type RequestReportAccessPayload { + audit: Audit +} + +type RequestFileAccessPayload { + file: TrustCenterFile +} + type RequestAccessesPayload { trustCenterAccess: TrustCenterAccess! } @@ -2072,15 +2162,15 @@ type Mutation { requestDocumentAccess( input: RequestDocumentAccessInput! - ): RequestAccessesPayload! @session(required: PRESENT) @nda + ): RequestDocumentAccessPayload! @session(required: PRESENT) @nda requestReportAccess( input: RequestReportAccessInput! - ): RequestAccessesPayload! @session(required: PRESENT) @nda + ): RequestReportAccessPayload! @session(required: PRESENT) @nda requestTrustCenterFileAccess( input: RequestTrustCenterFileAccessInput! - ): RequestAccessesPayload! @session(required: PRESENT) @nda + ): RequestFileAccessPayload! @session(required: PRESENT) @nda acceptElectronicSignature( input: AcceptElectronicSignatureInput! @@ -2662,8 +2752,8 @@ func (ec *executionContext) fieldContext_Audit_report(_ context.Context, field g return ec.fieldContext_Report_filename(ctx, field) case "isUserAuthorized": return ec.fieldContext_Report_isUserAuthorized(ctx, field) - case "hasUserRequestedAccess": - return ec.fieldContext_Report_hasUserRequestedAccess(ctx, field) + case "access": + return ec.fieldContext_Report_access(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type Report", field.Name) }, @@ -2955,30 +3045,94 @@ func (ec *executionContext) fieldContext_Document_isUserAuthorized(_ context.Con return fc, nil } -func (ec *executionContext) _Document_hasUserRequestedAccess(ctx context.Context, field graphql.CollectedField, obj *types.Document) (ret graphql.Marshaler) { +func (ec *executionContext) _Document_access(ctx context.Context, field graphql.CollectedField, obj *types.Document) (ret graphql.Marshaler) { return graphql.ResolveField( ctx, ec.OperationContext, field, - ec.fieldContext_Document_hasUserRequestedAccess, + ec.fieldContext_Document_access, func(ctx context.Context) (any, error) { - return ec.Resolvers.Document().HasUserRequestedAccess(ctx, obj) + return ec.Resolvers.Document().Access(ctx, obj) }, nil, - ec.marshalNBoolean2bool, - true, + ec.marshalODocumentAccess2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐDocumentAccess, true, + false, ) } -func (ec *executionContext) fieldContext_Document_hasUserRequestedAccess(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Document_access(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Document", Field: field, IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") + switch field.Name { + case "id": + return ec.fieldContext_DocumentAccess_id(ctx, field) + case "status": + return ec.fieldContext_DocumentAccess_status(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type DocumentAccess", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) _DocumentAccess_id(ctx context.Context, field graphql.CollectedField, obj *types.DocumentAccess) (ret graphql.Marshaler) { + return graphql.ResolveField( + ctx, + ec.OperationContext, + field, + ec.fieldContext_DocumentAccess_id, + func(ctx context.Context) (any, error) { + return obj.ID, nil + }, + nil, + ec.marshalNID2goᚗproboᚗincᚋproboᚋpkgᚋgidᚐGID, + true, + true, + ) +} + +func (ec *executionContext) fieldContext_DocumentAccess_id(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "DocumentAccess", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type ID does not have child fields") + }, + } + return fc, nil +} + +func (ec *executionContext) _DocumentAccess_status(ctx context.Context, field graphql.CollectedField, obj *types.DocumentAccess) (ret graphql.Marshaler) { + return graphql.ResolveField( + ctx, + ec.OperationContext, + field, + ec.fieldContext_DocumentAccess_status, + func(ctx context.Context) (any, error) { + return obj.Status, nil + }, + nil, + ec.marshalNDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus, + true, + true, + ) +} + +func (ec *executionContext) fieldContext_DocumentAccess_status(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "DocumentAccess", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type DocumentAccessStatus does not have child fields") }, } return fc, nil @@ -3145,8 +3299,8 @@ func (ec *executionContext) fieldContext_DocumentEdge_node(_ context.Context, fi return ec.fieldContext_Document_documentType(ctx, field) case "isUserAuthorized": return ec.fieldContext_Document_isUserAuthorized(ctx, field) - case "hasUserRequestedAccess": - return ec.fieldContext_Document_hasUserRequestedAccess(ctx, field) + case "access": + return ec.fieldContext_Document_access(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type Document", field.Name) }, @@ -4173,18 +4327,18 @@ func (ec *executionContext) _Mutation_requestDocumentAccess(ctx context.Context, directive1 := func(ctx context.Context) (any, error) { required, err := ec.unmarshalNSessionRequirement2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋgqlutilsᚋdirectivesᚋsessionᚐSessionRequirement(ctx, "PRESENT") if err != nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestDocumentAccessPayload return zeroVal, err } if ec.Directives.Session == nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestDocumentAccessPayload return zeroVal, errors.New("directive session is not implemented") } return ec.Directives.Session(ctx, nil, directive0, required) } directive2 := func(ctx context.Context) (any, error) { if ec.Directives.Nda == nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestDocumentAccessPayload return zeroVal, errors.New("directive nda is not implemented") } return ec.Directives.Nda(ctx, nil, directive1) @@ -4193,7 +4347,7 @@ func (ec *executionContext) _Mutation_requestDocumentAccess(ctx context.Context, next = directive2 return next }, - ec.marshalNRequestAccessesPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestAccessesPayload, + ec.marshalNRequestDocumentAccessPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestDocumentAccessPayload, true, true, ) @@ -4207,10 +4361,10 @@ func (ec *executionContext) fieldContext_Mutation_requestDocumentAccess(ctx cont IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "trustCenterAccess": - return ec.fieldContext_RequestAccessesPayload_trustCenterAccess(ctx, field) + case "document": + return ec.fieldContext_RequestDocumentAccessPayload_document(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type RequestAccessesPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type RequestDocumentAccessPayload", field.Name) }, } defer func() { @@ -4243,18 +4397,18 @@ func (ec *executionContext) _Mutation_requestReportAccess(ctx context.Context, f directive1 := func(ctx context.Context) (any, error) { required, err := ec.unmarshalNSessionRequirement2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋgqlutilsᚋdirectivesᚋsessionᚐSessionRequirement(ctx, "PRESENT") if err != nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestReportAccessPayload return zeroVal, err } if ec.Directives.Session == nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestReportAccessPayload return zeroVal, errors.New("directive session is not implemented") } return ec.Directives.Session(ctx, nil, directive0, required) } directive2 := func(ctx context.Context) (any, error) { if ec.Directives.Nda == nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestReportAccessPayload return zeroVal, errors.New("directive nda is not implemented") } return ec.Directives.Nda(ctx, nil, directive1) @@ -4263,7 +4417,7 @@ func (ec *executionContext) _Mutation_requestReportAccess(ctx context.Context, f next = directive2 return next }, - ec.marshalNRequestAccessesPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestAccessesPayload, + ec.marshalNRequestReportAccessPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestReportAccessPayload, true, true, ) @@ -4277,10 +4431,10 @@ func (ec *executionContext) fieldContext_Mutation_requestReportAccess(ctx contex IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "trustCenterAccess": - return ec.fieldContext_RequestAccessesPayload_trustCenterAccess(ctx, field) + case "audit": + return ec.fieldContext_RequestReportAccessPayload_audit(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type RequestAccessesPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type RequestReportAccessPayload", field.Name) }, } defer func() { @@ -4313,18 +4467,18 @@ func (ec *executionContext) _Mutation_requestTrustCenterFileAccess(ctx context.C directive1 := func(ctx context.Context) (any, error) { required, err := ec.unmarshalNSessionRequirement2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋgqlutilsᚋdirectivesᚋsessionᚐSessionRequirement(ctx, "PRESENT") if err != nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestFileAccessPayload return zeroVal, err } if ec.Directives.Session == nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestFileAccessPayload return zeroVal, errors.New("directive session is not implemented") } return ec.Directives.Session(ctx, nil, directive0, required) } directive2 := func(ctx context.Context) (any, error) { if ec.Directives.Nda == nil { - var zeroVal *types.RequestAccessesPayload + var zeroVal *types.RequestFileAccessPayload return zeroVal, errors.New("directive nda is not implemented") } return ec.Directives.Nda(ctx, nil, directive1) @@ -4333,7 +4487,7 @@ func (ec *executionContext) _Mutation_requestTrustCenterFileAccess(ctx context.C next = directive2 return next }, - ec.marshalNRequestAccessesPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestAccessesPayload, + ec.marshalNRequestFileAccessPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestFileAccessPayload, true, true, ) @@ -4347,10 +4501,10 @@ func (ec *executionContext) fieldContext_Mutation_requestTrustCenterFileAccess(c IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { switch field.Name { - case "trustCenterAccess": - return ec.fieldContext_RequestAccessesPayload_trustCenterAccess(ctx, field) + case "file": + return ec.fieldContext_RequestFileAccessPayload_file(ctx, field) } - return nil, fmt.Errorf("no field named %q was found under type RequestAccessesPayload", field.Name) + return nil, fmt.Errorf("no field named %q was found under type RequestFileAccessPayload", field.Name) }, } defer func() { @@ -5280,30 +5434,36 @@ func (ec *executionContext) fieldContext_Report_isUserAuthorized(_ context.Conte return fc, nil } -func (ec *executionContext) _Report_hasUserRequestedAccess(ctx context.Context, field graphql.CollectedField, obj *types.Report) (ret graphql.Marshaler) { +func (ec *executionContext) _Report_access(ctx context.Context, field graphql.CollectedField, obj *types.Report) (ret graphql.Marshaler) { return graphql.ResolveField( ctx, ec.OperationContext, field, - ec.fieldContext_Report_hasUserRequestedAccess, + ec.fieldContext_Report_access, func(ctx context.Context) (any, error) { - return ec.Resolvers.Report().HasUserRequestedAccess(ctx, obj) + return ec.Resolvers.Report().Access(ctx, obj) }, nil, - ec.marshalNBoolean2bool, - true, + ec.marshalODocumentAccess2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐDocumentAccess, true, + false, ) } -func (ec *executionContext) fieldContext_Report_hasUserRequestedAccess(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_Report_access(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "Report", Field: field, IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") + switch field.Name { + case "id": + return ec.fieldContext_DocumentAccess_id(ctx, field) + case "status": + return ec.fieldContext_DocumentAccess_status(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type DocumentAccess", field.Name) }, } return fc, nil @@ -5350,6 +5510,166 @@ func (ec *executionContext) fieldContext_RequestAccessesPayload_trustCenterAcces return fc, nil } +func (ec *executionContext) _RequestDocumentAccessPayload_document(ctx context.Context, field graphql.CollectedField, obj *types.RequestDocumentAccessPayload) (ret graphql.Marshaler) { + return graphql.ResolveField( + ctx, + ec.OperationContext, + field, + ec.fieldContext_RequestDocumentAccessPayload_document, + func(ctx context.Context) (any, error) { + return obj.Document, nil + }, + func(ctx context.Context, next graphql.Resolver) graphql.Resolver { + directive0 := next + + directive1 := func(ctx context.Context) (any, error) { + if ec.Directives.Nda == nil { + var zeroVal *types.Document + return zeroVal, errors.New("directive nda is not implemented") + } + return ec.Directives.Nda(ctx, obj, directive0) + } + + next = directive1 + return next + }, + ec.marshalODocument2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐDocument, + true, + false, + ) +} + +func (ec *executionContext) fieldContext_RequestDocumentAccessPayload_document(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "RequestDocumentAccessPayload", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_Document_id(ctx, field) + case "title": + return ec.fieldContext_Document_title(ctx, field) + case "documentType": + return ec.fieldContext_Document_documentType(ctx, field) + case "isUserAuthorized": + return ec.fieldContext_Document_isUserAuthorized(ctx, field) + case "access": + return ec.fieldContext_Document_access(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Document", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) _RequestFileAccessPayload_file(ctx context.Context, field graphql.CollectedField, obj *types.RequestFileAccessPayload) (ret graphql.Marshaler) { + return graphql.ResolveField( + ctx, + ec.OperationContext, + field, + ec.fieldContext_RequestFileAccessPayload_file, + func(ctx context.Context) (any, error) { + return obj.File, nil + }, + func(ctx context.Context, next graphql.Resolver) graphql.Resolver { + directive0 := next + + directive1 := func(ctx context.Context) (any, error) { + if ec.Directives.Nda == nil { + var zeroVal *types.TrustCenterFile + return zeroVal, errors.New("directive nda is not implemented") + } + return ec.Directives.Nda(ctx, obj, directive0) + } + + next = directive1 + return next + }, + ec.marshalOTrustCenterFile2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐTrustCenterFile, + true, + false, + ) +} + +func (ec *executionContext) fieldContext_RequestFileAccessPayload_file(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "RequestFileAccessPayload", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_TrustCenterFile_id(ctx, field) + case "name": + return ec.fieldContext_TrustCenterFile_name(ctx, field) + case "category": + return ec.fieldContext_TrustCenterFile_category(ctx, field) + case "isUserAuthorized": + return ec.fieldContext_TrustCenterFile_isUserAuthorized(ctx, field) + case "access": + return ec.fieldContext_TrustCenterFile_access(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type TrustCenterFile", field.Name) + }, + } + return fc, nil +} + +func (ec *executionContext) _RequestReportAccessPayload_audit(ctx context.Context, field graphql.CollectedField, obj *types.RequestReportAccessPayload) (ret graphql.Marshaler) { + return graphql.ResolveField( + ctx, + ec.OperationContext, + field, + ec.fieldContext_RequestReportAccessPayload_audit, + func(ctx context.Context) (any, error) { + return obj.Audit, nil + }, + func(ctx context.Context, next graphql.Resolver) graphql.Resolver { + directive0 := next + + directive1 := func(ctx context.Context) (any, error) { + if ec.Directives.Nda == nil { + var zeroVal *types.Audit + return zeroVal, errors.New("directive nda is not implemented") + } + return ec.Directives.Nda(ctx, obj, directive0) + } + + next = directive1 + return next + }, + ec.marshalOAudit2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐAudit, + true, + false, + ) +} + +func (ec *executionContext) fieldContext_RequestReportAccessPayload_audit(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "RequestReportAccessPayload", + Field: field, + IsMethod: false, + IsResolver: false, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + switch field.Name { + case "id": + return ec.fieldContext_Audit_id(ctx, field) + case "name": + return ec.fieldContext_Audit_name(ctx, field) + case "framework": + return ec.fieldContext_Audit_framework(ctx, field) + case "report": + return ec.fieldContext_Audit_report(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type Audit", field.Name) + }, + } + return fc, nil +} + func (ec *executionContext) _SendMagicLinkPayload_success(ctx context.Context, field graphql.CollectedField, obj *types.SendMagicLinkPayload) (ret graphql.Marshaler) { return graphql.ResolveField( ctx, @@ -6169,30 +6489,36 @@ func (ec *executionContext) fieldContext_TrustCenterFile_isUserAuthorized(_ cont return fc, nil } -func (ec *executionContext) _TrustCenterFile_hasUserRequestedAccess(ctx context.Context, field graphql.CollectedField, obj *types.TrustCenterFile) (ret graphql.Marshaler) { +func (ec *executionContext) _TrustCenterFile_access(ctx context.Context, field graphql.CollectedField, obj *types.TrustCenterFile) (ret graphql.Marshaler) { return graphql.ResolveField( ctx, ec.OperationContext, field, - ec.fieldContext_TrustCenterFile_hasUserRequestedAccess, + ec.fieldContext_TrustCenterFile_access, func(ctx context.Context) (any, error) { - return ec.Resolvers.TrustCenterFile().HasUserRequestedAccess(ctx, obj) + return ec.Resolvers.TrustCenterFile().Access(ctx, obj) }, nil, - ec.marshalNBoolean2bool, - true, + ec.marshalODocumentAccess2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐDocumentAccess, true, + false, ) } -func (ec *executionContext) fieldContext_TrustCenterFile_hasUserRequestedAccess(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { +func (ec *executionContext) fieldContext_TrustCenterFile_access(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { fc = &graphql.FieldContext{ Object: "TrustCenterFile", Field: field, IsMethod: true, IsResolver: true, Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { - return nil, errors.New("field of type Boolean does not have child fields") + switch field.Name { + case "id": + return ec.fieldContext_DocumentAccess_id(ctx, field) + case "status": + return ec.fieldContext_DocumentAccess_status(ctx, field) + } + return nil, fmt.Errorf("no field named %q was found under type DocumentAccess", field.Name) }, } return fc, nil @@ -6359,8 +6685,8 @@ func (ec *executionContext) fieldContext_TrustCenterFileEdge_node(_ context.Cont return ec.fieldContext_TrustCenterFile_category(ctx, field) case "isUserAuthorized": return ec.fieldContext_TrustCenterFile_isUserAuthorized(ctx, field) - case "hasUserRequestedAccess": - return ec.fieldContext_TrustCenterFile_hasUserRequestedAccess(ctx, field) + case "access": + return ec.fieldContext_TrustCenterFile_access(ctx, field) } return nil, fmt.Errorf("no field named %q was found under type TrustCenterFile", field.Name) }, @@ -8923,6 +9249,13 @@ func (ec *executionContext) _Node(ctx context.Context, sel ast.SelectionSet, obj return graphql.Null } return ec._ElectronicSignature(ctx, sel, obj) + case types.DocumentAccess: + return ec._DocumentAccess(ctx, sel, &obj) + case *types.DocumentAccess: + if obj == nil { + return graphql.Null + } + return ec._DocumentAccess(ctx, sel, obj) case types.Document: return ec._Document(ctx, sel, &obj) case *types.Document: @@ -9249,19 +9582,16 @@ func (ec *executionContext) _Document(ctx context.Context, sel ast.SelectionSet, } out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) - case "hasUserRequestedAccess": + case "access": field := field - innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + innerFunc := func(ctx context.Context, _ *graphql.FieldSet) (res graphql.Marshaler) { defer func() { if r := recover(); r != nil { ec.Error(ctx, ec.Recover(ctx, r)) } }() - res = ec._Document_hasUserRequestedAccess(ctx, field, obj) - if res == graphql.Null { - atomic.AddUint32(&fs.Invalids, 1) - } + res = ec._Document_access(ctx, field, obj) return res } @@ -9308,6 +9638,50 @@ func (ec *executionContext) _Document(ctx context.Context, sel ast.SelectionSet, return out } +var documentAccessImplementors = []string{"DocumentAccess", "Node"} + +func (ec *executionContext) _DocumentAccess(ctx context.Context, sel ast.SelectionSet, obj *types.DocumentAccess) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, documentAccessImplementors) + + 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("DocumentAccess") + case "id": + out.Values[i] = ec._DocumentAccess_id(ctx, field, obj) + if out.Values[i] == graphql.Null { + out.Invalids++ + } + case "status": + out.Values[i] = ec._DocumentAccess_status(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 documentConnectionImplementors = []string{"DocumentConnection"} func (ec *executionContext) _DocumentConnection(ctx context.Context, sel ast.SelectionSet, obj *types.DocumentConnection) graphql.Marshaler { @@ -10309,19 +10683,16 @@ func (ec *executionContext) _Report(ctx context.Context, sel ast.SelectionSet, o } out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) - case "hasUserRequestedAccess": + case "access": field := field - innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + innerFunc := func(ctx context.Context, _ *graphql.FieldSet) (res graphql.Marshaler) { defer func() { if r := recover(); r != nil { ec.Error(ctx, ec.Recover(ctx, r)) } }() - res = ec._Report_hasUserRequestedAccess(ctx, field, obj) - if res == graphql.Null { - atomic.AddUint32(&fs.Invalids, 1) - } + res = ec._Report_access(ctx, field, obj) return res } @@ -10407,6 +10778,114 @@ func (ec *executionContext) _RequestAccessesPayload(ctx context.Context, sel ast return out } +var requestDocumentAccessPayloadImplementors = []string{"RequestDocumentAccessPayload"} + +func (ec *executionContext) _RequestDocumentAccessPayload(ctx context.Context, sel ast.SelectionSet, obj *types.RequestDocumentAccessPayload) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, requestDocumentAccessPayloadImplementors) + + 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("RequestDocumentAccessPayload") + case "document": + out.Values[i] = ec._RequestDocumentAccessPayload_document(ctx, field, obj) + 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 requestFileAccessPayloadImplementors = []string{"RequestFileAccessPayload"} + +func (ec *executionContext) _RequestFileAccessPayload(ctx context.Context, sel ast.SelectionSet, obj *types.RequestFileAccessPayload) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, requestFileAccessPayloadImplementors) + + 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("RequestFileAccessPayload") + case "file": + out.Values[i] = ec._RequestFileAccessPayload_file(ctx, field, obj) + 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 requestReportAccessPayloadImplementors = []string{"RequestReportAccessPayload"} + +func (ec *executionContext) _RequestReportAccessPayload(ctx context.Context, sel ast.SelectionSet, obj *types.RequestReportAccessPayload) graphql.Marshaler { + fields := graphql.CollectFields(ec.OperationContext, sel, requestReportAccessPayloadImplementors) + + 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("RequestReportAccessPayload") + case "audit": + out.Values[i] = ec._RequestReportAccessPayload_audit(ctx, field, obj) + 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 sendMagicLinkPayloadImplementors = []string{"SendMagicLinkPayload"} func (ec *executionContext) _SendMagicLinkPayload(ctx context.Context, sel ast.SelectionSet, obj *types.SendMagicLinkPayload) graphql.Marshaler { @@ -10931,19 +11410,16 @@ func (ec *executionContext) _TrustCenterFile(ctx context.Context, sel ast.Select } out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) - case "hasUserRequestedAccess": + case "access": field := field - innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + innerFunc := func(ctx context.Context, _ *graphql.FieldSet) (res graphql.Marshaler) { defer func() { if r := recover(); r != nil { ec.Error(ctx, ec.Recover(ctx, r)) } }() - res = ec._TrustCenterFile_hasUserRequestedAccess(ctx, field, obj) - if res == graphql.Null { - atomic.AddUint32(&fs.Invalids, 1) - } + res = ec._TrustCenterFile_access(ctx, field, obj) return res } @@ -12474,6 +12950,38 @@ func (ec *executionContext) marshalNDocument2ᚖgoᚗproboᚗincᚋproboᚋpkg return ec._Document(ctx, sel, v) } +func (ec *executionContext) unmarshalNDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus(ctx context.Context, v any) (coredata.TrustCenterDocumentAccessStatus, error) { + tmp, err := graphql.UnmarshalString(v) + res := unmarshalNDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus[tmp] + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalNDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus(ctx context.Context, sel ast.SelectionSet, v coredata.TrustCenterDocumentAccessStatus) graphql.Marshaler { + _ = sel + res := graphql.MarshalString(marshalNDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus[v]) + if res == graphql.Null { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + graphql.AddErrorf(ctx, "the requested element is null which the schema does not allow") + } + } + return res +} + +var ( + unmarshalNDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus = map[string]coredata.TrustCenterDocumentAccessStatus{ + "REQUESTED": coredata.TrustCenterDocumentAccessStatusRequested, + "GRANTED": coredata.TrustCenterDocumentAccessStatusGranted, + "REJECTED": coredata.TrustCenterDocumentAccessStatusRejected, + "REVOKED": coredata.TrustCenterDocumentAccessStatusRevoked, + } + marshalNDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus = map[coredata.TrustCenterDocumentAccessStatus]string{ + coredata.TrustCenterDocumentAccessStatusRequested: "REQUESTED", + coredata.TrustCenterDocumentAccessStatusGranted: "GRANTED", + coredata.TrustCenterDocumentAccessStatusRejected: "REJECTED", + coredata.TrustCenterDocumentAccessStatusRevoked: "REVOKED", + } +) + func (ec *executionContext) marshalNDocumentConnection2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐDocumentConnection(ctx context.Context, sel ast.SelectionSet, v types.DocumentConnection) graphql.Marshaler { return ec._DocumentConnection(ctx, sel, &v) } @@ -12853,11 +13361,53 @@ func (ec *executionContext) unmarshalNRequestDocumentAccessInput2goᚗproboᚗin return res, graphql.ErrorOnPath(ctx, err) } +func (ec *executionContext) marshalNRequestDocumentAccessPayload2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestDocumentAccessPayload(ctx context.Context, sel ast.SelectionSet, v types.RequestDocumentAccessPayload) graphql.Marshaler { + return ec._RequestDocumentAccessPayload(ctx, sel, &v) +} + +func (ec *executionContext) marshalNRequestDocumentAccessPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestDocumentAccessPayload(ctx context.Context, sel ast.SelectionSet, v *types.RequestDocumentAccessPayload) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + graphql.AddErrorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec._RequestDocumentAccessPayload(ctx, sel, v) +} + +func (ec *executionContext) marshalNRequestFileAccessPayload2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestFileAccessPayload(ctx context.Context, sel ast.SelectionSet, v types.RequestFileAccessPayload) graphql.Marshaler { + return ec._RequestFileAccessPayload(ctx, sel, &v) +} + +func (ec *executionContext) marshalNRequestFileAccessPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestFileAccessPayload(ctx context.Context, sel ast.SelectionSet, v *types.RequestFileAccessPayload) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + graphql.AddErrorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec._RequestFileAccessPayload(ctx, sel, v) +} + func (ec *executionContext) unmarshalNRequestReportAccessInput2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestReportAccessInput(ctx context.Context, v any) (types.RequestReportAccessInput, error) { res, err := ec.unmarshalInputRequestReportAccessInput(ctx, v) return res, graphql.ErrorOnPath(ctx, err) } +func (ec *executionContext) marshalNRequestReportAccessPayload2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestReportAccessPayload(ctx context.Context, sel ast.SelectionSet, v types.RequestReportAccessPayload) graphql.Marshaler { + return ec._RequestReportAccessPayload(ctx, sel, &v) +} + +func (ec *executionContext) marshalNRequestReportAccessPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestReportAccessPayload(ctx context.Context, sel ast.SelectionSet, v *types.RequestReportAccessPayload) graphql.Marshaler { + if v == nil { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + graphql.AddErrorf(ctx, "the requested element is null which the schema does not allow") + } + return graphql.Null + } + return ec._RequestReportAccessPayload(ctx, sel, v) +} + func (ec *executionContext) unmarshalNRequestTrustCenterFileAccessInput2goᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐRequestTrustCenterFileAccessInput(ctx context.Context, v any) (types.RequestTrustCenterFileAccessInput, error) { res, err := ec.unmarshalInputRequestTrustCenterFileAccessInput(ctx, v) return res, graphql.ErrorOnPath(ctx, err) @@ -13295,6 +13845,13 @@ func (ec *executionContext) marshalOAcceptElectronicSignaturePayload2ᚖgoᚗpro return ec._AcceptElectronicSignaturePayload(ctx, sel, v) } +func (ec *executionContext) marshalOAudit2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐAudit(ctx context.Context, sel ast.SelectionSet, v *types.Audit) graphql.Marshaler { + if v == nil { + return graphql.Null + } + return ec._Audit(ctx, sel, v) +} + func (ec *executionContext) unmarshalOBoolean2bool(ctx context.Context, v any) (bool, error) { res, err := graphql.UnmarshalBoolean(v) return res, graphql.ErrorOnPath(ctx, err) @@ -13361,6 +13918,20 @@ func (ec *executionContext) marshalODatetime2ᚖtimeᚐTime(ctx context.Context, return res } +func (ec *executionContext) marshalODocument2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐDocument(ctx context.Context, sel ast.SelectionSet, v *types.Document) graphql.Marshaler { + if v == nil { + return graphql.Null + } + return ec._Document(ctx, sel, v) +} + +func (ec *executionContext) marshalODocumentAccess2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐDocumentAccess(ctx context.Context, sel ast.SelectionSet, v *types.DocumentAccess) graphql.Marshaler { + if v == nil { + return graphql.Null + } + return ec._DocumentAccess(ctx, sel, v) +} + func (ec *executionContext) marshalOElectronicSignature2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐElectronicSignature(ctx context.Context, sel ast.SelectionSet, v *types.ElectronicSignature) graphql.Marshaler { if v == nil { return graphql.Null @@ -13482,6 +14053,13 @@ func (ec *executionContext) marshalOTrustCenter2ᚖgoᚗproboᚗincᚋproboᚋpk return ec._TrustCenter(ctx, sel, v) } +func (ec *executionContext) marshalOTrustCenterFile2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐTrustCenterFile(ctx context.Context, sel ast.SelectionSet, v *types.TrustCenterFile) graphql.Marshaler { + if v == nil { + return graphql.Null + } + return ec._TrustCenterFile(ctx, sel, v) +} + func (ec *executionContext) marshalOVerifyMagicLinkPayload2ᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋtrustᚋv1ᚋtypesᚐVerifyMagicLinkPayload(ctx context.Context, sel ast.SelectionSet, v *types.VerifyMagicLinkPayload) graphql.Marshaler { if v == nil { return graphql.Null diff --git a/pkg/server/api/trust/v1/types/types.go b/pkg/server/api/trust/v1/types/types.go index 262f874a7..ebf26698b 100644 --- a/pkg/server/api/trust/v1/types/types.go +++ b/pkg/server/api/trust/v1/types/types.go @@ -46,16 +46,24 @@ type AuditEdge struct { } type Document struct { - ID gid.GID `json:"id"` - Title string `json:"title"` - DocumentType coredata.DocumentType `json:"documentType"` - IsUserAuthorized bool `json:"isUserAuthorized"` - HasUserRequestedAccess bool `json:"hasUserRequestedAccess"` + ID gid.GID `json:"id"` + Title string `json:"title"` + DocumentType coredata.DocumentType `json:"documentType"` + IsUserAuthorized bool `json:"isUserAuthorized"` + Access *DocumentAccess `json:"access,omitempty"` } func (Document) IsNode() {} func (this Document) GetID() gid.GID { return this.ID } +type DocumentAccess struct { + ID gid.GID `json:"id"` + Status coredata.TrustCenterDocumentAccessStatus `json:"status"` +} + +func (DocumentAccess) IsNode() {} +func (this DocumentAccess) GetID() gid.GID { return this.ID } + type DocumentConnection struct { Edges []*DocumentEdge `json:"edges"` PageInfo *PageInfo `json:"pageInfo"` @@ -168,10 +176,10 @@ type RecordSigningEventPayload struct { } type Report struct { - ID gid.GID `json:"id"` - Filename string `json:"filename"` - IsUserAuthorized bool `json:"isUserAuthorized"` - HasUserRequestedAccess bool `json:"hasUserRequestedAccess"` + ID gid.GID `json:"id"` + Filename string `json:"filename"` + IsUserAuthorized bool `json:"isUserAuthorized"` + Access *DocumentAccess `json:"access,omitempty"` } func (Report) IsNode() {} @@ -185,10 +193,22 @@ type RequestDocumentAccessInput struct { DocumentID gid.GID `json:"documentId"` } +type RequestDocumentAccessPayload struct { + Document *Document `json:"document,omitempty"` +} + +type RequestFileAccessPayload struct { + File *TrustCenterFile `json:"file,omitempty"` +} + type RequestReportAccessInput struct { ReportID gid.GID `json:"reportId"` } +type RequestReportAccessPayload struct { + Audit *Audit `json:"audit,omitempty"` +} + type RequestTrustCenterFileAccessInput struct { TrustCenterFileID gid.GID `json:"trustCenterFileId"` } @@ -232,11 +252,11 @@ func (TrustCenterAccess) IsNode() {} func (this TrustCenterAccess) GetID() gid.GID { return this.ID } type TrustCenterFile struct { - ID gid.GID `json:"id"` - Name string `json:"name"` - Category string `json:"category"` - IsUserAuthorized bool `json:"isUserAuthorized"` - HasUserRequestedAccess bool `json:"hasUserRequestedAccess"` + ID gid.GID `json:"id"` + Name string `json:"name"` + Category string `json:"category"` + IsUserAuthorized bool `json:"isUserAuthorized"` + Access *DocumentAccess `json:"access,omitempty"` } func (TrustCenterFile) IsNode() {} diff --git a/pkg/server/api/trust/v1/v1_resolver.go b/pkg/server/api/trust/v1/v1_resolver.go index 3ea9f56a5..a8646fb37 100644 --- a/pkg/server/api/trust/v1/v1_resolver.go +++ b/pkg/server/api/trust/v1/v1_resolver.go @@ -115,30 +115,35 @@ func (r *documentResolver) IsUserAuthorized(ctx context.Context, obj *types.Docu return documentAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil } -// HasUserRequestedAccess is the resolver for the hasUserRequestedAccess field. -func (r *documentResolver) HasUserRequestedAccess(ctx context.Context, obj *types.Document) (bool, error) { +// Access is the resolver for the access field. +func (r *documentResolver) Access(ctx context.Context, obj *types.Document) (*types.DocumentAccess, error) { trustService := r.TrustService(ctx, obj.ID.TenantID()) trustCenter := compliancepage.CompliancePageFromContext(ctx) identity := authn.IdentityFromContext(ctx) if identity == nil { - return false, nil // User is not authenticated, so no access requested + return nil, nil // User is not authenticated, so no access requested } - // Try to load document access - if it exists (regardless of active status), user has requested it - _, err := trustService.TrustCenterAccesses.GetDocumentAccess( + access, err := trustService.TrustCenterAccesses.GetDocumentAccess( ctx, trustCenter.ID, identity.EmailAddress, obj.ID, ) if err != nil { - // FIXME check for not found and return without error in this case - // r.logger.ErrorCtx(ctx, "cannot check trust center file access", log.Error(err)) - // return false, gqlutils.Internal(ctx) - return false, nil + if errors.Is(err, trust.ErrDocumentAccessNotFound) { + return nil, nil + } + + r.logger.ErrorCtx(ctx, "cannot get document access", log.Error(err)) + return nil, gqlutils.Internal(ctx) } - return true, nil // Access exists (requested) + + return &types.DocumentAccess{ + ID: access.ID, + Status: access.Status, + }, nil } // LightLogoURL is the resolver for the lightLogoURL field. @@ -410,7 +415,7 @@ func (r *mutationResolver) ExportTrustCenterFile(ctx context.Context, input type } // RequestDocumentAccess is the resolver for the requestDocumentAccess field. -func (r *mutationResolver) RequestDocumentAccess(ctx context.Context, input types.RequestDocumentAccessInput) (*types.RequestAccessesPayload, error) { +func (r *mutationResolver) RequestDocumentAccess(ctx context.Context, input types.RequestDocumentAccessInput) (*types.RequestDocumentAccessPayload, error) { trustCenter := compliancepage.CompliancePageFromContext(ctx) trustService := r.TrustService(ctx, trustCenter.ID.TenantID()) @@ -431,7 +436,7 @@ func (r *mutationResolver) RequestDocumentAccess(ctx context.Context, input type return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access") } - access, err := trustService.TrustCenterAccesses.Request( + if _, err := trustService.TrustCenterAccesses.Request( ctx, &trust.TrustCenterAccessRequest{ TrustCenterID: trustCenter.ID, @@ -441,25 +446,18 @@ func (r *mutationResolver) RequestDocumentAccess(ctx context.Context, input type ReportIDs: []gid.GID{}, TrustCenterFileIDs: []gid.GID{}, }, - ) - if err != nil { + ); err != nil { r.logger.ErrorCtx(ctx, "cannot request document access", log.Error(err)) return nil, gqlutils.Internal(ctx) } - return &types.RequestAccessesPayload{ - TrustCenterAccess: &types.TrustCenterAccess{ - ID: access.ID, - Email: access.Email, - Name: access.Name, - CreatedAt: access.CreatedAt, - UpdatedAt: access.UpdatedAt, - }, + return &types.RequestDocumentAccessPayload{ + Document: types.NewDocument(document), }, nil } // RequestReportAccess is the resolver for the requestReportAccess field. -func (r *mutationResolver) RequestReportAccess(ctx context.Context, input types.RequestReportAccessInput) (*types.RequestAccessesPayload, error) { +func (r *mutationResolver) RequestReportAccess(ctx context.Context, input types.RequestReportAccessInput) (*types.RequestReportAccessPayload, error) { trustCenter := compliancepage.CompliancePageFromContext(ctx) trustService := r.TrustService(ctx, trustCenter.ID.TenantID()) @@ -481,7 +479,7 @@ func (r *mutationResolver) RequestReportAccess(ctx context.Context, input types. return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access") } - access, err := trustService.TrustCenterAccesses.Request( + if _, err := trustService.TrustCenterAccesses.Request( ctx, &trust.TrustCenterAccessRequest{ TrustCenterID: trustCenter.ID, @@ -491,25 +489,18 @@ func (r *mutationResolver) RequestReportAccess(ctx context.Context, input types. ReportIDs: []gid.GID{input.ReportID}, TrustCenterFileIDs: []gid.GID{}, }, - ) - if err != nil { + ); err != nil { r.logger.ErrorCtx(ctx, "cannot request report access", log.Error(err)) return nil, gqlutils.Internal(ctx) } - return &types.RequestAccessesPayload{ - TrustCenterAccess: &types.TrustCenterAccess{ - ID: access.ID, - Email: access.Email, - Name: access.Name, - CreatedAt: access.CreatedAt, - UpdatedAt: access.UpdatedAt, - }, + return &types.RequestReportAccessPayload{ + Audit: types.NewAudit(audit), }, nil } // RequestTrustCenterFileAccess is the resolver for the requestTrustCenterFileAccess field. -func (r *mutationResolver) RequestTrustCenterFileAccess(ctx context.Context, input types.RequestTrustCenterFileAccessInput) (*types.RequestAccessesPayload, error) { +func (r *mutationResolver) RequestTrustCenterFileAccess(ctx context.Context, input types.RequestTrustCenterFileAccessInput) (*types.RequestFileAccessPayload, error) { trustCenter := compliancepage.CompliancePageFromContext(ctx) trustService := r.TrustService(ctx, trustCenter.ID.TenantID()) @@ -531,7 +522,7 @@ func (r *mutationResolver) RequestTrustCenterFileAccess(ctx context.Context, inp return nil, gqlutils.Unauthenticatedf(ctx, "authentication is required to request access") } - access, err := trustService.TrustCenterAccesses.Request( + if _, err := trustService.TrustCenterAccesses.Request( ctx, &trust.TrustCenterAccessRequest{ TrustCenterID: trustCenter.ID, @@ -541,20 +532,13 @@ func (r *mutationResolver) RequestTrustCenterFileAccess(ctx context.Context, inp ReportIDs: []gid.GID{}, TrustCenterFileIDs: []gid.GID{input.TrustCenterFileID}, }, - ) - if err != nil { + ); err != nil { r.logger.ErrorCtx(ctx, "cannot request trust center file access", log.Error(err)) return nil, gqlutils.Internal(ctx) } - return &types.RequestAccessesPayload{ - TrustCenterAccess: &types.TrustCenterAccess{ - ID: access.ID, - Email: access.Email, - Name: access.Name, - CreatedAt: access.CreatedAt, - UpdatedAt: access.UpdatedAt, - }, + return &types.RequestFileAccessPayload{ + File: types.NewTrustCenterFile(trustCenterFile), }, nil } @@ -850,30 +834,35 @@ func (r *reportResolver) IsUserAuthorized(ctx context.Context, obj *types.Report return reportAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil } -// HasUserRequestedAccess is the resolver for the hasUserRequestedAccess field. -func (r *reportResolver) HasUserRequestedAccess(ctx context.Context, obj *types.Report) (bool, error) { +// Access is the resolver for the access field. +func (r *reportResolver) Access(ctx context.Context, obj *types.Report) (*types.DocumentAccess, error) { trustService := r.TrustService(ctx, obj.ID.TenantID()) - trustCenter := compliancepage.CompliancePageFromContext(ctx) identity := authn.IdentityFromContext(ctx) if identity == nil { - return false, nil // User is not authenticated, so no access requested + return nil, nil // User is not authenticated, so no access requested } - _, err := trustService.TrustCenterAccesses.GetReportAccess(ctx, + access, err := trustService.TrustCenterAccesses.GetReportAccess( + ctx, trustCenter.ID, identity.EmailAddress, obj.ID, ) if err != nil { - // FIXME check for not found and return without error in this case - // r.logger.ErrorCtx(ctx, "cannot check report access", log.Error(err)) - // return false, gqlutils.Internal(ctx) - return false, nil + if errors.Is(err, trust.ErrDocumentAccessNotFound) { + return nil, nil + } + + r.logger.ErrorCtx(ctx, "cannot get document access", log.Error(err)) + return nil, gqlutils.Internal(ctx) } - return true, nil + return &types.DocumentAccess{ + ID: access.ID, + Status: access.Status, + }, nil } // LogoFileURL is the resolver for the logoFileUrl field. @@ -1061,30 +1050,35 @@ func (r *trustCenterFileResolver) IsUserAuthorized(ctx context.Context, obj *typ return fileAccess.Status == coredata.TrustCenterDocumentAccessStatusGranted, nil } -// HasUserRequestedAccess is the resolver for the hasUserRequestedAccess field. -func (r *trustCenterFileResolver) HasUserRequestedAccess(ctx context.Context, obj *types.TrustCenterFile) (bool, error) { +// Access is the resolver for the access field. +func (r *trustCenterFileResolver) Access(ctx context.Context, obj *types.TrustCenterFile) (*types.DocumentAccess, error) { trustService := r.TrustService(ctx, obj.ID.TenantID()) - trustCenter := compliancepage.CompliancePageFromContext(ctx) identity := authn.IdentityFromContext(ctx) if identity == nil { - return false, nil // User is not authenticated, so no access requested + return nil, nil // User is not authenticated, so no access requested } - _, err := trustService.TrustCenterAccesses.GetTrustCenterFileAccess(ctx, + access, err := trustService.TrustCenterAccesses.GetTrustCenterFileAccess( + ctx, trustCenter.ID, identity.EmailAddress, obj.ID, ) if err != nil { - // FIXME check for not found and return without error in this case - // r.logger.ErrorCtx(ctx, "cannot check trust center file access", log.Error(err)) - // return false, gqlutils.Internal(ctx) - return false, nil + if errors.Is(err, trust.ErrDocumentAccessNotFound) { + return nil, nil + } + + r.logger.ErrorCtx(ctx, "cannot get document access", log.Error(err)) + return nil, gqlutils.Internal(ctx) } - return true, nil + return &types.DocumentAccess{ + ID: access.ID, + Status: access.Status, + }, nil } // LogoURL is the resolver for the logoUrl field.