fix account deletion not triggering background tasks for cascaded note deletions
This commit is contained in:
parent
4501ecb293
commit
e587e376e5
1 changed files with 16 additions and 3 deletions
|
|
@ -4,9 +4,9 @@
|
|||
*/
|
||||
|
||||
import { Inject, Injectable } from '@nestjs/common';
|
||||
import { In, MoreThan } from 'typeorm';
|
||||
import { In, IsNull, MoreThan } from 'typeorm';
|
||||
import { DI } from '@/di-symbols.js';
|
||||
import type { DriveFilesRepository, NoteReactionsRepository, NotesRepository, UserProfilesRepository, UsersRepository, NoteScheduleRepository, MiNoteSchedule, FollowingsRepository, FollowRequestsRepository, BlockingsRepository, MutingsRepository, ClipsRepository, ClipNotesRepository, LatestNotesRepository, NoteEditsRepository, NoteFavoritesRepository, PollVotesRepository, PollsRepository, SigninsRepository, UserIpsRepository, RegistryItemsRepository } from '@/models/_.js';
|
||||
import type { DriveFilesRepository, NoteReactionsRepository, NotesRepository, UserProfilesRepository, UsersRepository, NoteScheduleRepository, MiNoteSchedule, FollowingsRepository, FollowRequestsRepository, BlockingsRepository, MutingsRepository, ClipsRepository, ClipNotesRepository, LatestNotesRepository, NoteEditsRepository, NoteFavoritesRepository, PollVotesRepository, PollsRepository, SigninsRepository, UserIpsRepository, RegistryItemsRepository, MiUser } from '@/models/_.js';
|
||||
import type Logger from '@/logger.js';
|
||||
import { DriveService } from '@/core/DriveService.js';
|
||||
import type { MiDriveFile } from '@/models/DriveFile.js';
|
||||
|
|
@ -19,6 +19,7 @@ import { ApLogService } from '@/core/ApLogService.js';
|
|||
import { ReactionService } from '@/core/ReactionService.js';
|
||||
import { QueueService } from '@/core/QueueService.js';
|
||||
import { CacheService } from '@/core/CacheService.js';
|
||||
import { NoteDeleteService } from '@/core/NoteDeleteService.js';
|
||||
import { QueueLoggerService } from '@/queue/QueueLoggerService.js';
|
||||
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
|
||||
import * as Acct from '@/misc/acct.js';
|
||||
|
|
@ -99,6 +100,7 @@ export class DeleteAccountProcessorService {
|
|||
private readonly apLogService: ApLogService,
|
||||
private readonly cacheService: CacheService,
|
||||
private readonly apPersonService: ApPersonService,
|
||||
private readonly noteDeleteService: NoteDeleteService,
|
||||
) {
|
||||
this.logger = this.queueLoggerService.logger.createSubLogger('delete-account');
|
||||
}
|
||||
|
|
@ -293,11 +295,12 @@ export class DeleteAccountProcessorService {
|
|||
const notes = await this.notesRepository.find({
|
||||
where: {
|
||||
userId: user.id,
|
||||
replyId: IsNull(),
|
||||
...(cursor ? { id: MoreThan(cursor) } : {}),
|
||||
},
|
||||
take: 100,
|
||||
order: {
|
||||
id: 1,
|
||||
id: 'desc',
|
||||
},
|
||||
}) as MiNote[];
|
||||
|
||||
|
|
@ -318,6 +321,16 @@ export class DeleteAccountProcessorService {
|
|||
|
||||
const ids = notes.map(note => note.id);
|
||||
|
||||
const replies = await this.notesRepository.find({
|
||||
where: { replyId: In(ids) },
|
||||
relations: { user: true },
|
||||
});
|
||||
|
||||
// Delete replies through the usual service to ensure we get all "cascading notes" logic.
|
||||
for (const reply of replies) {
|
||||
await this.noteDeleteService.delete(reply.user as MiUser, reply);
|
||||
}
|
||||
|
||||
await this.noteEditsRepository.delete({
|
||||
noteId: In(ids),
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue