Add processing activity exports

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2025-12-22 17:36:50 +01:00
parent 2a49c1e627
commit c76764b69a
29 changed files with 4021 additions and 226 deletions

View File

@@ -3310,6 +3310,15 @@ type Mutation {
exportSignableVersionDocumentPDF(
input: ExportSignableDocumentVersionPDFInput!
): ExportSignableDocumentVersionPDFPayload!
exportProcessingActivitiesPDF(
input: ExportProcessingActivitiesPDFInput!
): ExportProcessingActivitiesPDFPayload!
exportDataProtectionImpactAssessmentsPDF(
input: ExportDataProtectionImpactAssessmentsPDFInput!
): ExportDataProtectionImpactAssessmentsPDFPayload!
exportTransferImpactAssessmentsPDF(
input: ExportTransferImpactAssessmentsPDFInput!
): ExportTransferImpactAssessmentsPDFPayload!
createVendorRiskAssessment(
input: CreateVendorRiskAssessmentInput!
): CreateVendorRiskAssessmentPayload!
@@ -3941,6 +3950,21 @@ input ExportSignableDocumentVersionPDFInput {
documentVersionId: ID!
}
input ExportProcessingActivitiesPDFInput {
organizationId: ID!
filter: ProcessingActivityFilter
}
input ExportDataProtectionImpactAssessmentsPDFInput {
organizationId: ID!
filter: DataProtectionImpactAssessmentFilter
}
input ExportTransferImpactAssessmentsPDFInput {
organizationId: ID!
filter: TransferImpactAssessmentFilter
}
input DeleteDocumentInput {
documentId: ID!
}
@@ -4600,6 +4624,18 @@ type ExportSignableDocumentVersionPDFPayload {
data: String!
}
type ExportProcessingActivitiesPDFPayload {
data: String!
}
type ExportDataProtectionImpactAssessmentsPDFPayload {
data: String!
}
type ExportTransferImpactAssessmentsPDFPayload {
data: String!
}
type UpdateDocumentPayload {
document: Document!
}

File diff suppressed because it is too large Load Diff

View File

@@ -1220,6 +1220,15 @@ type EvidenceEdge struct {
Node *Evidence `json:"node"`
}
type ExportDataProtectionImpactAssessmentsPDFInput struct {
OrganizationID gid.GID `json:"organizationId"`
Filter *DataProtectionImpactAssessmentFilter `json:"filter,omitempty"`
}
type ExportDataProtectionImpactAssessmentsPDFPayload struct {
Data string `json:"data"`
}
type ExportDocumentVersionPDFInput struct {
DocumentVersionID gid.GID `json:"documentVersionId"`
WithWatermark bool `json:"withWatermark"`
@@ -1239,6 +1248,15 @@ type ExportFrameworkPayload struct {
ExportJobID gid.GID `json:"exportJobId"`
}
type ExportProcessingActivitiesPDFInput struct {
OrganizationID gid.GID `json:"organizationId"`
Filter *ProcessingActivityFilter `json:"filter,omitempty"`
}
type ExportProcessingActivitiesPDFPayload struct {
Data string `json:"data"`
}
type ExportSignableDocumentVersionPDFInput struct {
DocumentVersionID gid.GID `json:"documentVersionId"`
}
@@ -1247,6 +1265,15 @@ type ExportSignableDocumentVersionPDFPayload struct {
Data string `json:"data"`
}
type ExportTransferImpactAssessmentsPDFInput struct {
OrganizationID gid.GID `json:"organizationId"`
Filter *TransferImpactAssessmentFilter `json:"filter,omitempty"`
}
type ExportTransferImpactAssessmentsPDFPayload struct {
Data string `json:"data"`
}
type File struct {
ID gid.GID `json:"id"`
MimeType string `json:"mimeType"`

View File

@@ -3745,6 +3745,84 @@ func (r *mutationResolver) ExportSignableVersionDocumentPDF(ctx context.Context,
}, nil
}
// ExportProcessingActivitiesPDF is the resolver for the exportProcessingActivitiesPDF field.
func (r *mutationResolver) ExportProcessingActivitiesPDF(ctx context.Context, input types.ExportProcessingActivitiesPDFInput) (*types.ExportProcessingActivitiesPDFPayload, error) {
r.MustBeAuthorized(ctx, input.OrganizationID, authz.ActionExportProcessingActivitiesPDF)
prb := r.ProboService(ctx, input.OrganizationID.TenantID())
var snapshotIDPtr *gid.GID
if input.Filter != nil {
snapshotIDPtr = input.Filter.SnapshotID
}
processingActivityFilter := coredata.NewProcessingActivityFilter(&snapshotIDPtr)
pdf, err := prb.ProcessingActivities.ExportPDF(ctx, input.OrganizationID, processingActivityFilter)
if err != nil {
var errNotFound *coredata.ErrNoProcessingActivitiesFound
if errors.As(err, &errNotFound) {
return nil, gqlutils.NotFound(errNotFound)
}
panic(fmt.Errorf("cannot export processing activities PDF: %w", err))
}
return &types.ExportProcessingActivitiesPDFPayload{
Data: fmt.Sprintf("data:application/pdf;base64,%s", base64.StdEncoding.EncodeToString(pdf)),
}, nil
}
// ExportDataProtectionImpactAssessmentsPDF is the resolver for the exportDataProtectionImpactAssessmentsPDF field.
func (r *mutationResolver) ExportDataProtectionImpactAssessmentsPDF(ctx context.Context, input types.ExportDataProtectionImpactAssessmentsPDFInput) (*types.ExportDataProtectionImpactAssessmentsPDFPayload, error) {
r.MustBeAuthorized(ctx, input.OrganizationID, authz.ActionExportDataProtectionImpactAssessmentsPDF)
prb := r.ProboService(ctx, input.OrganizationID.TenantID())
var snapshotIDPtr *gid.GID
if input.Filter != nil {
snapshotIDPtr = input.Filter.SnapshotID
}
dpiaFilter := coredata.NewDataProtectionImpactAssessmentFilter(&snapshotIDPtr)
pdf, err := prb.DataProtectionImpactAssessments.ExportPDF(ctx, input.OrganizationID, dpiaFilter)
if err != nil {
var errNotFound *coredata.ErrNoDataProtectionImpactAssessmentsFound
if errors.As(err, &errNotFound) {
return nil, gqlutils.NotFound(errNotFound)
}
panic(fmt.Errorf("cannot export data protection impact assessments PDF: %w", err))
}
return &types.ExportDataProtectionImpactAssessmentsPDFPayload{
Data: fmt.Sprintf("data:application/pdf;base64,%s", base64.StdEncoding.EncodeToString(pdf)),
}, nil
}
// ExportTransferImpactAssessmentsPDF is the resolver for the exportTransferImpactAssessmentsPDF field.
func (r *mutationResolver) ExportTransferImpactAssessmentsPDF(ctx context.Context, input types.ExportTransferImpactAssessmentsPDFInput) (*types.ExportTransferImpactAssessmentsPDFPayload, error) {
r.MustBeAuthorized(ctx, input.OrganizationID, authz.ActionExportTransferImpactAssessmentsPDF)
prb := r.ProboService(ctx, input.OrganizationID.TenantID())
var snapshotIDPtr *gid.GID
if input.Filter != nil {
snapshotIDPtr = input.Filter.SnapshotID
}
tiaFilter := coredata.NewTransferImpactAssessmentFilter(&snapshotIDPtr)
pdf, err := prb.TransferImpactAssessments.ExportPDF(ctx, input.OrganizationID, tiaFilter)
if err != nil {
var errNotFound *coredata.ErrNoTransferImpactAssessmentsFound
if errors.As(err, &errNotFound) {
return nil, gqlutils.NotFound(errNotFound)
}
panic(fmt.Errorf("cannot export transfer impact assessments PDF: %w", err))
}
return &types.ExportTransferImpactAssessmentsPDFPayload{
Data: fmt.Sprintf("data:application/pdf;base64,%s", base64.StdEncoding.EncodeToString(pdf)),
}, nil
}
// CreateVendorRiskAssessment is the resolver for the createVendorRiskAssessment field.
func (r *mutationResolver) CreateVendorRiskAssessment(ctx context.Context, input types.CreateVendorRiskAssessmentInput) (*types.CreateVendorRiskAssessmentPayload, error) {
r.MustBeAuthorized(ctx, input.VendorID, authz.ActionCreateVendorRiskAssessment)