Add vendor publish to document system

Replace the old snapshot-based system for vendors with the publish
document system, mirroring the prior processing activity / DPIA / TIA
migration. Includes the GraphQL mutation, MCP tool, CLI command, n8n
operation, frontend publish dialog, e2e tests, and a prosemirror
register template covering vendor profile fields plus per-vendor
sections for services, contacts, risk assessments, compliance reports,
BAA and DPA agreements.

The vendor register lives as a generated DocumentTypeRegister document
on the organization, reused across publishes (the major version bumps
on every republish). Approvers can be passed in to create a draft
pending approval; otherwise the version is published immediately. The
frontend Vendors page exposes a Publish button and a Document link
button when the document exists, and pre-fills the previous default
approvers.

Remove snapshot mode entirely from vendors and their sub-entities: drop
snapshotId/sourceId from GraphQL Vendor type and VendorFilter; remove
SnapshotsTypeVendors from the snapshot registry and delete
Vendors.Snapshot, VendorSnapshotter interface and all
*.InsertVendorSnapshots methods on contacts, services, risk
assessments, compliance reports, BAA and DPA. Drop the snapshot routes
and banner from the frontend. The snapshot_id columns remain in the
database but are now filtered out with snapshot_id IS NULL.

Add Get/Upsert/Clear GeneratedDocumentID methods on Vendor backed by a
new vendors_document_id column on generated_documents, matching the
ProcessingActivity/Finding/Obligation pattern.

Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
Sacha Al Himdani
2026-04-28 18:54:09 +02:00
parent 5629c8ccc0
commit c026f67bd9
40 changed files with 3144 additions and 792 deletions

View File

@@ -366,6 +366,73 @@ type (
LocalLawRisk string
SupplementaryMeasures string
}
VendorListData struct {
Title string
OrganizationName string
CreatedAt time.Time
TotalVendors int
Rows []VendorListRow
}
VendorListRow struct {
Name string
LegalName string
Description string
Category string
HeadquarterAddress string
WebsiteURL string
PrivacyPolicyURL string
ServiceLevelAgreementURL string
DataProcessingAgreementURL string
BusinessAssociateAgreementURL string
SubprocessorsListURL string
StatusPageURL string
TermsOfServiceURL string
SecurityPageURL string
TrustPageURL string
Certifications string
Countries string
BusinessOwner string
SecurityOwner string
Services []VendorListService
Contacts []VendorListContact
RiskAssessments []VendorListRiskAssessment
ComplianceReports []VendorListComplianceReport
BusinessAssociateAgreement *VendorListAgreement
DataPrivacyAgreement *VendorListAgreement
}
VendorListService struct {
Name string
Description string
}
VendorListContact struct {
FullName string
Email string
Phone string
Role string
}
VendorListRiskAssessment struct {
AssessedAt string
ExpiresAt string
DataSensitivity string
BusinessImpact string
Notes string
}
VendorListComplianceReport struct {
ReportName string
ReportDate string
ValidUntil string
}
VendorListAgreement struct {
ValidFrom string
ValidUntil string
}
)
func BoolLabel(v bool) string {