diff --git a/keyserver/src/deleters/link-deleters.js b/keyserver/src/deleters/link-deleters.js --- a/keyserver/src/deleters/link-deleters.js +++ b/keyserver/src/deleters/link-deleters.js @@ -81,4 +81,24 @@ await deleteInviteLinks(inviteLinksToDelete); } -export { deleteInviteLink, deleteOrphanedInviteLinks }; +async function deleteInviteLinksForThreadIDs( + threadIDs: $ReadOnlyArray, +): Promise { + const [selectResults] = await dbQuery(SQL` + SELECT id, name, blob_holder AS blobHolder + FROM invite_links + WHERE community IN (${threadIDs}) OR thread IN (${threadIDs}) + `); + const inviteLinksToDelete = selectResults.map(({ id, name, blobHolder }) => ({ + id, + name, + blobHolder, + })); + await deleteInviteLinks(inviteLinksToDelete); +} + +export { + deleteInviteLink, + deleteOrphanedInviteLinks, + deleteInviteLinksForThreadIDs, +}; diff --git a/keyserver/src/deleters/thread-deleters.js b/keyserver/src/deleters/thread-deleters.js --- a/keyserver/src/deleters/thread-deleters.js +++ b/keyserver/src/deleters/thread-deleters.js @@ -9,6 +9,7 @@ import { updateTypes } from 'lib/types/update-types-enum.js'; import { ServerError } from 'lib/utils/errors.js'; +import { deleteInviteLinksForThreadIDs } from './link-deleters.js'; import { createUpdates } from '../creators/update-creator.js'; import { dbQuery, SQL } from '../database/database.js'; import { @@ -87,7 +88,7 @@ const [{ viewerUpdates }] = await Promise.all([ createUpdates(updateDatas, { viewer, updatesForCurrentSession: 'return' }), - deleteThreadsFromDB(threadIDs), + deleteThreads(threadIDs), ]); return { updatesResult: { newUpdates: viewerUpdates } }; @@ -106,9 +107,7 @@ await removeBlobHolders(blobHolders); } -function deleteThreadsFromDB( - threadIDs: $ReadOnlyArray, -): Promise { +async function deleteThreads(threadIDs: $ReadOnlyArray): Promise { const deletionQuery = SQL` START TRANSACTION; DELETE FROM threads WHERE id IN (${threadIDs}); @@ -141,7 +140,10 @@ WHERE n.thread IN (${threadIDs}); COMMIT; `; - return dbQuery(deletionQuery, { multipleStatements: true }); + await Promise.all([ + dbQuery(deletionQuery, { multipleStatements: true }), + deleteInviteLinksForThreadIDs(threadIDs), + ]); } async function deleteInaccessibleThreads(): Promise { @@ -163,7 +165,7 @@ } const containerIDs = [...threadIDs]; await fetchAndDeleteThreadBlobHolders(containerIDs); - await deleteThreadsFromDB(containerIDs); + await deleteThreads(containerIDs); } export { deleteThread, deleteInaccessibleThreads };