From 06985abe08a0e35e5eaf9cfaf94b04608affcb22 Mon Sep 17 00:00:00 2001 From: Lhcfl <Lhcfl@outlook.com> Date: Sun, 17 Mar 2024 12:01:07 +0800 Subject: [PATCH] fix: recalculate notesCount of local user when notes are deleted. --- packages/backend/src/services/note/delete.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/backend/src/services/note/delete.ts b/packages/backend/src/services/note/delete.ts index 988e1c8c48..830f55dd16 100644 --- a/packages/backend/src/services/note/delete.ts +++ b/packages/backend/src/services/note/delete.ts @@ -17,6 +17,20 @@ import { countSameRenotes } from "@/misc/count-same-renotes.js"; import { registerOrFetchInstanceDoc } from "@/services/register-or-fetch-instance-doc.js"; import { deliverToRelays } from "@/services/relay.js"; +async function recalculateNotesCountOfUser(user: { id: User["id"] }) { + const newCount = await Notes.createQueryBuilder() + .where(`"userId" = :id`, { id: user.id }) + .getCount(); + await Users.createQueryBuilder() + .update() + .set({ + updatedAt: new Date(), + notesCount: newCount, + }) + .where("id = :id", { id: user.id }) + .execute(); +} + /** * 投稿を削除します。 * @param user 投稿者 @@ -115,6 +129,11 @@ export default async function ( id: note.id, userId: user.id, }); + + if (Users.isLocalUser(user)) { + // For the case of cascading deletion, it cannot be solved by simply reducing the notesCount by 1. + recalculateNotesCountOfUser(user); + } } }