From 19d850e90ac8bcbb5849e21489fddb4ce15cfcb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Fri, 5 Dec 2025 22:42:27 +0400 Subject: [PATCH] Add enum to handle rejected status of trust center document access MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Émile Ré --- pkg/coredata/migrations/20251205T000000Z.sql | 21 ++ pkg/coredata/trust_center_document_access.go | 101 +++-- .../trust_center_document_access_status.go | 49 +++ pkg/probo/trust_center_access_service.go | 4 +- pkg/server/api/console/v1/schema.graphql | 242 ++++++++---- pkg/server/api/console/v1/schema/schema.go | 350 ++++++++++++++---- pkg/server/api/console/v1/v1_resolver.go | 5 + pkg/trust/slack_message_service.go | 22 +- pkg/trust/templates/access-request.json.tmpl | 18 +- pkg/trust/trust_center_access_service.go | 12 +- 10 files changed, 635 insertions(+), 189 deletions(-) create mode 100644 pkg/coredata/migrations/20251205T000000Z.sql create mode 100644 pkg/coredata/trust_center_document_access_status.go diff --git a/pkg/coredata/migrations/20251205T000000Z.sql b/pkg/coredata/migrations/20251205T000000Z.sql new file mode 100644 index 000000000..25f990e92 --- /dev/null +++ b/pkg/coredata/migrations/20251205T000000Z.sql @@ -0,0 +1,21 @@ +CREATE TYPE trust_center_document_access_status AS ENUM ('REQUESTED', 'GRANTED', 'REJECTED', 'REVOKED'); + +ALTER TABLE + trust_center_document_accesses +ADD + COLUMN status trust_center_document_access_status; + +UPDATE + trust_center_document_accesses +SET + status = CASE + WHEN active = 'T' THEN 'GRANTED' :: trust_center_document_access_status + ELSE 'REQUESTED' :: trust_center_document_access_status + END; + +ALTER TABLE + trust_center_document_accesses +ALTER COLUMN + status +SET + NOT NULL; \ No newline at end of file diff --git a/pkg/coredata/trust_center_document_access.go b/pkg/coredata/trust_center_document_access.go index 6932f1319..48f802e3e 100644 --- a/pkg/coredata/trust_center_document_access.go +++ b/pkg/coredata/trust_center_document_access.go @@ -30,16 +30,17 @@ import ( type ( TrustCenterDocumentAccess struct { - ID gid.GID `db:"id"` - OrganizationID gid.GID `db:"organization_id"` - TrustCenterAccessID gid.GID `db:"trust_center_access_id"` - DocumentID *gid.GID `db:"document_id"` - ReportID *gid.GID `db:"report_id"` - TrustCenterFileID *gid.GID `db:"trust_center_file_id"` - Active bool `db:"active"` - Requested bool `db:"requested"` - CreatedAt time.Time `db:"created_at"` - UpdatedAt time.Time `db:"updated_at"` + ID gid.GID `db:"id"` + OrganizationID gid.GID `db:"organization_id"` + TrustCenterAccessID gid.GID `db:"trust_center_access_id"` + DocumentID *gid.GID `db:"document_id"` + ReportID *gid.GID `db:"report_id"` + TrustCenterFileID *gid.GID `db:"trust_center_file_id"` + Active bool `db:"active"` + Status TrustCenterDocumentAccessStatus `db:"status"` + Requested bool `db:"requested"` + CreatedAt time.Time `db:"created_at"` + UpdatedAt time.Time `db:"updated_at"` } TrustCenterDocumentAccesses []*TrustCenterDocumentAccess @@ -85,6 +86,7 @@ SELECT report_id, trust_center_file_id, active, + status, requested, created_at, updated_at @@ -135,6 +137,7 @@ SELECT report_id, trust_center_file_id, active, + status, requested, created_at, updated_at @@ -186,6 +189,7 @@ SELECT report_id, trust_center_file_id, active, + status, requested, created_at, updated_at @@ -236,6 +240,7 @@ INSERT INTO trust_center_document_accesses ( report_id, trust_center_file_id, active, + status, requested, created_at, updated_at @@ -248,6 +253,7 @@ INSERT INTO trust_center_document_accesses ( @report_id, @trust_center_file_id, @active, + @status::trust_center_document_access_status, @requested, @created_at, @updated_at @@ -262,6 +268,7 @@ INSERT INTO trust_center_document_accesses ( "document_id": tcda.DocumentID, "report_id": tcda.ReportID, "trust_center_file_id": tcda.TrustCenterFileID, + "status": tcda.Status, "active": tcda.Active, "requested": tcda.Requested, "created_at": tcda.CreatedAt, @@ -302,7 +309,7 @@ func (tcda *TrustCenterDocumentAccess) Update( ) error { q := ` UPDATE trust_center_document_accesses SET - active = @active, + status = @status::trust_center_document_access_status, updated_at = @updated_at WHERE %s @@ -313,7 +320,7 @@ WHERE args := pgx.StrictNamedArgs{ "id": tcda.ID, - "active": tcda.Active, + "status": tcda.Status, "updated_at": tcda.UpdatedAt, } maps.Copy(args, scope.SQLArguments()) @@ -401,7 +408,7 @@ WHERE %s AND trust_center_access_id = @trust_center_access_id AND requested = true - AND active = false + AND status = 'REQUESTED'::trust_center_document_access_status ` q = fmt.Sprintf(q, scope.SQLFragment()) @@ -435,7 +442,7 @@ FROM WHERE %s AND trust_center_access_id = @trust_center_access_id - AND active = true + AND status = 'GRANTED'::trust_center_document_access_status ` q = fmt.Sprintf(q, scope.SQLFragment()) @@ -525,6 +532,7 @@ final_items AS ( ai.report_id, ai.trust_center_file_id, COALESCE(tcda.active, false) AS active, + COALESCE(tcda.status, 'REQUESTED'::trust_center_document_access_status) AS status, COALESCE(tcda.requested, false) AS requested, COALESCE(tcda.created_at, ai.item_created_at) AS created_at, COALESCE(tcda.updated_at, ai.item_updated_at) AS updated_at @@ -546,6 +554,7 @@ SELECT report_id, trust_center_file_id, active, + status, requested, created_at, updated_at @@ -591,6 +600,7 @@ SELECT report_id, trust_center_file_id, active, + status, requested, created_at, updated_at @@ -623,7 +633,7 @@ WHERE return nil } -func DeactivateByTrustCenterAccessID( +func DeleteByTrustCenterAccessID( ctx context.Context, conn pg.Conn, scope Scoper, @@ -631,8 +641,7 @@ func DeactivateByTrustCenterAccessID( updatedAt time.Time, ) error { q := ` -UPDATE trust_center_document_accesses -SET active = false, updated_at = @updated_at +DELETE FROM trust_center_document_accesses WHERE %s AND trust_center_access_id = @trust_center_access_id @@ -648,7 +657,7 @@ WHERE _, err := conn.Exec(ctx, q, args) if err != nil { - return fmt.Errorf("cannot deactivate trust center document accesses: %w", err) + return fmt.Errorf("cannot delete trust center document accesses: %w", err) } return nil @@ -664,7 +673,7 @@ func ActivateByDocumentIDs( ) error { q := ` UPDATE trust_center_document_accesses -SET active = true, updated_at = @updated_at +SET status = 'GRANTED'::trust_center_document_access_status, updated_at = @updated_at WHERE %s AND trust_center_access_id = @trust_center_access_id @@ -688,7 +697,7 @@ WHERE return nil } -func DeleteByDocumentIDs( +func RejectByDocumentIDs( ctx context.Context, conn pg.Conn, scope Scoper, @@ -696,7 +705,8 @@ func DeleteByDocumentIDs( documentIDs []gid.GID, ) error { q := ` -DELETE FROM trust_center_document_accesses +UPDATE trust_center_document_accesses +SET status = 'REJECTED'::trust_center_document_access_status WHERE %s AND trust_center_access_id = @trust_center_access_id @@ -713,7 +723,7 @@ WHERE _, err := conn.Exec(ctx, q, args) if err != nil { - return fmt.Errorf("cannot delete trust center document accesses by document IDs: %w", err) + return fmt.Errorf("cannot reject trust center document accesses by document IDs: %w", err) } return nil @@ -729,7 +739,7 @@ func ActivateByReportIDs( ) error { q := ` UPDATE trust_center_document_accesses -SET active = true, updated_at = @updated_at +SET status = 'GRANTED'::trust_center_document_access_status, updated_at = @updated_at WHERE %s AND trust_center_access_id = @trust_center_access_id @@ -753,7 +763,7 @@ WHERE return nil } -func DeleteByReportIDs( +func RejectByReportIDs( ctx context.Context, conn pg.Conn, scope Scoper, @@ -761,7 +771,8 @@ func DeleteByReportIDs( reportIDs []gid.GID, ) error { q := ` -DELETE FROM trust_center_document_accesses +UPDATE trust_center_document_accesses +SET status = 'REJECTED'::trust_center_document_access_status WHERE %s AND trust_center_access_id = @trust_center_access_id @@ -778,7 +789,7 @@ WHERE _, err := conn.Exec(ctx, q, args) if err != nil { - return fmt.Errorf("cannot delete trust center document accesses by report IDs: %w", err) + return fmt.Errorf("cannot reject trust center document accesses by report IDs: %w", err) } return nil @@ -809,12 +820,24 @@ WITH document_access_data AS ( null::text AS report_id, null::text AS trust_center_file_id, false AS active, + 'REQUESTED'::trust_center_document_access_status AS status, @requested::boolean AS requested, @created_at::timestamptz AS created_at, @updated_at::timestamptz AS updated_at ) INSERT INTO trust_center_document_accesses ( - id, tenant_id, organization_id, trust_center_access_id, document_id, report_id, trust_center_file_id, active, requested, created_at, updated_at + id, + tenant_id, + organization_id, + trust_center_access_id, + document_id, + report_id, + trust_center_file_id, + active, + status, + requested, + created_at, + updated_at ) SELECT * FROM document_access_data ON CONFLICT DO NOTHING @@ -907,6 +930,7 @@ SELECT report_id, trust_center_file_id, active, + status, requested, created_at, updated_at @@ -952,7 +976,7 @@ func ActivateByTrustCenterFileIDs( ) error { q := ` UPDATE trust_center_document_accesses -SET active = true, updated_at = @updated_at +SET status = 'GRANTED'::trust_center_document_access_status, updated_at = @updated_at WHERE %s AND trust_center_access_id = @trust_center_access_id @@ -976,7 +1000,7 @@ WHERE return nil } -func DeleteByTrustCenterFileIDs( +func RejectByTrustCenterFileIDs( ctx context.Context, conn pg.Conn, scope Scoper, @@ -984,7 +1008,8 @@ func DeleteByTrustCenterFileIDs( trustCenterFileIDs []gid.GID, ) error { q := ` -DELETE FROM trust_center_document_accesses +UPDATE trust_center_document_accesses +SET status = 'REJECTED'::trust_center_document_access_status WHERE %s AND trust_center_access_id = @trust_center_access_id @@ -1001,7 +1026,7 @@ WHERE _, err := conn.Exec(ctx, q, args) if err != nil { - return fmt.Errorf("cannot delete trust center document accesses by trust center file IDs: %w", err) + return fmt.Errorf("cannot reject trust center document accesses by trust center file IDs: %w", err) } return nil @@ -1028,12 +1053,24 @@ WITH trust_center_file_access_data AS ( null::text AS report_id, unnest(@trust_center_file_ids::text[]) AS trust_center_file_id, false AS active, + 'REQUESTED'::trust_center_document_access_status AS status, @requested::boolean AS requested, @created_at::timestamptz AS created_at, @updated_at::timestamptz AS updated_at ) INSERT INTO trust_center_document_accesses ( - id, tenant_id, organization_id, trust_center_access_id, document_id, report_id, trust_center_file_id, active, requested, created_at, updated_at + id, + tenant_id, + organization_id, + trust_center_access_id, + document_id, + report_id, + trust_center_file_id, + active, + status, + requested, + created_at, + updated_at ) SELECT * FROM trust_center_file_access_data ON CONFLICT DO NOTHING diff --git a/pkg/coredata/trust_center_document_access_status.go b/pkg/coredata/trust_center_document_access_status.go new file mode 100644 index 000000000..0628f86b1 --- /dev/null +++ b/pkg/coredata/trust_center_document_access_status.go @@ -0,0 +1,49 @@ +package coredata + +import ( + "database/sql/driver" + "fmt" +) + +type TrustCenterDocumentAccessStatus string + +const ( + TrustCenterDocumentAccessStatusRequested TrustCenterDocumentAccessStatus = "REQUESTED" + TrustCenterDocumentAccessStatusGranted TrustCenterDocumentAccessStatus = "GRANTED" + TrustCenterDocumentAccessStatusRejected TrustCenterDocumentAccessStatus = "REJECTED" + TrustCenterDocumentAccessStatusRevoked TrustCenterDocumentAccessStatus = "REVOKED" +) + +func (tcdas TrustCenterDocumentAccessStatus) String() string { + return string(tcdas) +} + +func (tcdas *TrustCenterDocumentAccessStatus) Scan(value any) error { + var s string + switch v := value.(type) { + case string: + s = v + case []byte: + s = string(v) + default: + return fmt.Errorf("unsupported type for TrustCenterDocumentAccessStatus: %T", value) + } + + switch s { + case "REQUESTED": + *tcdas = TrustCenterDocumentAccessStatusRequested + case "GRANTED": + *tcdas = TrustCenterDocumentAccessStatusGranted + case "REJECTED": + *tcdas = TrustCenterDocumentAccessStatusRejected + case "REVOKED": + *tcdas = TrustCenterDocumentAccessStatusRevoked + default: + return fmt.Errorf("invalid TrustCenterDocumentAccessStatus value: %q", s) + } + return nil +} + +func (tcdas TrustCenterDocumentAccessStatus) Value() (driver.Value, error) { + return tcdas.String(), nil +} diff --git a/pkg/probo/trust_center_access_service.go b/pkg/probo/trust_center_access_service.go index e4f8dfe60..b928aba85 100644 --- a/pkg/probo/trust_center_access_service.go +++ b/pkg/probo/trust_center_access_service.go @@ -397,8 +397,8 @@ func (s TrustCenterAccessService) upsertDocumentAccesses( return nil } - if err := coredata.DeactivateByTrustCenterAccessID(ctx, tx, s.svc.scope, accessID, now); err != nil { - return fmt.Errorf("cannot deactivate existing document accesses: %w", err) + if err := coredata.DeleteByTrustCenterAccessID(ctx, tx, s.svc.scope, accessID, now); err != nil { + return fmt.Errorf("cannot delete existing document accesses: %w", err) } if documentIDs != nil { diff --git a/pkg/server/api/console/v1/schema.graphql b/pkg/server/api/console/v1/schema.graphql index 52780e844..98cc96125 100644 --- a/pkg/server/api/console/v1/schema.graphql +++ b/pkg/server/api/console/v1/schema.graphql @@ -91,10 +91,12 @@ enum InvitationStatus @goEnum(value: "go.probo.inc/probo/pkg/coredata.InvitationStatusExpired") } -enum MembershipRole @goModel(model: "go.probo.inc/probo/pkg/coredata.MembershipRole") { +enum MembershipRole + @goModel(model: "go.probo.inc/probo/pkg/coredata.MembershipRole") { OWNER @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleOwner") ADMIN @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleAdmin") - EMPLOYEE @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleEmployee") + EMPLOYEE + @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleEmployee") VIEWER @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleViewer") } @@ -102,7 +104,6 @@ enum APIRole @goModel(model: "go.probo.inc/probo/pkg/coredata.APIRole") { FULL @goEnum(value: "go.probo.inc/probo/pkg/coredata.APIRoleFull") } - enum DocumentStatus @goModel(model: "go.probo.inc/probo/pkg/coredata.DocumentStatus") { DRAFT @goEnum(value: "go.probo.inc/probo/pkg/coredata.DocumentStatusDraft") @@ -172,6 +173,28 @@ enum TrustCenterVisibility ) } +enum TrustCenterDocumentAccessStatus + @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" + ) +} + enum NonconformityStatus @goModel(model: "go.probo.inc/probo/pkg/coredata.NonconformityStatus") { OPEN @goEnum(value: "go.probo.inc/probo/pkg/coredata.NonconformityStatusOpen") @@ -1740,7 +1763,7 @@ type Vendor implements Node { ): VendorComplianceReportConnection! @goField(forceResolver: true) businessAssociateAgreement: VendorBusinessAssociateAgreement - @goField(forceResolver: true) + @goField(forceResolver: true) dataPrivacyAgreement: VendorDataPrivacyAgreement @goField(forceResolver: true) contacts( @@ -1864,7 +1887,8 @@ type Framework implements Node { updatedAt: Datetime! } -type Control implements Node @goModel( +type Control implements Node + @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.Control" ) { id: ID! @@ -2032,9 +2056,10 @@ type Document implements Node { updatedAt: Datetime! } -type SignableDocument @goModel( +type SignableDocument + @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.SignableDocument" - ){ + ) { id: ID! title: String! description: String @@ -2339,6 +2364,7 @@ type TrustCenterDocumentAccess model: "go.probo.inc/probo/pkg/server/api/console/v1/types.TrustCenterDocumentAccess" ) { active: Boolean! + status: TrustCenterDocumentAccessStatus! requested: Boolean! document: Document @goField(forceResolver: true) report: Report @goField(forceResolver: true) @@ -2784,7 +2810,8 @@ type Mutation { # Organization mutations createOrganization( input: CreateOrganizationInput! - ): CreateOrganizationPayload! updateOrganization( + ): CreateOrganizationPayload! + updateOrganization( input: UpdateOrganizationInput! ): UpdateOrganizationPayload! updateOrganizationContext( @@ -2792,7 +2819,8 @@ type Mutation { ): UpdateOrganizationContextPayload! deleteOrganizationHorizontalLogo( input: DeleteOrganizationHorizontalLogoInput! - ): DeleteOrganizationHorizontalLogoPayload! deleteOrganization( + ): DeleteOrganizationHorizontalLogoPayload! + deleteOrganization( input: DeleteOrganizationInput! ): DeleteOrganizationPayload! updateTrustCenter(input: UpdateTrustCenterInput!): UpdateTrustCenterPayload! @@ -2839,96 +2867,138 @@ type Mutation { confirmEmail(input: ConfirmEmailInput!): ConfirmEmailPayload! inviteUser(input: InviteUserInput!): InviteUserPayload! acceptInvitation(input: AcceptInvitationInput!): AcceptInvitationPayload! - deleteInvitation(input: DeleteInvitationInput!): DeleteInvitationPayload! removeMember(input: RemoveMemberInput!): RemoveMemberPayload! + deleteInvitation(input: DeleteInvitationInput!): DeleteInvitationPayload! + removeMember(input: RemoveMemberInput!): RemoveMemberPayload! updateMembership(input: UpdateMembershipInput!): UpdateMembershipPayload! # People mutations - createPeople(input: CreatePeopleInput!): CreatePeoplePayload! updatePeople(input: UpdatePeopleInput!): UpdatePeoplePayload! deletePeople(input: DeletePeopleInput!): DeletePeoplePayload! + 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! + createVendor(input: CreateVendorInput!): CreateVendorPayload! + updateVendor(input: UpdateVendorInput!): UpdateVendorPayload! + deleteVendor(input: DeleteVendorInput!): DeleteVendorPayload! # Vendor Contact mutations createVendorContact( input: CreateVendorContactInput! - ): CreateVendorContactPayload! updateVendorContact( + ): CreateVendorContactPayload! + updateVendorContact( input: UpdateVendorContactInput! - ): UpdateVendorContactPayload! deleteVendorContact( + ): UpdateVendorContactPayload! + deleteVendorContact( input: DeleteVendorContactInput! ): DeleteVendorContactPayload! # Vendor Service mutations createVendorService( input: CreateVendorServiceInput! - ): CreateVendorServicePayload! updateVendorService( + ): CreateVendorServicePayload! + updateVendorService( input: UpdateVendorServiceInput! - ): UpdateVendorServicePayload! deleteVendorService( + ): UpdateVendorServicePayload! + deleteVendorService( input: DeleteVendorServiceInput! ): DeleteVendorServicePayload! # Framework mutations - createFramework(input: CreateFrameworkInput!): CreateFrameworkPayload! updateFramework(input: UpdateFrameworkInput!): UpdateFrameworkPayload! importFramework(input: ImportFrameworkInput!): ImportFrameworkPayload! deleteFramework(input: DeleteFrameworkInput!): DeleteFrameworkPayload! generateFrameworkStateOfApplicability( + createFramework(input: CreateFrameworkInput!): CreateFrameworkPayload! + updateFramework(input: UpdateFrameworkInput!): UpdateFrameworkPayload! + importFramework(input: ImportFrameworkInput!): ImportFrameworkPayload! + deleteFramework(input: DeleteFrameworkInput!): DeleteFrameworkPayload! + generateFrameworkStateOfApplicability( input: GenerateFrameworkStateOfApplicabilityInput! - ): GenerateFrameworkStateOfApplicabilityPayload! exportFramework(input: ExportFrameworkInput!): ExportFrameworkPayload! + ): GenerateFrameworkStateOfApplicabilityPayload! + exportFramework(input: ExportFrameworkInput!): ExportFrameworkPayload! # Control mutations - createControl(input: CreateControlInput!): CreateControlPayload! updateControl(input: UpdateControlInput!): UpdateControlPayload! deleteControl(input: DeleteControlInput!): DeleteControlPayload! + 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! + createMeasure(input: CreateMeasureInput!): CreateMeasurePayload! + updateMeasure(input: UpdateMeasureInput!): UpdateMeasurePayload! + importMeasure(input: ImportMeasureInput!): ImportMeasurePayload! + deleteMeasure(input: DeleteMeasureInput!): DeleteMeasurePayload! # Control mutations createControlMeasureMapping( input: CreateControlMeasureMappingInput! - ): CreateControlMeasureMappingPayload! createControlDocumentMapping( + ): CreateControlMeasureMappingPayload! + createControlDocumentMapping( input: CreateControlDocumentMappingInput! - ): CreateControlDocumentMappingPayload! deleteControlMeasureMapping( + ): CreateControlDocumentMappingPayload! + deleteControlMeasureMapping( input: DeleteControlMeasureMappingInput! - ): DeleteControlMeasureMappingPayload! deleteControlDocumentMapping( + ): DeleteControlMeasureMappingPayload! + deleteControlDocumentMapping( input: DeleteControlDocumentMappingInput! - ): DeleteControlDocumentMappingPayload! createControlAuditMapping( + ): DeleteControlDocumentMappingPayload! + createControlAuditMapping( input: CreateControlAuditMappingInput! - ): CreateControlAuditMappingPayload! deleteControlAuditMapping( + ): CreateControlAuditMappingPayload! + deleteControlAuditMapping( input: DeleteControlAuditMappingInput! - ): DeleteControlAuditMappingPayload! createControlSnapshotMapping( + ): DeleteControlAuditMappingPayload! + createControlSnapshotMapping( input: CreateControlSnapshotMappingInput! - ): CreateControlSnapshotMappingPayload! deleteControlSnapshotMapping( + ): CreateControlSnapshotMappingPayload! + deleteControlSnapshotMapping( input: DeleteControlSnapshotMappingInput! ): DeleteControlSnapshotMappingPayload! # Task mutations - createTask(input: CreateTaskInput!): CreateTaskPayload! updateTask(input: UpdateTaskInput!): UpdateTaskPayload! deleteTask(input: DeleteTaskInput!): DeleteTaskPayload! assignTask(input: AssignTaskInput!): AssignTaskPayload! unassignTask(input: UnassignTaskInput!): UnassignTaskPayload! + 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( + createRisk(input: CreateRiskInput!): CreateRiskPayload! + updateRisk(input: UpdateRiskInput!): UpdateRiskPayload! + deleteRisk(input: DeleteRiskInput!): DeleteRiskPayload! + createRiskMeasureMapping( input: CreateRiskMeasureMappingInput! - ): CreateRiskMeasureMappingPayload! deleteRiskMeasureMapping( + ): CreateRiskMeasureMappingPayload! + deleteRiskMeasureMapping( input: DeleteRiskMeasureMappingInput! ): DeleteRiskMeasureMappingPayload! createRiskDocumentMapping( input: CreateRiskDocumentMappingInput! - ): CreateRiskDocumentMappingPayload! deleteRiskDocumentMapping( + ): CreateRiskDocumentMappingPayload! + deleteRiskDocumentMapping( input: DeleteRiskDocumentMappingInput! ): DeleteRiskDocumentMappingPayload! createRiskObligationMapping( input: CreateRiskObligationMappingInput! - ): CreateRiskObligationMappingPayload! deleteRiskObligationMapping( + ): CreateRiskObligationMappingPayload! + deleteRiskObligationMapping( input: DeleteRiskObligationMappingInput! ): DeleteRiskObligationMappingPayload! # Evidence mutations - deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload! uploadMeasureEvidence( + deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload! + uploadMeasureEvidence( input: UploadMeasureEvidenceInput! ): UploadMeasureEvidencePayload! # Vendor Compliance Report mutations uploadVendorComplianceReport( input: UploadVendorComplianceReportInput! - ): UploadVendorComplianceReportPayload! deleteVendorComplianceReport( + ): UploadVendorComplianceReportPayload! + deleteVendorComplianceReport( input: DeleteVendorComplianceReportInput! ): DeleteVendorComplianceReportPayload! # Vendor Business Associate Agreement mutations uploadVendorBusinessAssociateAgreement( input: UploadVendorBusinessAssociateAgreementInput! - ): UploadVendorBusinessAssociateAgreementPayload! updateVendorBusinessAssociateAgreement( + ): UploadVendorBusinessAssociateAgreementPayload! + updateVendorBusinessAssociateAgreement( input: UpdateVendorBusinessAssociateAgreementInput! - ): UpdateVendorBusinessAssociateAgreementPayload! deleteVendorBusinessAssociateAgreement( + ): UpdateVendorBusinessAssociateAgreementPayload! + deleteVendorBusinessAssociateAgreement( input: DeleteVendorBusinessAssociateAgreementInput! ): DeleteVendorBusinessAssociateAgreementPayload! # Vendor Data Privacy Agreement mutations uploadVendorDataPrivacyAgreement( input: UploadVendorDataPrivacyAgreementInput! - ): UploadVendorDataPrivacyAgreementPayload! updateVendorDataPrivacyAgreement( + ): UploadVendorDataPrivacyAgreementPayload! + updateVendorDataPrivacyAgreement( input: UpdateVendorDataPrivacyAgreementInput! - ): UpdateVendorDataPrivacyAgreementPayload! deleteVendorDataPrivacyAgreement( + ): UpdateVendorDataPrivacyAgreementPayload! + deleteVendorDataPrivacyAgreement( input: DeleteVendorDataPrivacyAgreementInput! ): DeleteVendorDataPrivacyAgreementPayload! # Document mutations @@ -2941,30 +3011,39 @@ type Mutation { deleteMeeting(input: DeleteMeetingInput!): DeleteMeetingPayload! publishDocumentVersion( input: PublishDocumentVersionInput! - ): PublishDocumentVersionPayload! bulkPublishDocumentVersions( + ): PublishDocumentVersionPayload! + bulkPublishDocumentVersions( input: BulkPublishDocumentVersionsInput! - ): BulkPublishDocumentVersionsPayload! bulkDeleteDocuments( + ): BulkPublishDocumentVersionsPayload! + bulkDeleteDocuments( input: BulkDeleteDocumentsInput! - ): BulkDeleteDocumentsPayload! bulkExportDocuments( + ): BulkDeleteDocumentsPayload! + bulkExportDocuments( input: BulkExportDocumentsInput! - ): BulkExportDocumentsPayload! generateDocumentChangelog( + ): BulkExportDocumentsPayload! + generateDocumentChangelog( input: GenerateDocumentChangelogInput! - ): GenerateDocumentChangelogPayload! createDraftDocumentVersion( + ): GenerateDocumentChangelogPayload! + createDraftDocumentVersion( input: CreateDraftDocumentVersionInput! - ): CreateDraftDocumentVersionPayload! deleteDraftDocumentVersion( + ): CreateDraftDocumentVersionPayload! + deleteDraftDocumentVersion( input: DeleteDraftDocumentVersionInput! - ): DeleteDraftDocumentVersionPayload! updateDocumentVersion( + ): DeleteDraftDocumentVersionPayload! + updateDocumentVersion( input: UpdateDocumentVersionInput! - ): UpdateDocumentVersionPayload! requestSignature(input: RequestSignatureInput!): RequestSignaturePayload! bulkRequestSignatures( + ): UpdateDocumentVersionPayload! + requestSignature(input: RequestSignatureInput!): RequestSignaturePayload! + bulkRequestSignatures( input: BulkRequestSignaturesInput! - ): BulkRequestSignaturesPayload! sendSigningNotifications( + ): BulkRequestSignaturesPayload! + sendSigningNotifications( input: SendSigningNotificationsInput! - ): SendSigningNotificationsPayload! cancelSignatureRequest( + ): SendSigningNotificationsPayload! + cancelSignatureRequest( input: CancelSignatureRequestInput! ): CancelSignatureRequestPayload! - signDocument( - input: SignDocumentInput! - ): SignDocumentPayload! + signDocument(input: SignDocumentInput!): SignDocumentPayload! exportDocumentVersionPDF( input: ExportDocumentVersionPDFInput! ): ExportDocumentVersionPDFPayload! @@ -2975,41 +3054,59 @@ type Mutation { input: CreateVendorRiskAssessmentInput! ): CreateVendorRiskAssessmentPayload! 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! - createAudit(input: CreateAuditInput!): CreateAuditPayload! updateAudit(input: UpdateAuditInput!): UpdateAuditPayload! deleteAudit(input: DeleteAuditInput!): DeleteAuditPayload! uploadAuditReport(input: UploadAuditReportInput!): UploadAuditReportPayload! deleteAuditReport(input: DeleteAuditReportInput!): DeleteAuditReportPayload! + createAsset(input: CreateAssetInput!): CreateAssetPayload! + updateAsset(input: UpdateAssetInput!): UpdateAssetPayload! + deleteAsset(input: DeleteAssetInput!): DeleteAssetPayload! + createDatum(input: CreateDatumInput!): CreateDatumPayload! + updateDatum(input: UpdateDatumInput!): UpdateDatumPayload! + deleteDatum(input: DeleteDatumInput!): DeleteDatumPayload! + createAudit(input: CreateAuditInput!): CreateAuditPayload! + updateAudit(input: UpdateAuditInput!): UpdateAuditPayload! + deleteAudit(input: DeleteAuditInput!): DeleteAuditPayload! + uploadAuditReport(input: UploadAuditReportInput!): UploadAuditReportPayload! + deleteAuditReport(input: DeleteAuditReportInput!): DeleteAuditReportPayload! # Nonconformity mutations createNonconformity( input: CreateNonconformityInput! - ): CreateNonconformityPayload! updateNonconformity( + ): CreateNonconformityPayload! + updateNonconformity( input: UpdateNonconformityInput! - ): UpdateNonconformityPayload! deleteNonconformity( + ): UpdateNonconformityPayload! + deleteNonconformity( input: DeleteNonconformityInput! ): DeleteNonconformityPayload! # Obligation mutations - createObligation(input: CreateObligationInput!): CreateObligationPayload! updateObligation(input: UpdateObligationInput!): UpdateObligationPayload! deleteObligation(input: DeleteObligationInput!): DeleteObligationPayload! + createObligation(input: CreateObligationInput!): CreateObligationPayload! + updateObligation(input: UpdateObligationInput!): UpdateObligationPayload! + deleteObligation(input: DeleteObligationInput!): DeleteObligationPayload! # Continual Improvement mutations createContinualImprovement( input: CreateContinualImprovementInput! - ): CreateContinualImprovementPayload! updateContinualImprovement( + ): CreateContinualImprovementPayload! + updateContinualImprovement( input: UpdateContinualImprovementInput! - ): UpdateContinualImprovementPayload! deleteContinualImprovement( + ): UpdateContinualImprovementPayload! + deleteContinualImprovement( input: DeleteContinualImprovementInput! ): DeleteContinualImprovementPayload! # Processing Activity mutations createProcessingActivity( input: CreateProcessingActivityInput! - ): CreateProcessingActivityPayload! updateProcessingActivity( + ): CreateProcessingActivityPayload! + updateProcessingActivity( input: UpdateProcessingActivityInput! - ): UpdateProcessingActivityPayload! deleteProcessingActivity( + ): UpdateProcessingActivityPayload! + deleteProcessingActivity( input: DeleteProcessingActivityInput! ): DeleteProcessingActivityPayload! # Snapshot mutations - createSnapshot(input: CreateSnapshotInput!): CreateSnapshotPayload! deleteSnapshot(input: DeleteSnapshotInput!): DeleteSnapshotPayload! + createSnapshot(input: CreateSnapshotInput!): CreateSnapshotPayload! + deleteSnapshot(input: DeleteSnapshotInput!): DeleteSnapshotPayload! # Custom Domain mutations createCustomDomain( input: CreateCustomDomainInput! - ): CreateCustomDomainPayload! deleteCustomDomain( + ): CreateCustomDomainPayload! + deleteCustomDomain( input: DeleteCustomDomainInput! ): DeleteCustomDomainPayload! # SAML Configuration mutations (OWNER/ADMIN only) @@ -3022,11 +3119,16 @@ type Mutation { # Step 3: Configure SAML (only allowed after domain is verified) createSAMLConfiguration( input: CreateSAMLConfigurationInput! - ): CreateSAMLConfigurationPayload! updateSAMLConfiguration( + ): CreateSAMLConfigurationPayload! + updateSAMLConfiguration( input: UpdateSAMLConfigurationInput! - ): UpdateSAMLConfigurationPayload! deleteSAMLConfiguration( + ): UpdateSAMLConfigurationPayload! + deleteSAMLConfiguration( input: DeleteSAMLConfigurationInput! - ): DeleteSAMLConfigurationPayload! enableSAML(input: EnableSAMLInput!): EnableSAMLPayload! disableSAML(input: DisableSAMLInput!): DisableSAMLPayload!} + ): DeleteSAMLConfigurationPayload! + enableSAML(input: EnableSAMLInput!): EnableSAMLPayload! + disableSAML(input: DisableSAMLInput!): DisableSAMLPayload! +} # Input Types input GenerateFrameworkStateOfApplicabilityInput { @@ -4228,7 +4330,10 @@ type DeleteMeasurePayload { deletedMeasureId: ID! } -type DocumentVersion implements Node @goModel(model: "go.probo.inc/probo/pkg/server/api/console/v1/types.DocumentVersion") { +type DocumentVersion implements Node + @goModel( + model: "go.probo.inc/probo/pkg/server/api/console/v1/types.DocumentVersion" + ) { id: ID! document: Document! @goField(forceResolver: true) status: DocumentStatus! @@ -4523,7 +4628,8 @@ type DeleteAssetPayload { deletedAssetId: ID! } -type Datum implements Node @goModel(model: "go.probo.inc/probo/pkg/server/api/console/v1/types.Datum") { +type Datum implements Node + @goModel(model: "go.probo.inc/probo/pkg/server/api/console/v1/types.Datum") { id: ID! snapshotId: ID name: String! diff --git a/pkg/server/api/console/v1/schema/schema.go b/pkg/server/api/console/v1/schema/schema.go index 877fa1b91..87fbe697b 100644 --- a/pkg/server/api/console/v1/schema/schema.go +++ b/pkg/server/api/console/v1/schema/schema.go @@ -1456,6 +1456,7 @@ type ComplexityRoot struct { Document func(childComplexity int) int Report func(childComplexity int) int Requested func(childComplexity int) int + Status func(childComplexity int) int TrustCenterFile func(childComplexity int) int } @@ -2223,6 +2224,8 @@ type TrustCenterAccessResolver interface { AvailableDocumentAccesses(ctx context.Context, obj *types.TrustCenterAccess, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.OrderBy[coredata.TrustCenterDocumentAccessOrderField]) (*types.TrustCenterDocumentAccessConnection, error) } type TrustCenterDocumentAccessResolver interface { + Status(ctx context.Context, obj *types.TrustCenterDocumentAccess) (coredata.TrustCenterDocumentAccessStatus, error) + Document(ctx context.Context, obj *types.TrustCenterDocumentAccess) (*types.Document, error) Report(ctx context.Context, obj *types.TrustCenterDocumentAccess) (*types.Report, error) TrustCenterFile(ctx context.Context, obj *types.TrustCenterDocumentAccess) (*types.TrustCenterFile, error) @@ -8033,6 +8036,12 @@ func (e *executableSchema) Complexity(ctx context.Context, typeName, field strin } return e.complexity.TrustCenterDocumentAccess.Requested(childComplexity), true + case "TrustCenterDocumentAccess.status": + if e.complexity.TrustCenterDocumentAccess.Status == nil { + break + } + + return e.complexity.TrustCenterDocumentAccess.Status(childComplexity), true case "TrustCenterDocumentAccess.trustCenterFile": if e.complexity.TrustCenterDocumentAccess.TrustCenterFile == nil { break @@ -9644,10 +9653,12 @@ enum InvitationStatus @goEnum(value: "go.probo.inc/probo/pkg/coredata.InvitationStatusExpired") } -enum MembershipRole @goModel(model: "go.probo.inc/probo/pkg/coredata.MembershipRole") { +enum MembershipRole + @goModel(model: "go.probo.inc/probo/pkg/coredata.MembershipRole") { OWNER @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleOwner") ADMIN @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleAdmin") - EMPLOYEE @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleEmployee") + EMPLOYEE + @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleEmployee") VIEWER @goEnum(value: "go.probo.inc/probo/pkg/coredata.MembershipRoleViewer") } @@ -9655,7 +9666,6 @@ enum APIRole @goModel(model: "go.probo.inc/probo/pkg/coredata.APIRole") { FULL @goEnum(value: "go.probo.inc/probo/pkg/coredata.APIRoleFull") } - enum DocumentStatus @goModel(model: "go.probo.inc/probo/pkg/coredata.DocumentStatus") { DRAFT @goEnum(value: "go.probo.inc/probo/pkg/coredata.DocumentStatusDraft") @@ -9725,6 +9735,28 @@ enum TrustCenterVisibility ) } +enum TrustCenterDocumentAccessStatus + @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" + ) +} + enum NonconformityStatus @goModel(model: "go.probo.inc/probo/pkg/coredata.NonconformityStatus") { OPEN @goEnum(value: "go.probo.inc/probo/pkg/coredata.NonconformityStatusOpen") @@ -11293,7 +11325,7 @@ type Vendor implements Node { ): VendorComplianceReportConnection! @goField(forceResolver: true) businessAssociateAgreement: VendorBusinessAssociateAgreement - @goField(forceResolver: true) + @goField(forceResolver: true) dataPrivacyAgreement: VendorDataPrivacyAgreement @goField(forceResolver: true) contacts( @@ -11417,7 +11449,8 @@ type Framework implements Node { updatedAt: Datetime! } -type Control implements Node @goModel( +type Control implements Node + @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.Control" ) { id: ID! @@ -11585,9 +11618,10 @@ type Document implements Node { updatedAt: Datetime! } -type SignableDocument @goModel( +type SignableDocument + @goModel( model: "go.probo.inc/probo/pkg/server/api/console/v1/types.SignableDocument" - ){ + ) { id: ID! title: String! description: String @@ -11892,6 +11926,7 @@ type TrustCenterDocumentAccess model: "go.probo.inc/probo/pkg/server/api/console/v1/types.TrustCenterDocumentAccess" ) { active: Boolean! + status: TrustCenterDocumentAccessStatus! requested: Boolean! document: Document @goField(forceResolver: true) report: Report @goField(forceResolver: true) @@ -12337,7 +12372,8 @@ type Mutation { # Organization mutations createOrganization( input: CreateOrganizationInput! - ): CreateOrganizationPayload! updateOrganization( + ): CreateOrganizationPayload! + updateOrganization( input: UpdateOrganizationInput! ): UpdateOrganizationPayload! updateOrganizationContext( @@ -12345,7 +12381,8 @@ type Mutation { ): UpdateOrganizationContextPayload! deleteOrganizationHorizontalLogo( input: DeleteOrganizationHorizontalLogoInput! - ): DeleteOrganizationHorizontalLogoPayload! deleteOrganization( + ): DeleteOrganizationHorizontalLogoPayload! + deleteOrganization( input: DeleteOrganizationInput! ): DeleteOrganizationPayload! updateTrustCenter(input: UpdateTrustCenterInput!): UpdateTrustCenterPayload! @@ -12392,96 +12429,138 @@ type Mutation { confirmEmail(input: ConfirmEmailInput!): ConfirmEmailPayload! inviteUser(input: InviteUserInput!): InviteUserPayload! acceptInvitation(input: AcceptInvitationInput!): AcceptInvitationPayload! - deleteInvitation(input: DeleteInvitationInput!): DeleteInvitationPayload! removeMember(input: RemoveMemberInput!): RemoveMemberPayload! + deleteInvitation(input: DeleteInvitationInput!): DeleteInvitationPayload! + removeMember(input: RemoveMemberInput!): RemoveMemberPayload! updateMembership(input: UpdateMembershipInput!): UpdateMembershipPayload! # People mutations - createPeople(input: CreatePeopleInput!): CreatePeoplePayload! updatePeople(input: UpdatePeopleInput!): UpdatePeoplePayload! deletePeople(input: DeletePeopleInput!): DeletePeoplePayload! + 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! + createVendor(input: CreateVendorInput!): CreateVendorPayload! + updateVendor(input: UpdateVendorInput!): UpdateVendorPayload! + deleteVendor(input: DeleteVendorInput!): DeleteVendorPayload! # Vendor Contact mutations createVendorContact( input: CreateVendorContactInput! - ): CreateVendorContactPayload! updateVendorContact( + ): CreateVendorContactPayload! + updateVendorContact( input: UpdateVendorContactInput! - ): UpdateVendorContactPayload! deleteVendorContact( + ): UpdateVendorContactPayload! + deleteVendorContact( input: DeleteVendorContactInput! ): DeleteVendorContactPayload! # Vendor Service mutations createVendorService( input: CreateVendorServiceInput! - ): CreateVendorServicePayload! updateVendorService( + ): CreateVendorServicePayload! + updateVendorService( input: UpdateVendorServiceInput! - ): UpdateVendorServicePayload! deleteVendorService( + ): UpdateVendorServicePayload! + deleteVendorService( input: DeleteVendorServiceInput! ): DeleteVendorServicePayload! # Framework mutations - createFramework(input: CreateFrameworkInput!): CreateFrameworkPayload! updateFramework(input: UpdateFrameworkInput!): UpdateFrameworkPayload! importFramework(input: ImportFrameworkInput!): ImportFrameworkPayload! deleteFramework(input: DeleteFrameworkInput!): DeleteFrameworkPayload! generateFrameworkStateOfApplicability( + createFramework(input: CreateFrameworkInput!): CreateFrameworkPayload! + updateFramework(input: UpdateFrameworkInput!): UpdateFrameworkPayload! + importFramework(input: ImportFrameworkInput!): ImportFrameworkPayload! + deleteFramework(input: DeleteFrameworkInput!): DeleteFrameworkPayload! + generateFrameworkStateOfApplicability( input: GenerateFrameworkStateOfApplicabilityInput! - ): GenerateFrameworkStateOfApplicabilityPayload! exportFramework(input: ExportFrameworkInput!): ExportFrameworkPayload! + ): GenerateFrameworkStateOfApplicabilityPayload! + exportFramework(input: ExportFrameworkInput!): ExportFrameworkPayload! # Control mutations - createControl(input: CreateControlInput!): CreateControlPayload! updateControl(input: UpdateControlInput!): UpdateControlPayload! deleteControl(input: DeleteControlInput!): DeleteControlPayload! + 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! + createMeasure(input: CreateMeasureInput!): CreateMeasurePayload! + updateMeasure(input: UpdateMeasureInput!): UpdateMeasurePayload! + importMeasure(input: ImportMeasureInput!): ImportMeasurePayload! + deleteMeasure(input: DeleteMeasureInput!): DeleteMeasurePayload! # Control mutations createControlMeasureMapping( input: CreateControlMeasureMappingInput! - ): CreateControlMeasureMappingPayload! createControlDocumentMapping( + ): CreateControlMeasureMappingPayload! + createControlDocumentMapping( input: CreateControlDocumentMappingInput! - ): CreateControlDocumentMappingPayload! deleteControlMeasureMapping( + ): CreateControlDocumentMappingPayload! + deleteControlMeasureMapping( input: DeleteControlMeasureMappingInput! - ): DeleteControlMeasureMappingPayload! deleteControlDocumentMapping( + ): DeleteControlMeasureMappingPayload! + deleteControlDocumentMapping( input: DeleteControlDocumentMappingInput! - ): DeleteControlDocumentMappingPayload! createControlAuditMapping( + ): DeleteControlDocumentMappingPayload! + createControlAuditMapping( input: CreateControlAuditMappingInput! - ): CreateControlAuditMappingPayload! deleteControlAuditMapping( + ): CreateControlAuditMappingPayload! + deleteControlAuditMapping( input: DeleteControlAuditMappingInput! - ): DeleteControlAuditMappingPayload! createControlSnapshotMapping( + ): DeleteControlAuditMappingPayload! + createControlSnapshotMapping( input: CreateControlSnapshotMappingInput! - ): CreateControlSnapshotMappingPayload! deleteControlSnapshotMapping( + ): CreateControlSnapshotMappingPayload! + deleteControlSnapshotMapping( input: DeleteControlSnapshotMappingInput! ): DeleteControlSnapshotMappingPayload! # Task mutations - createTask(input: CreateTaskInput!): CreateTaskPayload! updateTask(input: UpdateTaskInput!): UpdateTaskPayload! deleteTask(input: DeleteTaskInput!): DeleteTaskPayload! assignTask(input: AssignTaskInput!): AssignTaskPayload! unassignTask(input: UnassignTaskInput!): UnassignTaskPayload! + 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( + createRisk(input: CreateRiskInput!): CreateRiskPayload! + updateRisk(input: UpdateRiskInput!): UpdateRiskPayload! + deleteRisk(input: DeleteRiskInput!): DeleteRiskPayload! + createRiskMeasureMapping( input: CreateRiskMeasureMappingInput! - ): CreateRiskMeasureMappingPayload! deleteRiskMeasureMapping( + ): CreateRiskMeasureMappingPayload! + deleteRiskMeasureMapping( input: DeleteRiskMeasureMappingInput! ): DeleteRiskMeasureMappingPayload! createRiskDocumentMapping( input: CreateRiskDocumentMappingInput! - ): CreateRiskDocumentMappingPayload! deleteRiskDocumentMapping( + ): CreateRiskDocumentMappingPayload! + deleteRiskDocumentMapping( input: DeleteRiskDocumentMappingInput! ): DeleteRiskDocumentMappingPayload! createRiskObligationMapping( input: CreateRiskObligationMappingInput! - ): CreateRiskObligationMappingPayload! deleteRiskObligationMapping( + ): CreateRiskObligationMappingPayload! + deleteRiskObligationMapping( input: DeleteRiskObligationMappingInput! ): DeleteRiskObligationMappingPayload! # Evidence mutations - deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload! uploadMeasureEvidence( + deleteEvidence(input: DeleteEvidenceInput!): DeleteEvidencePayload! + uploadMeasureEvidence( input: UploadMeasureEvidenceInput! ): UploadMeasureEvidencePayload! # Vendor Compliance Report mutations uploadVendorComplianceReport( input: UploadVendorComplianceReportInput! - ): UploadVendorComplianceReportPayload! deleteVendorComplianceReport( + ): UploadVendorComplianceReportPayload! + deleteVendorComplianceReport( input: DeleteVendorComplianceReportInput! ): DeleteVendorComplianceReportPayload! # Vendor Business Associate Agreement mutations uploadVendorBusinessAssociateAgreement( input: UploadVendorBusinessAssociateAgreementInput! - ): UploadVendorBusinessAssociateAgreementPayload! updateVendorBusinessAssociateAgreement( + ): UploadVendorBusinessAssociateAgreementPayload! + updateVendorBusinessAssociateAgreement( input: UpdateVendorBusinessAssociateAgreementInput! - ): UpdateVendorBusinessAssociateAgreementPayload! deleteVendorBusinessAssociateAgreement( + ): UpdateVendorBusinessAssociateAgreementPayload! + deleteVendorBusinessAssociateAgreement( input: DeleteVendorBusinessAssociateAgreementInput! ): DeleteVendorBusinessAssociateAgreementPayload! # Vendor Data Privacy Agreement mutations uploadVendorDataPrivacyAgreement( input: UploadVendorDataPrivacyAgreementInput! - ): UploadVendorDataPrivacyAgreementPayload! updateVendorDataPrivacyAgreement( + ): UploadVendorDataPrivacyAgreementPayload! + updateVendorDataPrivacyAgreement( input: UpdateVendorDataPrivacyAgreementInput! - ): UpdateVendorDataPrivacyAgreementPayload! deleteVendorDataPrivacyAgreement( + ): UpdateVendorDataPrivacyAgreementPayload! + deleteVendorDataPrivacyAgreement( input: DeleteVendorDataPrivacyAgreementInput! ): DeleteVendorDataPrivacyAgreementPayload! # Document mutations @@ -12494,30 +12573,39 @@ type Mutation { deleteMeeting(input: DeleteMeetingInput!): DeleteMeetingPayload! publishDocumentVersion( input: PublishDocumentVersionInput! - ): PublishDocumentVersionPayload! bulkPublishDocumentVersions( + ): PublishDocumentVersionPayload! + bulkPublishDocumentVersions( input: BulkPublishDocumentVersionsInput! - ): BulkPublishDocumentVersionsPayload! bulkDeleteDocuments( + ): BulkPublishDocumentVersionsPayload! + bulkDeleteDocuments( input: BulkDeleteDocumentsInput! - ): BulkDeleteDocumentsPayload! bulkExportDocuments( + ): BulkDeleteDocumentsPayload! + bulkExportDocuments( input: BulkExportDocumentsInput! - ): BulkExportDocumentsPayload! generateDocumentChangelog( + ): BulkExportDocumentsPayload! + generateDocumentChangelog( input: GenerateDocumentChangelogInput! - ): GenerateDocumentChangelogPayload! createDraftDocumentVersion( + ): GenerateDocumentChangelogPayload! + createDraftDocumentVersion( input: CreateDraftDocumentVersionInput! - ): CreateDraftDocumentVersionPayload! deleteDraftDocumentVersion( + ): CreateDraftDocumentVersionPayload! + deleteDraftDocumentVersion( input: DeleteDraftDocumentVersionInput! - ): DeleteDraftDocumentVersionPayload! updateDocumentVersion( + ): DeleteDraftDocumentVersionPayload! + updateDocumentVersion( input: UpdateDocumentVersionInput! - ): UpdateDocumentVersionPayload! requestSignature(input: RequestSignatureInput!): RequestSignaturePayload! bulkRequestSignatures( + ): UpdateDocumentVersionPayload! + requestSignature(input: RequestSignatureInput!): RequestSignaturePayload! + bulkRequestSignatures( input: BulkRequestSignaturesInput! - ): BulkRequestSignaturesPayload! sendSigningNotifications( + ): BulkRequestSignaturesPayload! + sendSigningNotifications( input: SendSigningNotificationsInput! - ): SendSigningNotificationsPayload! cancelSignatureRequest( + ): SendSigningNotificationsPayload! + cancelSignatureRequest( input: CancelSignatureRequestInput! ): CancelSignatureRequestPayload! - signDocument( - input: SignDocumentInput! - ): SignDocumentPayload! + signDocument(input: SignDocumentInput!): SignDocumentPayload! exportDocumentVersionPDF( input: ExportDocumentVersionPDFInput! ): ExportDocumentVersionPDFPayload! @@ -12528,41 +12616,59 @@ type Mutation { input: CreateVendorRiskAssessmentInput! ): CreateVendorRiskAssessmentPayload! 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! - createAudit(input: CreateAuditInput!): CreateAuditPayload! updateAudit(input: UpdateAuditInput!): UpdateAuditPayload! deleteAudit(input: DeleteAuditInput!): DeleteAuditPayload! uploadAuditReport(input: UploadAuditReportInput!): UploadAuditReportPayload! deleteAuditReport(input: DeleteAuditReportInput!): DeleteAuditReportPayload! + createAsset(input: CreateAssetInput!): CreateAssetPayload! + updateAsset(input: UpdateAssetInput!): UpdateAssetPayload! + deleteAsset(input: DeleteAssetInput!): DeleteAssetPayload! + createDatum(input: CreateDatumInput!): CreateDatumPayload! + updateDatum(input: UpdateDatumInput!): UpdateDatumPayload! + deleteDatum(input: DeleteDatumInput!): DeleteDatumPayload! + createAudit(input: CreateAuditInput!): CreateAuditPayload! + updateAudit(input: UpdateAuditInput!): UpdateAuditPayload! + deleteAudit(input: DeleteAuditInput!): DeleteAuditPayload! + uploadAuditReport(input: UploadAuditReportInput!): UploadAuditReportPayload! + deleteAuditReport(input: DeleteAuditReportInput!): DeleteAuditReportPayload! # Nonconformity mutations createNonconformity( input: CreateNonconformityInput! - ): CreateNonconformityPayload! updateNonconformity( + ): CreateNonconformityPayload! + updateNonconformity( input: UpdateNonconformityInput! - ): UpdateNonconformityPayload! deleteNonconformity( + ): UpdateNonconformityPayload! + deleteNonconformity( input: DeleteNonconformityInput! ): DeleteNonconformityPayload! # Obligation mutations - createObligation(input: CreateObligationInput!): CreateObligationPayload! updateObligation(input: UpdateObligationInput!): UpdateObligationPayload! deleteObligation(input: DeleteObligationInput!): DeleteObligationPayload! + createObligation(input: CreateObligationInput!): CreateObligationPayload! + updateObligation(input: UpdateObligationInput!): UpdateObligationPayload! + deleteObligation(input: DeleteObligationInput!): DeleteObligationPayload! # Continual Improvement mutations createContinualImprovement( input: CreateContinualImprovementInput! - ): CreateContinualImprovementPayload! updateContinualImprovement( + ): CreateContinualImprovementPayload! + updateContinualImprovement( input: UpdateContinualImprovementInput! - ): UpdateContinualImprovementPayload! deleteContinualImprovement( + ): UpdateContinualImprovementPayload! + deleteContinualImprovement( input: DeleteContinualImprovementInput! ): DeleteContinualImprovementPayload! # Processing Activity mutations createProcessingActivity( input: CreateProcessingActivityInput! - ): CreateProcessingActivityPayload! updateProcessingActivity( + ): CreateProcessingActivityPayload! + updateProcessingActivity( input: UpdateProcessingActivityInput! - ): UpdateProcessingActivityPayload! deleteProcessingActivity( + ): UpdateProcessingActivityPayload! + deleteProcessingActivity( input: DeleteProcessingActivityInput! ): DeleteProcessingActivityPayload! # Snapshot mutations - createSnapshot(input: CreateSnapshotInput!): CreateSnapshotPayload! deleteSnapshot(input: DeleteSnapshotInput!): DeleteSnapshotPayload! + createSnapshot(input: CreateSnapshotInput!): CreateSnapshotPayload! + deleteSnapshot(input: DeleteSnapshotInput!): DeleteSnapshotPayload! # Custom Domain mutations createCustomDomain( input: CreateCustomDomainInput! - ): CreateCustomDomainPayload! deleteCustomDomain( + ): CreateCustomDomainPayload! + deleteCustomDomain( input: DeleteCustomDomainInput! ): DeleteCustomDomainPayload! # SAML Configuration mutations (OWNER/ADMIN only) @@ -12575,11 +12681,16 @@ type Mutation { # Step 3: Configure SAML (only allowed after domain is verified) createSAMLConfiguration( input: CreateSAMLConfigurationInput! - ): CreateSAMLConfigurationPayload! updateSAMLConfiguration( + ): CreateSAMLConfigurationPayload! + updateSAMLConfiguration( input: UpdateSAMLConfigurationInput! - ): UpdateSAMLConfigurationPayload! deleteSAMLConfiguration( + ): UpdateSAMLConfigurationPayload! + deleteSAMLConfiguration( input: DeleteSAMLConfigurationInput! - ): DeleteSAMLConfigurationPayload! enableSAML(input: EnableSAMLInput!): EnableSAMLPayload! disableSAML(input: DisableSAMLInput!): DisableSAMLPayload!} + ): DeleteSAMLConfigurationPayload! + enableSAML(input: EnableSAMLInput!): EnableSAMLPayload! + disableSAML(input: DisableSAMLInput!): DisableSAMLPayload! +} # Input Types input GenerateFrameworkStateOfApplicabilityInput { @@ -13781,7 +13892,10 @@ type DeleteMeasurePayload { deletedMeasureId: ID! } -type DocumentVersion implements Node @goModel(model: "go.probo.inc/probo/pkg/server/api/console/v1/types.DocumentVersion") { +type DocumentVersion implements Node + @goModel( + model: "go.probo.inc/probo/pkg/server/api/console/v1/types.DocumentVersion" + ) { id: ID! document: Document! @goField(forceResolver: true) status: DocumentStatus! @@ -14076,7 +14190,8 @@ type DeleteAssetPayload { deletedAssetId: ID! } -type Datum implements Node @goModel(model: "go.probo.inc/probo/pkg/server/api/console/v1/types.Datum") { +type Datum implements Node + @goModel(model: "go.probo.inc/probo/pkg/server/api/console/v1/types.Datum") { id: ID! snapshotId: ID name: String! @@ -47039,6 +47154,35 @@ func (ec *executionContext) fieldContext_TrustCenterDocumentAccess_active(_ cont return fc, nil } +func (ec *executionContext) _TrustCenterDocumentAccess_status(ctx context.Context, field graphql.CollectedField, obj *types.TrustCenterDocumentAccess) (ret graphql.Marshaler) { + return graphql.ResolveField( + ctx, + ec.OperationContext, + field, + ec.fieldContext_TrustCenterDocumentAccess_status, + func(ctx context.Context) (any, error) { + return ec.resolvers.TrustCenterDocumentAccess().Status(ctx, obj) + }, + nil, + ec.marshalNTrustCenterDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus, + true, + true, + ) +} + +func (ec *executionContext) fieldContext_TrustCenterDocumentAccess_status(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) { + fc = &graphql.FieldContext{ + Object: "TrustCenterDocumentAccess", + Field: field, + IsMethod: true, + IsResolver: true, + Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) { + return nil, errors.New("field of type TrustCenterDocumentAccessStatus does not have child fields") + }, + } + return fc, nil +} + func (ec *executionContext) _TrustCenterDocumentAccess_requested(ctx context.Context, field graphql.CollectedField, obj *types.TrustCenterDocumentAccess) (ret graphql.Marshaler) { return graphql.ResolveField( ctx, @@ -47379,6 +47523,8 @@ func (ec *executionContext) fieldContext_TrustCenterDocumentAccessEdge_node(_ co switch field.Name { case "active": return ec.fieldContext_TrustCenterDocumentAccess_active(ctx, field) + case "status": + return ec.fieldContext_TrustCenterDocumentAccess_status(ctx, field) case "requested": return ec.fieldContext_TrustCenterDocumentAccess_requested(ctx, field) case "document": @@ -78680,6 +78826,42 @@ func (ec *executionContext) _TrustCenterDocumentAccess(ctx context.Context, sel if out.Values[i] == graphql.Null { atomic.AddUint32(&out.Invalids, 1) } + case "status": + field := field + + innerFunc := func(ctx context.Context, fs *graphql.FieldSet) (res graphql.Marshaler) { + defer func() { + if r := recover(); r != nil { + ec.Error(ctx, ec.Recover(ctx, r)) + } + }() + res = ec._TrustCenterDocumentAccess_status(ctx, field, obj) + if res == graphql.Null { + atomic.AddUint32(&fs.Invalids, 1) + } + return res + } + + if field.Deferrable != nil { + dfs, ok := deferred[field.Deferrable.Label] + di := 0 + if ok { + dfs.AddField(field) + di = len(dfs.Values) - 1 + } else { + dfs = graphql.NewFieldSet([]graphql.CollectedField{field}) + deferred[field.Deferrable.Label] = dfs + } + dfs.Concurrently(di, func(ctx context.Context) graphql.Marshaler { + return innerFunc(ctx, dfs) + }) + + // don't run the out.Concurrently() call below + out.Values[i] = graphql.Null + continue + } + + out.Concurrently(i, func(ctx context.Context) graphql.Marshaler { return innerFunc(ctx, out) }) case "requested": out.Values[i] = ec._TrustCenterDocumentAccess_requested(ctx, field, obj) if out.Values[i] == graphql.Null { @@ -89705,6 +89887,38 @@ var ( } ) +func (ec *executionContext) unmarshalNTrustCenterDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus(ctx context.Context, v any) (coredata.TrustCenterDocumentAccessStatus, error) { + tmp, err := graphql.UnmarshalString(v) + res := unmarshalNTrustCenterDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus[tmp] + return res, graphql.ErrorOnPath(ctx, err) +} + +func (ec *executionContext) marshalNTrustCenterDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus(ctx context.Context, sel ast.SelectionSet, v coredata.TrustCenterDocumentAccessStatus) graphql.Marshaler { + _ = sel + res := graphql.MarshalString(marshalNTrustCenterDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus[v]) + if res == graphql.Null { + if !graphql.HasFieldError(ctx, graphql.GetFieldContext(ctx)) { + ec.Errorf(ctx, "the requested element is null which the schema does not allow") + } + } + return res +} + +var ( + unmarshalNTrustCenterDocumentAccessStatus2goᚗproboᚗincᚋproboᚋpkgᚋcoredataᚐTrustCenterDocumentAccessStatus = map[string]coredata.TrustCenterDocumentAccessStatus{ + "REQUESTED": coredata.TrustCenterDocumentAccessStatusRequested, + "GRANTED": coredata.TrustCenterDocumentAccessStatusGranted, + "REJECTED": coredata.TrustCenterDocumentAccessStatusRejected, + "REVOKED": coredata.TrustCenterDocumentAccessStatusRevoked, + } + marshalNTrustCenterDocumentAccessStatus2goᚗ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) marshalNTrustCenterEdge2ᚕᚖgoᚗproboᚗincᚋproboᚋpkgᚋserverᚋapiᚋconsoleᚋv1ᚋtypesᚐTrustCenterEdgeᚄ(ctx context.Context, sel ast.SelectionSet, v []*types.TrustCenterEdge) graphql.Marshaler { ret := make(graphql.Array, len(v)) var wg sync.WaitGroup diff --git a/pkg/server/api/console/v1/v1_resolver.go b/pkg/server/api/console/v1/v1_resolver.go index 2ba60db71..2760315c9 100644 --- a/pkg/server/api/console/v1/v1_resolver.go +++ b/pkg/server/api/console/v1/v1_resolver.go @@ -6492,6 +6492,11 @@ func (r *trustCenterAccessResolver) AvailableDocumentAccesses(ctx context.Contex return types.NewTrustCenterDocumentAccessConnection(result, obj, obj.ID), nil } +// Status is the resolver for the status field. +func (r *trustCenterDocumentAccessResolver) Status(ctx context.Context, obj *types.TrustCenterDocumentAccess) (coredata.TrustCenterDocumentAccessStatus, error) { + panic(fmt.Errorf("not implemented: Status - status")) +} + // Document is the resolver for the document field. func (r *trustCenterDocumentAccessResolver) Document(ctx context.Context, obj *types.TrustCenterDocumentAccess) (*types.Document, error) { r.MustBeAuthorized(ctx, obj.ID, authz.ActionGet) diff --git a/pkg/trust/slack_message_service.go b/pkg/trust/slack_message_service.go index 8cf05ef8a..027324d0e 100644 --- a/pkg/trust/slack_message_service.go +++ b/pkg/trust/slack_message_service.go @@ -22,11 +22,11 @@ import ( "fmt" "time" + "go.gearno.de/kit/pg" "go.probo.inc/probo/pkg/baseurl" "go.probo.inc/probo/pkg/coredata" "go.probo.inc/probo/pkg/gid" "go.probo.inc/probo/pkg/slack" - "go.gearno.de/kit/pg" ) const ( @@ -40,23 +40,23 @@ type ( } SlackMessageDocument struct { - ID string - Title string - Granted bool + ID string + Title string + Status string } SlackMessageReport struct { ID string Title string AuditID string - Granted bool + Status string } SlackMessageFile struct { ID string Name string Category string - Granted bool + Status string } SlackMessageMetadata struct { @@ -336,9 +336,9 @@ func (s *SlackMessageService) loadDocumentsReportsAndFilesFromAccesses( return nil, nil, nil, fmt.Errorf("cannot load document: %w", err) } documents = append(documents, SlackMessageDocument{ - ID: access.DocumentID.String(), - Title: doc.Title, - Granted: access.Active, + ID: access.DocumentID.String(), + Title: doc.Title, + Status: access.Status.String(), }) } @@ -366,7 +366,7 @@ func (s *SlackMessageService) loadDocumentsReportsAndFilesFromAccesses( ID: access.ReportID.String(), Title: label, AuditID: audit.ID.String(), - Granted: access.Active, + Status: access.Status.String(), }) } @@ -379,7 +379,7 @@ func (s *SlackMessageService) loadDocumentsReportsAndFilesFromAccesses( ID: access.TrustCenterFileID.String(), Name: file.Name, Category: file.Category, - Granted: access.Active, + Status: access.Status.String(), }) } } diff --git a/pkg/trust/templates/access-request.json.tmpl b/pkg/trust/templates/access-request.json.tmpl index bcc7f5349..d10650d0d 100644 --- a/pkg/trust/templates/access-request.json.tmpl +++ b/pkg/trust/templates/access-request.json.tmpl @@ -66,14 +66,28 @@ "type": "mrkdwn", "text": "" }, - "accessory": {{if .Granted}}{ + "accessory": {{if eq .Status "GRANTED"}}{ "type": "button", "text": { "type": "plain_text", "text": "✓ Granted" }, "url": "https://{{$.Domain}}/organizations/{{$.OrganizationID}}/trust-center/access" - }{{else}}{ + }{{else if eq .Status "REJECTED"}}{ + "type": "button", + "text": { + "type": "plain_text", + "text": "✗ Rejected" + }, + "url": "https://{{$.Domain}}/organizations/{{$.OrganizationID}}/trust-center/access" + }{{else if eq .Status "REVOKED"}}{ + "type": "button", + "text": { + "type": "plain_text", + "text": "✗ Revoked" + }, + "url": "https://{{$.Domain}}/organizations/{{$.OrganizationID}}/trust-center/access" + }{{else if eq .Status "REQUESTED"}}{ "type": "button", "text": { "type": "plain_text", diff --git a/pkg/trust/trust_center_access_service.go b/pkg/trust/trust_center_access_service.go index 48211155e..11cc632fb 100644 --- a/pkg/trust/trust_center_access_service.go +++ b/pkg/trust/trust_center_access_service.go @@ -572,20 +572,20 @@ func (s *TrustCenterAccessService) RejectByIDs( if len(documentIDs) > 0 { shouldSendEmail = true - if err := coredata.DeleteByDocumentIDs(ctx, tx, s.svc.scope, access.ID, documentIDs); err != nil { - return fmt.Errorf("cannot delete document accesses: %w", err) + if err := coredata.RejectByDocumentIDs(ctx, tx, s.svc.scope, access.ID, documentIDs); err != nil { + return fmt.Errorf("cannot reject document accesses: %w", err) } } if len(reportIDs) > 0 { shouldSendEmail = true - if err := coredata.DeleteByReportIDs(ctx, tx, s.svc.scope, access.ID, reportIDs); err != nil { - return fmt.Errorf("cannot delete report accesses: %w", err) + if err := coredata.RejectByReportIDs(ctx, tx, s.svc.scope, access.ID, reportIDs); err != nil { + return fmt.Errorf("cannot reject report accesses: %w", err) } } if len(fileIDs) > 0 { shouldSendEmail = true - if err := coredata.DeleteByTrustCenterFileIDs(ctx, tx, s.svc.scope, access.ID, fileIDs); err != nil { - return fmt.Errorf("cannot delete trust center file accesses: %w", err) + if err := coredata.RejectByTrustCenterFileIDs(ctx, tx, s.svc.scope, access.ID, fileIDs); err != nil { + return fmt.Errorf("cannot reject trust center file accesses: %w", err) } }