summaryrefslogtreecommitdiff
path: root/packages/backend/src/queue
diff options
context:
space:
mode:
authorMar0xy <marie@kaifa.ch>2023-10-11 23:03:01 +0200
committerMar0xy <marie@kaifa.ch>2023-10-11 23:03:01 +0200
commitfe4345d19161967698c26ceab3ebbd252c01fabf (patch)
treeb4a4db211c355cfad9f072c429f02040bd30bbc5 /packages/backend/src/queue
parentci: remove default folders that aren't needed to free up space (diff)
downloadsharkey-fe4345d19161967698c26ceab3ebbd252c01fabf.tar.gz
sharkey-fe4345d19161967698c26ceab3ebbd252c01fabf.tar.bz2
sharkey-fe4345d19161967698c26ceab3ebbd252c01fabf.zip
upd: delete reactions properly in the DB
Fixes https://github.com/misskey-dev/misskey/issues/11906
Diffstat (limited to 'packages/backend/src/queue')
-rw-r--r--packages/backend/src/queue/processors/DeleteAccountProcessorService.ts39
1 files changed, 38 insertions, 1 deletions
diff --git a/packages/backend/src/queue/processors/DeleteAccountProcessorService.ts b/packages/backend/src/queue/processors/DeleteAccountProcessorService.ts
index 39967165d4..56369f3a7a 100644
--- a/packages/backend/src/queue/processors/DeleteAccountProcessorService.ts
+++ b/packages/backend/src/queue/processors/DeleteAccountProcessorService.ts
@@ -6,17 +6,19 @@
import { Inject, Injectable } from '@nestjs/common';
import { MoreThan } from 'typeorm';
import { DI } from '@/di-symbols.js';
-import type { DriveFilesRepository, NotesRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js';
+import type { DriveFilesRepository, NoteReactionsRepository, NotesRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js';
import type Logger from '@/logger.js';
import { DriveService } from '@/core/DriveService.js';
import type { MiDriveFile } from '@/models/DriveFile.js';
import type { MiNote } from '@/models/Note.js';
+import type { MiNoteReaction } from '@/models/NoteReaction.js';
import { EmailService } from '@/core/EmailService.js';
import { bindThis } from '@/decorators.js';
import { SearchService } from '@/core/SearchService.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type * as Bull from 'bullmq';
import type { DbUserDeleteJobData } from '../types.js';
+import { ReactionService } from '@/core/ReactionService.js';
@Injectable()
export class DeleteAccountProcessorService {
@@ -35,10 +37,14 @@ export class DeleteAccountProcessorService {
@Inject(DI.driveFilesRepository)
private driveFilesRepository: DriveFilesRepository,
+ @Inject(DI.noteReactionsRepository)
+ private noteReactionsRepository: NoteReactionsRepository,
+
private driveService: DriveService,
private emailService: EmailService,
private queueLoggerService: QueueLoggerService,
private searchService: SearchService,
+ private reactionService: ReactionService,
) {
this.logger = this.queueLoggerService.logger.createSubLogger('delete-account');
}
@@ -83,6 +89,37 @@ export class DeleteAccountProcessorService {
this.logger.succ('All of notes deleted');
}
+ { // Delete reactions
+ let cursor: MiNoteReaction['id'] | null = null;
+
+ while (true) {
+ const reactions = await this.noteReactionsRepository.find({
+ where: {
+ userId: user.id,
+ ...(cursor ? { id: MoreThan(cursor) } : {}),
+ },
+ take: 100,
+ order: {
+ id: 1,
+ },
+ }) as MiNoteReaction[];
+
+ if (reactions.length === 0) {
+ break;
+ }
+
+ cursor = reactions.at(-1)?.id ?? null;
+
+ for (const reaction of reactions) {
+ const note = await this.notesRepository.findOneBy({ id: reaction.noteId }) as MiNote;
+
+ await this.reactionService.delete(user, note);
+ }
+ }
+
+ this.logger.succ('All reactions have been deleted');
+ }
+
{ // Delete files
let cursor: MiDriveFile['id'] | null = null;