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 { Inject, Injectable } from '@nestjs/common';
|
||||||
import { In, MoreThan } from 'typeorm';
|
import { In, IsNull, MoreThan } from 'typeorm';
|
||||||
import { DI } from '@/di-symbols.js';
|
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 type Logger from '@/logger.js';
|
||||||
import { DriveService } from '@/core/DriveService.js';
|
import { DriveService } from '@/core/DriveService.js';
|
||||||
import type { MiDriveFile } from '@/models/DriveFile.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 { ReactionService } from '@/core/ReactionService.js';
|
||||||
import { QueueService } from '@/core/QueueService.js';
|
import { QueueService } from '@/core/QueueService.js';
|
||||||
import { CacheService } from '@/core/CacheService.js';
|
import { CacheService } from '@/core/CacheService.js';
|
||||||
|
import { NoteDeleteService } from '@/core/NoteDeleteService.js';
|
||||||
import { QueueLoggerService } from '@/queue/QueueLoggerService.js';
|
import { QueueLoggerService } from '@/queue/QueueLoggerService.js';
|
||||||
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
|
import { ApPersonService } from '@/core/activitypub/models/ApPersonService.js';
|
||||||
import * as Acct from '@/misc/acct.js';
|
import * as Acct from '@/misc/acct.js';
|
||||||
|
|
@ -99,6 +100,7 @@ export class DeleteAccountProcessorService {
|
||||||
private readonly apLogService: ApLogService,
|
private readonly apLogService: ApLogService,
|
||||||
private readonly cacheService: CacheService,
|
private readonly cacheService: CacheService,
|
||||||
private readonly apPersonService: ApPersonService,
|
private readonly apPersonService: ApPersonService,
|
||||||
|
private readonly noteDeleteService: NoteDeleteService,
|
||||||
) {
|
) {
|
||||||
this.logger = this.queueLoggerService.logger.createSubLogger('delete-account');
|
this.logger = this.queueLoggerService.logger.createSubLogger('delete-account');
|
||||||
}
|
}
|
||||||
|
|
@ -293,11 +295,12 @@ export class DeleteAccountProcessorService {
|
||||||
const notes = await this.notesRepository.find({
|
const notes = await this.notesRepository.find({
|
||||||
where: {
|
where: {
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
|
replyId: IsNull(),
|
||||||
...(cursor ? { id: MoreThan(cursor) } : {}),
|
...(cursor ? { id: MoreThan(cursor) } : {}),
|
||||||
},
|
},
|
||||||
take: 100,
|
take: 100,
|
||||||
order: {
|
order: {
|
||||||
id: 1,
|
id: 'desc',
|
||||||
},
|
},
|
||||||
}) as MiNote[];
|
}) as MiNote[];
|
||||||
|
|
||||||
|
|
@ -318,6 +321,16 @@ export class DeleteAccountProcessorService {
|
||||||
|
|
||||||
const ids = notes.map(note => note.id);
|
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({
|
await this.noteEditsRepository.delete({
|
||||||
noteId: In(ids),
|
noteId: In(ids),
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue