From 2837b178fb01ce9b1fdbb3b96baca327eac4d7e0 Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Mon, 17 Jun 2024 22:20:42 +0000 Subject: [PATCH] fix: soft delete a document when the owner deletes it --- .../server-only/document/delete-document.ts | 10 +++ .../server-only/document/find-documents.ts | 10 +-- .../lib/server-only/document/get-stats.ts | 74 +++++++++++++++---- 3 files changed, 74 insertions(+), 20 deletions(-) diff --git a/packages/lib/server-only/document/delete-document.ts b/packages/lib/server-only/document/delete-document.ts index 6ac8e1bd3..f0abb779a 100644 --- a/packages/lib/server-only/document/delete-document.ts +++ b/packages/lib/server-only/document/delete-document.ts @@ -138,6 +138,16 @@ const handleDocumentOwnerDelete = async ({ }), }); + // Soft delete for document recipients since the owner is deleting it + await tx.recipient.updateMany({ + where: { + documentId: document.id, + }, + data: { + documentDeletedAt: new Date().toISOString(), + }, + }); + return await tx.document.update({ where: { id: document.id, diff --git a/packages/lib/server-only/document/find-documents.ts b/packages/lib/server-only/document/find-documents.ts index 87665a860..53cae49ab 100644 --- a/packages/lib/server-only/document/find-documents.ts +++ b/packages/lib/server-only/document/find-documents.ts @@ -338,7 +338,7 @@ const findDocumentsFilter = (status: ExtendedDocumentStatus, user: User) => { teamId: null, status: ExtendedDocumentStatus.COMPLETED, deletedAt: { - not: null, + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), }, }, { @@ -347,7 +347,7 @@ const findDocumentsFilter = (status: ExtendedDocumentStatus, user: User) => { some: { email: user.email, documentDeletedAt: { - not: null, + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), }, }, }, @@ -539,7 +539,7 @@ const findTeamDocumentsFilter = ( { teamId: team.id, deletedAt: { - not: null, + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), }, }, ], @@ -552,7 +552,7 @@ const findTeamDocumentsFilter = ( email: teamEmail, }, deletedAt: { - not: null, + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), }, }, { @@ -560,7 +560,7 @@ const findTeamDocumentsFilter = ( some: { email: teamEmail, documentDeletedAt: { - not: null, + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), }, }, }, diff --git a/packages/lib/server-only/document/get-stats.ts b/packages/lib/server-only/document/get-stats.ts index 9b09ff12e..86ffc1618 100644 --- a/packages/lib/server-only/document/get-stats.ts +++ b/packages/lib/server-only/document/get-stats.ts @@ -152,11 +152,38 @@ const getCounts = async ({ user, createdAt }: GetCountsOption) => { _all: true, }, where: { - userId: user.id, - createdAt, - deletedAt: { - gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), - }, + OR: [ + { + userId: user.id, + deletedAt: { + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), + }, + }, + { + status: ExtendedDocumentStatus.PENDING, + Recipient: { + some: { + email: user.email, + signingStatus: SigningStatus.SIGNED, + documentDeletedAt: { + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), + }, + }, + }, + }, + { + status: ExtendedDocumentStatus.COMPLETED, + Recipient: { + some: { + email: user.email, + signingStatus: SigningStatus.SIGNED, + documentDeletedAt: { + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), + }, + }, + }, + }, + ], }, }), ]); @@ -273,19 +300,36 @@ const getTeamCounts = async (options: GetTeamCountsOption) => { where: { userId: userIdWhereClause, createdAt, - status: ExtendedDocumentStatus.COMPLETED, - Recipient: { - some: { - email: teamEmail, - signingStatus: SigningStatus.SIGNED, - documentDeletedAt: { + OR: [ + { + status: ExtendedDocumentStatus.PENDING, + Recipient: { + some: { + email: teamEmail, + signingStatus: SigningStatus.SIGNED, + documentDeletedAt: null, + }, + }, + deletedAt: { gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), }, }, - }, - deletedAt: { - gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), - }, + { + status: ExtendedDocumentStatus.COMPLETED, + Recipient: { + some: { + email: teamEmail, + signingStatus: SigningStatus.SIGNED, + documentDeletedAt: { + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), + }, + }, + }, + deletedAt: { + gte: DateTime.now().minus({ days: 30 }).startOf('day').toJSDate(), + }, + }, + ], }, } satisfies Prisma.DocumentGroupByArgs; }