Add document webhook events
Add a resource-oriented set of webhook events for the document lifecycle. Each event carries the document plus only the sub-resource it concerns (version, signature or approval). Events: - document.created / updated / archived / unarchived / deleted - document.version.created / updated / published / rejected / deleted - document.version.signature.requested / signed / cancelled - document.version.approval.requested / approved / rejected / voided Wires the new types through the migration, Go enum, GraphQL schema, CLI, n8n nodes and the console webhooks settings UI. Signed-off-by: Sacha Al Himdani <sacha@probo.com>
This commit is contained in:
@@ -920,7 +920,9 @@ func (p *Documents) BulkArchive(
|
||||
scope Scoper,
|
||||
) error {
|
||||
q := `
|
||||
UPDATE documents SET status = 'ARCHIVED', archived_at = @archived_at, trust_center_visibility = 'NONE' WHERE %s AND id = ANY(@document_ids)
|
||||
UPDATE documents
|
||||
SET status = 'ARCHIVED', archived_at = @archived_at, trust_center_visibility = 'NONE', updated_at = @updated_at
|
||||
WHERE %s AND id = ANY(@document_ids)
|
||||
`
|
||||
q = fmt.Sprintf(q, scope.SQLFragment())
|
||||
|
||||
@@ -929,9 +931,11 @@ UPDATE documents SET status = 'ARCHIVED', archived_at = @archived_at, trust_cent
|
||||
ids[i] = doc.ID
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
args := pgx.StrictNamedArgs{
|
||||
"document_ids": ids,
|
||||
"archived_at": time.Now(),
|
||||
"archived_at": now,
|
||||
"updated_at": now,
|
||||
}
|
||||
maps.Copy(args, scope.SQLArguments())
|
||||
|
||||
@@ -948,7 +952,7 @@ func (p *Documents) BulkUnarchive(
|
||||
scope Scoper,
|
||||
) error {
|
||||
q := `
|
||||
UPDATE documents SET status = 'ACTIVE', archived_at = NULL WHERE %s AND id = ANY(@document_ids)
|
||||
UPDATE documents SET status = 'ACTIVE', archived_at = NULL, updated_at = @updated_at WHERE %s AND id = ANY(@document_ids)
|
||||
`
|
||||
q = fmt.Sprintf(q, scope.SQLFragment())
|
||||
|
||||
@@ -959,6 +963,7 @@ UPDATE documents SET status = 'ACTIVE', archived_at = NULL WHERE %s AND id = ANY
|
||||
|
||||
args := pgx.StrictNamedArgs{
|
||||
"document_ids": ids,
|
||||
"updated_at": time.Now(),
|
||||
}
|
||||
maps.Copy(args, scope.SQLArguments())
|
||||
|
||||
|
||||
35
pkg/coredata/migrations/20260629T175459Z.sql
Normal file
35
pkg/coredata/migrations/20260629T175459Z.sql
Normal file
@@ -0,0 +1,35 @@
|
||||
-- Copyright (c) 2026 Probo Inc <hello@probo.com>.
|
||||
--
|
||||
-- Permission to use, copy, modify, and/or distribute this software for any
|
||||
-- purpose with or without fee is hereby granted, provided that the above
|
||||
-- copyright notice and this permission notice appear in all copies.
|
||||
--
|
||||
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
-- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
-- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
-- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
-- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
-- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
-- PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document:created';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document:updated';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document:archived';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document:unarchived';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document:deleted';
|
||||
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version:created';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version:updated';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version:published';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version:rejected';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version:deleted';
|
||||
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version-signature:requested';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version-signature:signed';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version-signature:cancelled';
|
||||
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version-approval-quorum:requested';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version-approval-quorum:updated';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version-approval-quorum:approved';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version-approval-quorum:rejected';
|
||||
ALTER TYPE webhook_event_type ADD VALUE 'document-version-approval-quorum:voided';
|
||||
@@ -33,6 +33,28 @@ const (
|
||||
WebhookEventTypeObligationCreated WebhookEventType = "obligation:created"
|
||||
WebhookEventTypeObligationUpdated WebhookEventType = "obligation:updated"
|
||||
WebhookEventTypeObligationDeleted WebhookEventType = "obligation:deleted"
|
||||
|
||||
WebhookEventTypeDocumentCreated WebhookEventType = "document:created"
|
||||
WebhookEventTypeDocumentUpdated WebhookEventType = "document:updated"
|
||||
WebhookEventTypeDocumentArchived WebhookEventType = "document:archived"
|
||||
WebhookEventTypeDocumentUnarchived WebhookEventType = "document:unarchived"
|
||||
WebhookEventTypeDocumentDeleted WebhookEventType = "document:deleted"
|
||||
|
||||
WebhookEventTypeDocumentVersionCreated WebhookEventType = "document-version:created"
|
||||
WebhookEventTypeDocumentVersionUpdated WebhookEventType = "document-version:updated"
|
||||
WebhookEventTypeDocumentVersionPublished WebhookEventType = "document-version:published"
|
||||
WebhookEventTypeDocumentVersionRejected WebhookEventType = "document-version:rejected"
|
||||
WebhookEventTypeDocumentVersionDeleted WebhookEventType = "document-version:deleted"
|
||||
|
||||
WebhookEventTypeDocumentVersionSignatureRequested WebhookEventType = "document-version-signature:requested"
|
||||
WebhookEventTypeDocumentVersionSignatureSigned WebhookEventType = "document-version-signature:signed"
|
||||
WebhookEventTypeDocumentVersionSignatureCancelled WebhookEventType = "document-version-signature:cancelled"
|
||||
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumRequested WebhookEventType = "document-version-approval-quorum:requested"
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumUpdated WebhookEventType = "document-version-approval-quorum:updated"
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumApproved WebhookEventType = "document-version-approval-quorum:approved"
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumRejected WebhookEventType = "document-version-approval-quorum:rejected"
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumVoided WebhookEventType = "document-version-approval-quorum:voided"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -52,7 +74,25 @@ func (v WebhookEventType) IsValid() bool {
|
||||
WebhookEventTypeUserDeleted,
|
||||
WebhookEventTypeObligationCreated,
|
||||
WebhookEventTypeObligationUpdated,
|
||||
WebhookEventTypeObligationDeleted:
|
||||
WebhookEventTypeObligationDeleted,
|
||||
WebhookEventTypeDocumentCreated,
|
||||
WebhookEventTypeDocumentUpdated,
|
||||
WebhookEventTypeDocumentArchived,
|
||||
WebhookEventTypeDocumentUnarchived,
|
||||
WebhookEventTypeDocumentDeleted,
|
||||
WebhookEventTypeDocumentVersionCreated,
|
||||
WebhookEventTypeDocumentVersionUpdated,
|
||||
WebhookEventTypeDocumentVersionPublished,
|
||||
WebhookEventTypeDocumentVersionRejected,
|
||||
WebhookEventTypeDocumentVersionDeleted,
|
||||
WebhookEventTypeDocumentVersionSignatureRequested,
|
||||
WebhookEventTypeDocumentVersionSignatureSigned,
|
||||
WebhookEventTypeDocumentVersionSignatureCancelled,
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumRequested,
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumUpdated,
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumApproved,
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumRejected,
|
||||
WebhookEventTypeDocumentVersionApprovalQuorumVoided:
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user