# Directives directive @goField( forceResolver: Boolean name: String omittable: Boolean ) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION directive @goModel( model: String models: [String!] ) on OBJECT | INPUT_OBJECT | SCALAR | ENUM | INTERFACE | UNION directive @goEnum(value: String) on ENUM_VALUE # Scalars scalar CursorKey scalar Void scalar Datetime scalar Upload scalar Duration # Interfaces interface Node { id: ID! } # Pagination type PageInfo { hasNextPage: Boolean! hasPreviousPage: Boolean! startCursor: CursorKey endCursor: CursorKey } # Enums enum OrderDirection @goModel(model: "github.com/getprobo/probo/pkg/page.OrderDirection") { ASC @goEnum(value: "github.com/getprobo/probo/pkg/page.OrderDirectionAsc") DESC @goEnum(value: "github.com/getprobo/probo/pkg/page.OrderDirectionDesc") } enum MeasureState @goModel(model: "github.com/getprobo/probo/pkg/coredata.MeasureState") { NOT_STARTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureStateNotStarted" ) IN_PROGRESS @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureStateInProgress" ) NOT_APPLICABLE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureStateNotApplicable" ) IMPLEMENTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureStateImplemented" ) } enum TaskState @goModel(model: "github.com/getprobo/probo/pkg/coredata.TaskState") { TODO @goEnum(value: "github.com/getprobo/probo/pkg/coredata.TaskStateTodo") DONE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.TaskStateDone") } enum EvidenceState @goModel(model: "github.com/getprobo/probo/pkg/coredata.EvidenceState") { FULFILLED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.EvidenceStateFulfilled" ) REQUESTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.EvidenceStateRequested" ) } enum PeopleKind @goModel(model: "github.com/getprobo/probo/pkg/coredata.PeopleKind") { EMPLOYEE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.PeopleKindEmployee") CONTRACTOR @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PeopleKindContractor" ) SERVICE_ACCOUNT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PeopleKindServiceAccount" ) } enum DocumentStatus @goModel(model: "github.com/getprobo/probo/pkg/coredata.DocumentStatus") { DRAFT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DocumentStatusDraft") PUBLISHED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentStatusPublished" ) } enum EvidenceType @goModel(model: "github.com/getprobo/probo/pkg/coredata.EvidenceType") { FILE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceTypeFile") LINK @goEnum(value: "github.com/getprobo/probo/pkg/coredata.EvidenceTypeLink") } enum RiskTreatment @goModel(model: "github.com/getprobo/probo/pkg/coredata.RiskTreatment") { MITIGATED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskTreatmentMitigated" ) ACCEPTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskTreatmentAccepted" ) AVOIDED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskTreatmentAvoided" ) TRANSFERRED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskTreatmentTransferred" ) } # Order Field Enums enum UserOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.UserOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.UserOrderFieldCreatedAt" ) } enum PeopleOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.PeopleOrderField") { FULL_NAME @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PeopleOrderFieldFullName" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.PeopleOrderFieldCreatedAt" ) } enum VendorOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.VendorOrderField") { NAME } enum FrameworkOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.FrameworkOrderField" ) { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.FrameworkOrderFieldCreatedAt" ) } enum ControlOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.ControlOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.ControlOrderFieldCreatedAt" ) SECTION_TITLE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.ControlOrderFieldSectionTitle" ) } enum MeasureOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.MeasureOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.MeasureOrderFieldCreatedAt" ) } enum TaskOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.TaskOrderField") { CREATED_AT } enum DocumentOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.DocumentOrderField") { TITLE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentOrderFieldTitle" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentOrderFieldCreatedAt" ) } enum RiskOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.RiskOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldCreatedAt" ) UPDATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldUpdatedAt" ) NAME @goEnum(value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldName") CATEGORY @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldCategory" ) TREATMENT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldTreatment" ) INHERENT_RISK_SCORE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldInherentRiskScore" ) RESIDUAL_RISK_SCORE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.RiskOrderFieldResidualRiskScore" ) } enum EvidenceOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.EvidenceOrderField") { CREATED_AT } enum VendorComplianceReportOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.VendorComplianceReportOrderField" ) { REPORT_DATE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorComplianceReportOrderFieldReportDate" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorComplianceReportOrderFieldCreatedAt" ) } enum OrganizationOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.OrganizationOrderField" ) { NAME @goEnum( value: "github.com/getprobo/probo/pkg/coredata.OrganizationOrderFieldName" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.OrganizationOrderFieldCreatedAt" ) UPDATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.OrganizationOrderFieldUpdatedAt" ) } enum ConnectorOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.ConnectorOrderField" ) { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.ConnectorOrderFieldCreatedAt" ) NAME @goEnum( value: "github.com/getprobo/probo/pkg/coredata.ConnectorOrderFieldName" ) } enum DataSensitivity @goModel(model: "github.com/getprobo/probo/pkg/coredata.DataSensitivity") { NONE @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityNone") LOW @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityLow") MEDIUM @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityMedium" ) HIGH @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityHigh") CRITICAL @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DataSensitivityCritical" ) } enum BusinessImpact @goModel(model: "github.com/getprobo/probo/pkg/coredata.BusinessImpact") { LOW @goEnum(value: "github.com/getprobo/probo/pkg/coredata.BusinessImpactLow") MEDIUM @goEnum( value: "github.com/getprobo/probo/pkg/coredata.BusinessImpactMedium" ) HIGH @goEnum(value: "github.com/getprobo/probo/pkg/coredata.BusinessImpactHigh") CRITICAL @goEnum( value: "github.com/getprobo/probo/pkg/coredata.BusinessImpactCritical" ) } enum DocumentVersionOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.DocumentVersionOrderField" ) { VERSION @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionOrderFieldVersion" ) CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionOrderFieldCreatedAt" ) } enum VendorCategory @goModel(model: "github.com/getprobo/probo/pkg/coredata.VendorCategory") { ANALYTICS @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryAnalytics" ) CLOUD_MONITORING @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCloudMonitoring" ) CLOUD_PROVIDER @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCloudProvider" ) COLLABORATION @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCollaboration" ) CUSTOMER_SUPPORT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryCustomerSupport" ) DATA_STORAGE_AND_PROCESSING @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryDataStorageAndProcessing" ) DOCUMENT_MANAGEMENT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryDocumentManagement" ) EMPLOYEE_MANAGEMENT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryEmployeeManagement" ) ENGINEERING @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryEngineering" ) FINANCE @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryFinance" ) IDENTITY_PROVIDER @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryIdentityProvider" ) IT @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryIT") MARKETING @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryMarketing" ) OFFICE_OPERATIONS @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryOfficeOperations" ) OTHER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryOther") PASSWORD_MANAGEMENT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryPasswordManagement" ) PRODUCT_AND_DESIGN @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryProductAndDesign" ) PROFESSIONAL_SERVICES @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryProfessionalServices" ) RECRUITING @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryRecruiting" ) SALES @goEnum(value: "github.com/getprobo/probo/pkg/coredata.VendorCategorySales") SECURITY @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategorySecurity" ) VERSION_CONTROL @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorCategoryVersionControl" ) } enum DocumentType @goModel(model: "github.com/getprobo/probo/pkg/coredata.DocumentType") { OTHER @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DocumentTypeOther") ISMS @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DocumentTypeISMS") POLICY @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DocumentTypePolicy") } enum AssetType @goModel(model: "github.com/getprobo/probo/pkg/coredata.AssetType") { PHYSICAL @goEnum(value: "github.com/getprobo/probo/pkg/coredata.AssetTypePhysical") VIRTUAL @goEnum(value: "github.com/getprobo/probo/pkg/coredata.AssetTypeVirtual") } enum CriticityLevel @goModel(model: "github.com/getprobo/probo/pkg/coredata.CriticityLevel") { LOW @goEnum(value: "github.com/getprobo/probo/pkg/coredata.CriticityLevelLow") MEDIUM @goEnum( value: "github.com/getprobo/probo/pkg/coredata.CriticityLevelMedium" ) HIGH @goEnum(value: "github.com/getprobo/probo/pkg/coredata.CriticityLevelHigh") } enum AssetOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.AssetOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.AssetOrderFieldCreatedAt" ) AMOUNT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.AssetOrderFieldAmount" ) CRITICITY @goEnum( value: "github.com/getprobo/probo/pkg/coredata.AssetOrderFieldCriticity" ) } enum DatumOrderField @goModel(model: "github.com/getprobo/probo/pkg/coredata.DatumOrderField") { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DatumOrderFieldCreatedAt" ) NAME @goEnum(value: "github.com/getprobo/probo/pkg/coredata.DatumOrderFieldName") DATA_CLASSIFICATION @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DatumOrderFieldDataClassification" ) } enum DataClassification @goModel(model: "github.com/getprobo/probo/pkg/coredata.DataClassification") { PUBLIC @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DataClassificationPublic" ) INTERNAL @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DataClassificationInternal" ) CONFIDENTIAL @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DataClassificationConfidential" ) SECRET @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DataClassificationSecret" ) } # Input Types input UserOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.UserOrderBy" ) { direction: OrderDirection! field: UserOrderField! } input PeopleOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.PeopleOrderBy" ) { direction: OrderDirection! field: PeopleOrderField! } input VendorOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.VendorOrderBy" ) { direction: OrderDirection! field: VendorOrderField! } input FrameworkOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.FrameworkOrderBy" ) { direction: OrderDirection! field: FrameworkOrderField! } input ControlOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.ControlOrderBy" ) { direction: OrderDirection! field: ControlOrderField! } input MeasureOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.MeasureOrderBy" ) { direction: OrderDirection! field: MeasureOrderField! } input TaskOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.TaskOrderBy" ) { direction: OrderDirection! field: TaskOrderField! } input DocumentOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.DocumentOrderBy" ) { direction: OrderDirection! field: DocumentOrderField! } input RiskOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.RiskOrderBy" ) { direction: OrderDirection! field: RiskOrderField! } input EvidenceOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.EvidenceOrderBy" ) { direction: OrderDirection! field: EvidenceOrderField! } input VendorComplianceReportOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.VendorComplianceReportOrderBy" ) { direction: OrderDirection! field: VendorComplianceReportOrderField! } input OrganizationOrder { direction: OrderDirection! field: OrganizationOrderField! } input ConnectorOrder { field: ConnectorOrderField! direction: OrderDirection! } input DocumentVersionOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.DocumentVersionOrderBy" ) { direction: OrderDirection! field: DocumentVersionOrderField! } input DocumentVersionFilter { status: DocumentStatus } # Input Types for Filtering input ControlFilter { query: String } input DocumentFilter { query: String } input MeasureFilter { query: String } input RiskFilter { query: String } # Core Types type Organization implements Node { id: ID! name: String! logoUrl: String @goField(forceResolver: true) users( first: Int after: CursorKey last: Int before: CursorKey orderBy: UserOrder ): UserConnection! @goField(forceResolver: true) connectors( first: Int after: CursorKey last: Int before: CursorKey orderBy: ConnectorOrder ): ConnectorConnection! @goField(forceResolver: true) frameworks( first: Int after: CursorKey last: Int before: CursorKey orderBy: FrameworkOrder ): FrameworkConnection! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder filter: ControlFilter ): ControlConnection! @goField(forceResolver: true) vendors( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorOrder ): VendorConnection! @goField(forceResolver: true) peoples( first: Int after: CursorKey last: Int before: CursorKey orderBy: PeopleOrder ): PeopleConnection! @goField(forceResolver: true) documents( first: Int after: CursorKey last: Int before: CursorKey orderBy: DocumentOrder filter: DocumentFilter ): DocumentConnection! @goField(forceResolver: true) measures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MeasureOrder filter: MeasureFilter ): MeasureConnection! @goField(forceResolver: true) risks( first: Int after: CursorKey last: Int before: CursorKey orderBy: RiskOrder filter: RiskFilter ): RiskConnection! @goField(forceResolver: true) tasks( first: Int after: CursorKey last: Int before: CursorKey orderBy: TaskOrder ): TaskConnection! @goField(forceResolver: true) assets( first: Int after: CursorKey last: Int before: CursorKey orderBy: AssetOrder ): AssetConnection! @goField(forceResolver: true) data( first: Int after: CursorKey last: Int before: CursorKey orderBy: DatumOrder ): DatumConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type User implements Node { id: ID! fullName: String! email: String! createdAt: Datetime! updatedAt: Datetime! people(organizationId: ID!): People @goField(forceResolver: true) } type Connector implements Node { id: ID! name: String! type: String! createdAt: Datetime! updatedAt: Datetime! } type People implements Node { id: ID! fullName: String! primaryEmailAddress: String! additionalEmailAddresses: [String!]! kind: PeopleKind! position: String contractStartDate: Datetime contractEndDate: Datetime createdAt: Datetime! updatedAt: Datetime! } type Vendor implements Node { id: ID! name: String! category: VendorCategory! description: String organization: Organization! @goField(forceResolver: true) complianceReports( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorComplianceReportOrder ): VendorComplianceReportConnection! @goField(forceResolver: true) riskAssessments( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorRiskAssessmentOrder ): VendorRiskAssessmentConnection! @goField(forceResolver: true) businessOwner: People @goField(forceResolver: true) securityOwner: People @goField(forceResolver: true) statusPageUrl: String termsOfServiceUrl: String privacyPolicyUrl: String serviceLevelAgreementUrl: String dataProcessingAgreementUrl: String businessAssociateAgreementUrl: String subprocessorsListUrl: String certifications: [String!]! securityPageUrl: String trustPageUrl: String headquarterAddress: String legalName: String websiteUrl: String createdAt: Datetime! updatedAt: Datetime! } type VendorComplianceReport implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) reportDate: Datetime! validUntil: Datetime reportName: String! fileUrl: String! @goField(forceResolver: true) fileSize: Int! createdAt: Datetime! updatedAt: Datetime! } type Framework implements Node { id: ID! name: String! description: String! organization: Organization! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder filter: ControlFilter ): ControlConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Control implements Node { id: ID! sectionTitle: String! name: String! description: String! framework: Framework! @goField(forceResolver: true) measures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MeasureOrder filter: MeasureFilter ): MeasureConnection! @goField(forceResolver: true) documents( first: Int after: CursorKey last: Int before: CursorKey orderBy: DocumentOrder filter: DocumentFilter ): DocumentConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Measure implements Node { id: ID! category: String! name: String! description: String! state: MeasureState! evidences( first: Int after: CursorKey last: Int before: CursorKey orderBy: EvidenceOrder ): EvidenceConnection! @goField(forceResolver: true) tasks( first: Int after: CursorKey last: Int before: CursorKey orderBy: TaskOrder ): TaskConnection! @goField(forceResolver: true) risks( first: Int after: CursorKey last: Int before: CursorKey orderBy: RiskOrder filter: RiskFilter ): RiskConnection! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder filter: ControlFilter ): ControlConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Task implements Node { id: ID! name: String! description: String! state: TaskState! timeEstimate: Duration deadline: Datetime assignedTo: People @goField(forceResolver: true) organization: Organization! @goField(forceResolver: true) measure: Measure @goField(forceResolver: true) evidences( first: Int after: CursorKey last: Int before: CursorKey orderBy: EvidenceOrder ): EvidenceConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Evidence implements Node { id: ID! fileUrl: String @goField(forceResolver: true) mimeType: String! size: Int! state: EvidenceState! type: EvidenceType! filename: String! url: String description: String! task: Task @goField(forceResolver: true) measure: Measure! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Document implements Node { id: ID! title: String! description: String! documentType: DocumentType! currentPublishedVersion: Int owner: People! @goField(forceResolver: true) organization: Organization! @goField(forceResolver: true) versions( first: Int after: CursorKey last: Int before: CursorKey orderBy: DocumentVersionOrder filter: DocumentVersionFilter ): DocumentVersionConnection! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder filter: ControlFilter ): ControlConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Risk implements Node { id: ID! name: String! description: String! category: String! treatment: RiskTreatment! inherentLikelihood: Int! inherentImpact: Int! inherentRiskScore: Int! residualLikelihood: Int! residualImpact: Int! residualRiskScore: Int! note: String! owner: People @goField(forceResolver: true) organization: Organization! @goField(forceResolver: true) measures( first: Int after: CursorKey last: Int before: CursorKey orderBy: MeasureOrder filter: MeasureFilter ): MeasureConnection! @goField(forceResolver: true) documents( first: Int after: CursorKey last: Int before: CursorKey orderBy: DocumentOrder filter: DocumentFilter ): DocumentConnection! @goField(forceResolver: true) controls( first: Int after: CursorKey last: Int before: CursorKey orderBy: ControlOrder filter: ControlFilter ): ControlConnection! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type Session { id: ID! expiresAt: Datetime! } type Viewer { id: ID! user: User! organizations( first: Int after: CursorKey last: Int before: CursorKey orderBy: OrganizationOrder ): OrganizationConnection! @goField(forceResolver: true) } # Connection Types type OrganizationConnection { edges: [OrganizationEdge!]! pageInfo: PageInfo! } type OrganizationEdge { cursor: CursorKey! node: Organization! } type UserConnection { edges: [UserEdge!]! pageInfo: PageInfo! } type UserEdge { cursor: CursorKey! node: User! } type PeopleConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.PeopleConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [PeopleEdge!]! pageInfo: PageInfo! } type PeopleEdge { cursor: CursorKey! node: People! } type VendorConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.VendorConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [VendorEdge!]! pageInfo: PageInfo! } type VendorEdge { cursor: CursorKey! node: Vendor! } type FrameworkConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.FrameworkConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [FrameworkEdge!]! pageInfo: PageInfo! } type FrameworkEdge { cursor: CursorKey! node: Framework! } type ControlConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.ControlConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [ControlEdge!]! pageInfo: PageInfo! } type ControlEdge { cursor: CursorKey! node: Control! } type MeasureConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.MeasureConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [MeasureEdge!]! pageInfo: PageInfo! } type MeasureEdge { cursor: CursorKey! node: Measure! } type TaskConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.TaskConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [TaskEdge!]! pageInfo: PageInfo! } type TaskEdge { cursor: CursorKey! node: Task! } type EvidenceConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.EvidenceConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [EvidenceEdge!]! pageInfo: PageInfo! } type EvidenceEdge { cursor: CursorKey! node: Evidence! } type DocumentConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.DocumentConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [DocumentEdge!]! pageInfo: PageInfo! } type DocumentEdge { cursor: CursorKey! node: Document! } type RiskConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.RiskConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [RiskEdge!]! pageInfo: PageInfo! } type RiskEdge { cursor: CursorKey! node: Risk! } type VendorComplianceReportConnection { edges: [VendorComplianceReportEdge!]! pageInfo: PageInfo! } type VendorComplianceReportEdge { cursor: CursorKey! node: VendorComplianceReport! } type ConnectorConnection { edges: [ConnectorEdge!]! pageInfo: PageInfo! } type ConnectorEdge { cursor: CursorKey! node: Connector! } type VendorRiskAssessmentConnection { edges: [VendorRiskAssessmentEdge!]! pageInfo: PageInfo! } type VendorRiskAssessmentEdge { cursor: CursorKey! node: VendorRiskAssessment! } type DocumentVersionConnection { edges: [DocumentVersionEdge!]! pageInfo: PageInfo! } type DocumentVersionEdge { cursor: CursorKey! node: DocumentVersion! } type DatumConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.DatumConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [DatumEdge!]! pageInfo: PageInfo! } type DatumEdge { cursor: CursorKey! node: Datum! } # Root Types type Query { node(id: ID!): Node! viewer: Viewer! } type Mutation { # Organization mutations createOrganization( input: CreateOrganizationInput! ): CreateOrganizationPayload! updateOrganization( input: UpdateOrganizationInput! ): UpdateOrganizationPayload! # User mutations confirmEmail(input: ConfirmEmailInput!): ConfirmEmailPayload! inviteUser(input: InviteUserInput!): InviteUserPayload! removeUser(input: RemoveUserInput!): RemoveUserPayload! # People mutations createPeople(input: CreatePeopleInput!): CreatePeoplePayload! updatePeople(input: UpdatePeopleInput!): UpdatePeoplePayload! deletePeople(input: DeletePeopleInput!): DeletePeoplePayload! # Vendor mutations createVendor(input: CreateVendorInput!): CreateVendorPayload! updateVendor(input: UpdateVendorInput!): UpdateVendorPayload! deleteVendor(input: DeleteVendorInput!): DeleteVendorPayload! # Framework mutations createFramework(input: CreateFrameworkInput!): CreateFrameworkPayload! updateFramework(input: UpdateFrameworkInput!): UpdateFrameworkPayload! importFramework(input: ImportFrameworkInput!): ImportFrameworkPayload! deleteFramework(input: DeleteFrameworkInput!): DeleteFrameworkPayload! # Control mutations createControl(input: CreateControlInput!): CreateControlPayload! updateControl(input: UpdateControlInput!): UpdateControlPayload! deleteControl(input: DeleteControlInput!): DeleteControlPayload! # Measure mutations createMeasure(input: CreateMeasureInput!): CreateMeasurePayload! updateMeasure(input: UpdateMeasureInput!): UpdateMeasurePayload! importMeasure(input: ImportMeasureInput!): ImportMeasurePayload! deleteMeasure(input: DeleteMeasureInput!): DeleteMeasurePayload! # Control mutations createControlMeasureMapping( input: CreateControlMeasureMappingInput! ): CreateControlMeasureMappingPayload! createControlDocumentMapping( input: CreateControlDocumentMappingInput! ): CreateControlDocumentMappingPayload! deleteControlMeasureMapping( input: DeleteControlMeasureMappingInput! ): DeleteControlMeasureMappingPayload! deleteControlDocumentMapping( input: DeleteControlDocumentMappingInput! ): DeleteControlDocumentMappingPayload! # Task mutations createTask(input: CreateTaskInput!): CreateTaskPayload! updateTask(input: UpdateTaskInput!): UpdateTaskPayload! deleteTask(input: DeleteTaskInput!): DeleteTaskPayload! assignTask(input: AssignTaskInput!): AssignTaskPayload! unassignTask(input: UnassignTaskInput!): UnassignTaskPayload! # Risk mutations createRisk(input: CreateRiskInput!): CreateRiskPayload! updateRisk(input: UpdateRiskInput!): UpdateRiskPayload! deleteRisk(input: DeleteRiskInput!): DeleteRiskPayload! createRiskMeasureMapping( input: CreateRiskMeasureMappingInput! ): CreateRiskMeasureMappingPayload! deleteRiskMeasureMapping( input: DeleteRiskMeasureMappingInput! ): DeleteRiskMeasureMappingPayload! createRiskDocumentMapping( input: CreateRiskDocumentMappingInput! ): CreateRiskDocumentMappingPayload! deleteRiskDocumentMapping( input: DeleteRiskDocumentMappingInput! ): DeleteRiskDocumentMappingPayload! # Evidence mutations requestEvidence(input: RequestEvidenceInput!): RequestEvidencePayload! fulfillEvidence(input: FulfillEvidenceInput!): FulfillEvidencePayload! deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload! uploadTaskEvidence( input: UploadTaskEvidenceInput! ): UploadTaskEvidencePayload! uploadMeasureEvidence( input: UploadMeasureEvidenceInput! ): UploadMeasureEvidencePayload! # Vendor Compliance Report mutations uploadVendorComplianceReport( input: UploadVendorComplianceReportInput! ): UploadVendorComplianceReportPayload! deleteVendorComplianceReport( input: DeleteVendorComplianceReportInput! ): DeleteVendorComplianceReportPayload! # Document mutations createDocument(input: CreateDocumentInput!): CreateDocumentPayload! updateDocument(input: UpdateDocumentInput!): UpdateDocumentPayload! deleteDocument(input: DeleteDocumentInput!): DeleteDocumentPayload! publishDocumentVersion( input: PublishDocumentVersionInput! ): PublishDocumentVersionPayload! generateDocumentChangelog( input: GenerateDocumentChangelogInput! ): GenerateDocumentChangelogPayload! createDraftDocumentVersion( input: CreateDraftDocumentVersionInput! ): CreateDraftDocumentVersionPayload! updateDocumentVersion( input: UpdateDocumentVersionInput! ): UpdateDocumentVersionPayload! requestSignature(input: RequestSignatureInput!): RequestSignaturePayload! sendSigningNotifications( input: SendSigningNotificationsInput! ): SendSigningNotificationsPayload! createVendorRiskAssessment( input: CreateVendorRiskAssessmentInput! ): CreateVendorRiskAssessmentPayload! exportAudit(input: ExportAuditInput!): ExportAuditPayload! assessVendor(input: AssessVendorInput!): AssessVendorPayload! createAsset(input: CreateAssetInput!): CreateAssetPayload! updateAsset(input: UpdateAssetInput!): UpdateAssetPayload! deleteAsset(input: DeleteAssetInput!): DeleteAssetPayload! createDatum(input: CreateDatumInput!): CreateDatumPayload! updateDatum(input: UpdateDatumInput!): UpdateDatumPayload! deleteDatum(input: DeleteDatumInput!): DeleteDatumPayload! } # Input Types input CreateOrganizationInput { name: String! } input UpdateOrganizationInput { organizationId: ID! name: String logo: Upload } input CreateVendorInput { organizationId: ID! name: String! description: String headquarterAddress: String legalName: String websiteUrl: String privacyPolicyUrl: String category: VendorCategory serviceLevelAgreementUrl: String dataProcessingAgreementUrl: String businessAssociateAgreementUrl: String subprocessorsListUrl: String certifications: [String!] securityPageUrl: String trustPageUrl: String statusPageUrl: String termsOfServiceUrl: String businessOwnerId: ID securityOwnerId: ID } input UpdateVendorInput { id: ID! name: String description: String statusPageUrl: String termsOfServiceUrl: String privacyPolicyUrl: String serviceLevelAgreementUrl: String dataProcessingAgreementUrl: String businessAssociateAgreementUrl: String subprocessorsListUrl: String websiteUrl: String legalName: String headquarterAddress: String category: VendorCategory certifications: [String!] securityPageUrl: String trustPageUrl: String businessOwnerId: ID securityOwnerId: ID } input DeleteVendorInput { vendorId: ID! } input CreatePeopleInput { organizationId: ID! fullName: String! primaryEmailAddress: String! additionalEmailAddresses: [String!] kind: PeopleKind! position: String contractStartDate: Datetime contractEndDate: Datetime } input UpdatePeopleInput { id: ID! fullName: String primaryEmailAddress: String additionalEmailAddresses: [String!] kind: PeopleKind position: String contractStartDate: Datetime contractEndDate: Datetime } input DeletePeopleInput { peopleId: ID! } input CreateFrameworkInput { organizationId: ID! name: String! description: String! } input UpdateFrameworkInput { id: ID! name: String description: String } input ImportFrameworkInput { organizationId: ID! file: Upload! } input DeleteFrameworkInput { frameworkId: ID! } input CreateMeasureInput { organizationId: ID! name: String! description: String! category: String! } input UpdateMeasureInput { id: ID! name: String description: String category: String state: MeasureState } input ImportMeasureInput { organizationId: ID! file: Upload! } input CreateTaskInput { organizationId: ID! measureId: ID name: String! description: String! timeEstimate: Duration assignedToId: ID deadline: Datetime } input UpdateTaskInput { taskId: ID! name: String description: String state: TaskState timeEstimate: Duration deadline: Datetime } input DeleteTaskInput { taskId: ID! } input AssignTaskInput { taskId: ID! assignedToId: ID! } input UnassignTaskInput { taskId: ID! } input CreateControlMeasureMappingInput { controlId: ID! measureId: ID! } input CreateControlDocumentMappingInput { controlId: ID! documentId: ID! } input DeleteControlMeasureMappingInput { controlId: ID! measureId: ID! } input DeleteControlDocumentMappingInput { controlId: ID! documentId: ID! } input CreateRiskInput { organizationId: ID! name: String! description: String! category: String! ownerId: ID treatment: RiskTreatment! inherentLikelihood: Int! inherentImpact: Int! residualLikelihood: Int residualImpact: Int note: String } input UpdateRiskInput { id: ID! name: String description: String category: String ownerId: ID treatment: RiskTreatment inherentLikelihood: Int inherentImpact: Int residualLikelihood: Int residualImpact: Int note: String } input DeleteRiskInput { riskId: ID! } input CreateRiskMeasureMappingInput { riskId: ID! measureId: ID! } input DeleteRiskMeasureMappingInput { riskId: ID! measureId: ID! } input CreateRiskDocumentMappingInput { riskId: ID! documentId: ID! } input DeleteRiskDocumentMappingInput { riskId: ID! documentId: ID! } input RequestEvidenceInput { taskId: ID! name: String! type: EvidenceType! description: String! } input FulfillEvidenceInput { evidenceId: ID! name: String file: Upload url: String } input CreateEvidenceInput { taskId: ID! name: String! type: EvidenceType! url: String file: Upload description: String! } input DeleteEvidenceInput { evidenceId: ID! } input UploadVendorComplianceReportInput { vendorId: ID! reportDate: Datetime! validUntil: Datetime reportName: String! file: Upload! } input DeleteVendorComplianceReportInput { reportId: ID! } input CreateDocumentInput { organizationId: ID! title: String! content: String! ownerId: ID! documentType: DocumentType! } input UpdateDocumentInput { id: ID! title: String content: String ownerId: ID createdBy: ID documentType: DocumentType } input DeleteDocumentInput { documentId: ID! } input ConfirmEmailInput { token: String! } input InviteUserInput { organizationId: ID! email: String! fullName: String! } input RemoveUserInput { organizationId: ID! userId: ID! } input CreateControlInput { frameworkId: ID! sectionTitle: String! name: String! description: String! } input UpdateControlInput { id: ID! sectionTitle: String name: String description: String } input DeleteControlInput { controlId: ID! } # Payload Types type CreateOrganizationPayload { organizationEdge: OrganizationEdge! } type UpdateOrganizationPayload { organization: Organization! } type CreateControlPayload { controlEdge: ControlEdge! } type UpdateControlPayload { control: Control! } type DeleteControlPayload { deletedControlId: ID! } type CreateVendorPayload { vendorEdge: VendorEdge! } type UpdateVendorPayload { vendor: Vendor! } type DeleteVendorPayload { deletedVendorId: ID! } type CreatePeoplePayload { peopleEdge: PeopleEdge! } type UpdatePeoplePayload { people: People! } type DeletePeoplePayload { deletedPeopleId: ID! } type CreateFrameworkPayload { frameworkEdge: FrameworkEdge! } type UpdateFrameworkPayload { framework: Framework! } type ImportFrameworkPayload { frameworkEdge: FrameworkEdge! } type DeleteFrameworkPayload { deletedFrameworkId: ID! } type CreateMeasurePayload { measureEdge: MeasureEdge! } type UpdateMeasurePayload { measure: Measure! } type ImportMeasurePayload { measureEdges: [MeasureEdge!]! } type CreateTaskPayload { taskEdge: TaskEdge! } type UpdateTaskPayload { task: Task! } type DeleteTaskPayload { deletedTaskId: ID! } type AssignTaskPayload { task: Task! } type UnassignTaskPayload { task: Task! } type CreateControlMeasureMappingPayload { controlEdge: ControlEdge! measureEdge: MeasureEdge! } type CreateControlDocumentMappingPayload { controlEdge: ControlEdge! documentEdge: DocumentEdge! } type DeleteControlMeasureMappingPayload { deletedControlId: ID! deletedMeasureId: ID! } type DeleteControlDocumentMappingPayload { deletedControlId: ID! deletedDocumentId: ID! } type CreateRiskPayload { riskEdge: RiskEdge! } type UpdateRiskPayload { risk: Risk! } type DeleteRiskPayload { deletedRiskId: ID! } type CreateRiskMeasureMappingPayload { riskEdge: RiskEdge! measureEdge: MeasureEdge! } type DeleteRiskMeasureMappingPayload { deletedMeasureId: ID! deletedRiskId: ID! } type CreateRiskDocumentMappingPayload { riskEdge: RiskEdge! documentEdge: DocumentEdge! } type DeleteRiskDocumentMappingPayload { deletedRiskId: ID! deletedDocumentId: ID! } type RequestEvidencePayload { evidenceEdge: EvidenceEdge! } type FulfillEvidencePayload { evidenceEdge: EvidenceEdge! } type CreateEvidencePayload { evidenceEdge: EvidenceEdge! } type DeleteEvidencePayload { deletedEvidenceId: ID! } type UploadVendorComplianceReportPayload { vendorComplianceReportEdge: VendorComplianceReportEdge! } type DeleteVendorComplianceReportPayload { deletedVendorComplianceReportId: ID! } type CreateDocumentPayload { documentEdge: DocumentEdge! documentVersionEdge: DocumentVersionEdge! } type UpdateDocumentPayload { document: Document! } type DeleteDocumentPayload { deletedDocumentId: ID! } type ConfirmEmailPayload { success: Boolean! } type InviteUserPayload { success: Boolean! } type RemoveUserPayload { success: Boolean! } input VendorRiskAssessmentOrder { field: VendorRiskAssessmentOrderField! direction: OrderDirection! } type VendorRiskAssessment implements Node { id: ID! vendor: Vendor! @goField(forceResolver: true) assessedAt: Datetime! assessedBy: People! @goField(forceResolver: true) expiresAt: Datetime! dataSensitivity: DataSensitivity! businessImpact: BusinessImpact! notes: String createdAt: Datetime! updatedAt: Datetime! } enum VendorRiskAssessmentOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.VendorRiskAssessmentOrderField" ) { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorRiskAssessmentOrderFieldCreatedAt" ) EXPIRES_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorRiskAssessmentOrderFieldExpiresAt" ) ASSESSED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.VendorRiskAssessmentOrderFieldAssessedAt" ) } input CreateVendorRiskAssessmentInput { vendorId: ID! assessedBy: ID! expiresAt: Datetime! dataSensitivity: DataSensitivity! businessImpact: BusinessImpact! notes: String } type CreateVendorRiskAssessmentPayload { vendorRiskAssessmentEdge: VendorRiskAssessmentEdge! } input DeleteMeasureInput { measureId: ID! } type DeleteMeasurePayload { deletedMeasureId: ID! } type DocumentVersion implements Node { id: ID! document: Document! @goField(forceResolver: true) status: DocumentStatus! version: Int! content: String! changelog: String! title: String! owner: People! @goField(forceResolver: true) signatures( first: Int after: CursorKey last: Int before: CursorKey orderBy: DocumentVersionSignatureOrder ): DocumentVersionSignatureConnection! @goField(forceResolver: true) publishedBy: People @goField(forceResolver: true) publishedAt: Datetime createdAt: Datetime! updatedAt: Datetime! } type DocumentVersionSignatureConnection { edges: [DocumentVersionSignatureEdge!]! pageInfo: PageInfo! } type DocumentVersionSignatureEdge { cursor: CursorKey! node: DocumentVersionSignature! } input DocumentVersionSignatureOrder { field: DocumentVersionSignatureOrderField! direction: OrderDirection! } enum DocumentVersionSignatureState @goModel( model: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureState" ) { REQUESTED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureStateRequested" ) SIGNED @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureStateSigned" ) } enum DocumentVersionSignatureOrderField @goModel( model: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureOrderField" ) { CREATED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureOrderFieldCreatedAt" ) SIGNED_AT @goEnum( value: "github.com/getprobo/probo/pkg/coredata.DocumentVersionSignatureOrderFieldSignedAt" ) } type DocumentVersionSignature implements Node { id: ID! documentVersion: DocumentVersion! @goField(forceResolver: true) state: DocumentVersionSignatureState! signedBy: People! @goField(forceResolver: true) signedAt: Datetime requestedAt: Datetime! requestedBy: People! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } input RequestSignatureInput { documentVersionId: ID! signatoryId: ID! } type RequestSignaturePayload { documentVersionSignatureEdge: DocumentVersionSignatureEdge! } input PublishDocumentVersionInput { documentId: ID! changelog: String } type PublishDocumentVersionPayload { documentVersion: DocumentVersion! document: Document! } type CreateDraftDocumentVersionPayload { documentVersionEdge: DocumentVersionEdge! } input CreateDraftDocumentVersionInput { documentID: ID! } input UpdateDocumentVersionInput { documentVersionId: ID! content: String! } type UpdateDocumentVersionPayload { documentVersion: DocumentVersion! } input SendSigningNotificationsInput { organizationId: ID! } type SendSigningNotificationsPayload { success: Boolean! } type UploadTaskEvidencePayload { evidenceEdge: EvidenceEdge! } type UploadMeasureEvidencePayload { evidenceEdge: EvidenceEdge! } input UploadTaskEvidenceInput { taskId: ID! file: Upload! } input UploadMeasureEvidenceInput { measureId: ID! file: Upload! } input ExportAuditInput { frameworkId: ID! } type ExportAuditPayload { url: String! } input GenerateDocumentChangelogInput { documentId: ID! } type GenerateDocumentChangelogPayload { changelog: String! } input AssessVendorInput { id: ID! websiteUrl: String! } type AssessVendorPayload { vendor: Vendor! } type Asset implements Node { id: ID! name: String! amount: Int! owner: People! @goField(forceResolver: true) vendors( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorOrder ): VendorConnection! @goField(forceResolver: true) criticity: CriticityLevel! assetType: AssetType! @goField(forceResolver: true) dataTypesStored: String! organization: Organization! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } type AssetConnection @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.AssetConnection" ) { totalCount: Int! @goField(forceResolver: true) edges: [AssetEdge!]! pageInfo: PageInfo! } type AssetEdge { cursor: CursorKey! node: Asset! } input AssetOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.AssetOrderBy" ) { direction: OrderDirection! field: AssetOrderField! } input CreateAssetInput { organizationId: ID! name: String! amount: Int! ownerId: ID! criticity: CriticityLevel! = MEDIUM assetType: AssetType! dataTypesStored: String! vendorIds: [ID!] } input UpdateAssetInput { id: ID! name: String amount: Int ownerId: ID criticity: CriticityLevel assetType: AssetType dataTypesStored: String vendorIds: [ID!] } input DeleteAssetInput { assetId: ID! } type CreateAssetPayload { assetEdge: AssetEdge! } type UpdateAssetPayload { asset: Asset! } type DeleteAssetPayload { deletedAssetId: ID! } type Datum implements Node { id: ID! name: String! dataClassification: DataClassification! owner: People! @goField(forceResolver: true) vendors( first: Int after: CursorKey last: Int before: CursorKey orderBy: VendorOrder ): VendorConnection! @goField(forceResolver: true) organization: Organization! @goField(forceResolver: true) createdAt: Datetime! updatedAt: Datetime! } input DatumOrder @goModel( model: "github.com/getprobo/probo/pkg/server/api/console/v1/types.DatumOrderBy" ) { direction: OrderDirection! field: DatumOrderField! } input CreateDatumInput { organizationId: ID! name: String! dataClassification: DataClassification! ownerId: ID! vendorIds: [ID!] } input UpdateDatumInput { id: ID! name: String dataClassification: DataClassification ownerId: ID vendorIds: [ID!] } input DeleteDatumInput { datumId: ID! } type CreateDatumPayload { datumEdge: DatumEdge! } type UpdateDatumPayload { datum: Datum! } type DeleteDatumPayload { deletedDatumId: ID! }