diff options
| author | dakkar <dakkar@thenautilus.net> | 2025-03-02 18:57:27 +0000 |
|---|---|---|
| committer | dakkar <dakkar@thenautilus.net> | 2025-03-02 18:57:27 +0000 |
| commit | 0b5e197afb5f9c2519c22324706c3b27d5d3eea3 (patch) | |
| tree | c73d3940938e4fd8cc515377f9334c4a48679c7b /packages/backend/src/queue/processors/DeleteAccountProcessorService.ts | |
| parent | merge: pin corepack version (!885) (diff) | |
| parent | merge: Add/fix moderation logs for many endpoints (resolves #911 and #969) (!... (diff) | |
| download | sharkey-0b5e197afb5f9c2519c22324706c3b27d5d3eea3.tar.gz sharkey-0b5e197afb5f9c2519c22324706c3b27d5d3eea3.tar.bz2 sharkey-0b5e197afb5f9c2519c22324706c3b27d5d3eea3.zip | |
Merge branch 'develop' into release/2025.2.2
Diffstat (limited to 'packages/backend/src/queue/processors/DeleteAccountProcessorService.ts')
| -rw-r--r-- | packages/backend/src/queue/processors/DeleteAccountProcessorService.ts | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/packages/backend/src/queue/processors/DeleteAccountProcessorService.ts b/packages/backend/src/queue/processors/DeleteAccountProcessorService.ts index 0e604a0501..0c70829132 100644 --- a/packages/backend/src/queue/processors/DeleteAccountProcessorService.ts +++ b/packages/backend/src/queue/processors/DeleteAccountProcessorService.ts @@ -6,7 +6,7 @@ import { Inject, Injectable } from '@nestjs/common'; import { MoreThan } from 'typeorm'; import { DI } from '@/di-symbols.js'; -import type { DriveFilesRepository, NoteReactionsRepository, NotesRepository, UserProfilesRepository, UsersRepository } from '@/models/_.js'; +import type { DriveFilesRepository, NoteReactionsRepository, NotesRepository, UserProfilesRepository, UsersRepository, NoteScheduleRepository, MiNoteSchedule } from '@/models/_.js'; import type Logger from '@/logger.js'; import { DriveService } from '@/core/DriveService.js'; import type { MiDriveFile } from '@/models/DriveFile.js'; @@ -15,10 +15,12 @@ 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 { ApLogService } from '@/core/ApLogService.js'; +import { ReactionService } from '@/core/ReactionService.js'; import { QueueLoggerService } from '../QueueLoggerService.js'; import type * as Bull from 'bullmq'; import type { DbUserDeleteJobData } from '../types.js'; -import { ReactionService } from '@/core/ReactionService.js'; +import { QueueService } from '@/core/QueueService.js'; @Injectable() export class DeleteAccountProcessorService { @@ -40,11 +42,16 @@ export class DeleteAccountProcessorService { @Inject(DI.noteReactionsRepository) private noteReactionsRepository: NoteReactionsRepository, + @Inject(DI.noteScheduleRepository) + private noteScheduleRepository: NoteScheduleRepository, + + private queueService: QueueService, private driveService: DriveService, private emailService: EmailService, private queueLoggerService: QueueLoggerService, private searchService: SearchService, private reactionService: ReactionService, + private readonly apLogService: ApLogService, ) { this.logger = this.queueLoggerService.logger.createSubLogger('delete-account'); } @@ -58,6 +65,22 @@ export class DeleteAccountProcessorService { return; } + { // Delete scheduled notes + const scheduledNotes = await this.noteScheduleRepository.findBy({ + userId: user.id, + }) as MiNoteSchedule[]; + + for (const note of scheduledNotes) { + await this.queueService.ScheduleNotePostQueue.remove(`schedNote:${note.id}`); + } + + await this.noteScheduleRepository.delete({ + userId: user.id, + }); + + this.logger.succ('All scheduled notes deleted'); + } + { // Delete notes let cursor: MiNote['id'] | null = null; @@ -84,6 +107,13 @@ export class DeleteAccountProcessorService { for (const note of notes) { await this.searchService.unindexNote(note); } + + // Delete note AP logs + const noteUris = notes.map(n => n.uri).filter(u => !!u) as string[]; + if (noteUris.length > 0) { + await this.apLogService.deleteObjectLogs(noteUris) + .catch(err => this.logger.error(err, `Failed to delete AP logs for notes of user '${user.uri ?? user.id}'`)); + } } this.logger.succ('All of notes deleted'); @@ -149,6 +179,13 @@ export class DeleteAccountProcessorService { this.logger.succ('All of files deleted'); } + { // Delete actor logs + if (user.uri) { + await this.apLogService.deleteObjectLogs(user.uri) + .catch(err => this.logger.error(err, `Failed to delete AP logs for user '${user.uri}'`)); + } + } + { // Send email notification const profile = await this.userProfilesRepository.findOneByOrFail({ userId: user.id }); if (profile.email && profile.emailVerified) { |