extend webhook triggers

This commit is contained in:
Catalin Pit
2024-02-24 10:54:20 +02:00
parent 99a26065a8
commit f9b2abcadd
7 changed files with 63 additions and 2 deletions

View File

@ -9,9 +9,11 @@ import { DOCUMENT_AUDIT_LOG_TYPE } from '@documenso/lib/types/document-audit-log
import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs';
import { prisma } from '@documenso/prisma';
import { DocumentStatus, RecipientRole, SigningStatus } from '@documenso/prisma/client';
import { WebhookTriggerEvents } from '@documenso/prisma/client';
import { signPdf } from '@documenso/signing';
import type { RequestMetadata } from '../../universal/extract-request-metadata';
import { triggerWebhook } from '../../universal/trigger-webhook';
import { getFile } from '../../universal/upload/get-file';
import { putFile } from '../../universal/upload/put-file';
import { insertFieldInPDF } from '../pdf/insert-field-in-pdf';
@ -134,4 +136,9 @@ export const sealDocument = async ({
if (sendEmail) {
await sendCompletedEmail({ documentId, requestMetadata });
}
await triggerWebhook({
eventTrigger: WebhookTriggerEvents.DOCUMENT_COMPLETED,
documentData: document,
});
};

View File

@ -10,12 +10,14 @@ import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-
import { renderCustomEmailTemplate } from '@documenso/lib/utils/render-custom-email-template';
import { prisma } from '@documenso/prisma';
import { DocumentStatus, RecipientRole, SendStatus } from '@documenso/prisma/client';
import { WebhookTriggerEvents } from '@documenso/prisma/client';
import { NEXT_PUBLIC_WEBAPP_URL } from '../../constants/app';
import {
RECIPIENT_ROLES_DESCRIPTION,
RECIPIENT_ROLE_TO_EMAIL_TYPE,
} from '../../constants/recipient-roles';
import { triggerWebhook } from '../../universal/trigger-webhook';
export type SendDocumentOptions = {
documentId: number;
@ -163,5 +165,10 @@ export const sendDocument = async ({
},
});
await triggerWebhook({
eventTrigger: WebhookTriggerEvents.DOCUMENT_SENT,
documentData: updatedDocument,
});
return updatedDocument;
};

View File

@ -3,6 +3,10 @@ import type { RequestMetadata } from '@documenso/lib/universal/extract-request-m
import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs';
import { prisma } from '@documenso/prisma';
import { ReadStatus } from '@documenso/prisma/client';
import { WebhookTriggerEvents } from '@documenso/prisma/client';
import { triggerWebhook } from '../../universal/trigger-webhook';
import { getDocumentAndSenderByToken } from './get-document-by-token';
export type ViewedDocumentOptions = {
token: string;
@ -23,8 +27,8 @@ export const viewedDocument = async ({ token, requestMetadata }: ViewedDocumentO
const { documentId } = recipient;
await prisma.$transaction(async (tx) => {
await tx.recipient.update({
const { updatedRecipient } = await prisma.$transaction(async (tx) => {
const updatedRecipient = await tx.recipient.update({
where: {
id: recipient.id,
},
@ -50,5 +54,25 @@ export const viewedDocument = async ({ token, requestMetadata }: ViewedDocumentO
},
}),
});
return { updatedRecipient };
});
const document = await getDocumentAndSenderByToken({ token });
await triggerWebhook({
eventTrigger: WebhookTriggerEvents.DOCUMENT_OPENED,
documentData: {
id: document.id,
userId: document.userId,
title: document.title,
status: document.status,
documentDataId: document.documentDataId,
createdAt: document.createdAt,
updatedAt: document.updatedAt,
completedAt: document.completedAt,
deletedAt: document.deletedAt,
teamId: document.teamId,
},
});
};

View File

@ -5,5 +5,8 @@ export const getWebhooksByUserId = async (userId: number) => {
where: {
userId,
},
orderBy: {
createdAt: 'desc',
},
});
};

View File

@ -1,6 +1,7 @@
import type { NextApiRequest, NextApiResponse } from 'next';
import { findDocuments } from '@documenso/lib/server-only/document/find-documents';
import { getRecipientsForDocument } from '@documenso/lib/server-only/recipient/get-recipients-for-document';
import { getWebhooksByUserId } from '../get-webhooks-by-user-id';
import { validateApiToken } from './validateApiToken';
@ -12,6 +13,10 @@ export const listDocumentsHandler = async (req: NextApiRequest, res: NextApiResp
const documents = await findDocuments({ userId: user.id });
const allWebhooks = await getWebhooksByUserId(user.id);
const recipients = await getRecipientsForDocument({
documentId: documents.data[0].id,
userId: user.id,
});
if (documents.data.length > 0 && allWebhooks.length > 0) {
const testWebhook = {
@ -29,6 +34,7 @@ export const listDocumentsHandler = async (req: NextApiRequest, res: NextApiResp
completedAt: documents.data[0].completedAt,
deletedAt: documents.data[0].deletedAt,
teamId: documents.data[0].teamId,
Recipient: recipients,
},
};

View File

@ -0,0 +1,11 @@
-- AlterEnum
-- This migration adds more than one value to an enum.
-- With PostgreSQL versions 11 and earlier, this is not possible
-- in a single migration. This can be worked around by creating
-- multiple migrations, each migration adding only one value to
-- the enum.
ALTER TYPE "WebhookTriggerEvents" ADD VALUE 'DOCUMENT_SENT';
ALTER TYPE "WebhookTriggerEvents" ADD VALUE 'DOCUMENT_OPENED';
ALTER TYPE "WebhookTriggerEvents" ADD VALUE 'DOCUMENT_COMPLETED';

View File

@ -112,7 +112,10 @@ model ApiToken {
enum WebhookTriggerEvents {
DOCUMENT_CREATED
DOCUMENT_SENT
DOCUMENT_OPENED
DOCUMENT_SIGNED
DOCUMENT_COMPLETED
}
model Webhook {