Export notes with file detail (#11293)

This commit is contained in:
CGsama 2023-07-16 01:21:49 -04:00 committed by GitHub
parent 96cde67b2c
commit 4417412787
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -14,6 +14,8 @@ import { bindThis } from '@/decorators.js';
import { QueueLoggerService } from '../QueueLoggerService.js'; import { QueueLoggerService } from '../QueueLoggerService.js';
import type * as Bull from 'bullmq'; import type * as Bull from 'bullmq';
import type { DbJobDataWithUser } from '../types.js'; import type { DbJobDataWithUser } from '../types.js';
import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
import { Packed } from '@/misc/json-schema.js';
@Injectable() @Injectable()
export class ExportNotesProcessorService { export class ExportNotesProcessorService {
@ -34,6 +36,8 @@ export class ExportNotesProcessorService {
private driveService: DriveService, private driveService: DriveService,
private queueLoggerService: QueueLoggerService, private queueLoggerService: QueueLoggerService,
private driveFileEntityService: DriveFileEntityService,
) { ) {
this.logger = this.queueLoggerService.logger.createSubLogger('export-notes'); this.logger = this.queueLoggerService.logger.createSubLogger('export-notes');
} }
@ -97,7 +101,8 @@ export class ExportNotesProcessorService {
if (note.hasPoll) { if (note.hasPoll) {
poll = await this.pollsRepository.findOneByOrFail({ noteId: note.id }); poll = await this.pollsRepository.findOneByOrFail({ noteId: note.id });
} }
const content = JSON.stringify(serialize(note, poll)); const files = await this.driveFileEntityService.packManyByIds(note.fileIds);
const content = JSON.stringify(serialize(note, poll, files));
const isFirst = exportedNotesCount === 0; const isFirst = exportedNotesCount === 0;
await write(isFirst ? content : ',\n' + content); await write(isFirst ? content : ',\n' + content);
exportedNotesCount++; exportedNotesCount++;
@ -125,12 +130,13 @@ export class ExportNotesProcessorService {
} }
} }
function serialize(note: Note, poll: Poll | null = null): Record<string, unknown> { function serialize(note: Note, poll: Poll | null = null, files: Map<Packed<'DriveFile'>['id'], Packed<'DriveFile'>>): Record<string, unknown> {
return { return {
id: note.id, id: note.id,
text: note.text, text: note.text,
createdAt: note.createdAt, createdAt: note.createdAt,
fileIds: note.fileIds, fileIds: note.fileIds,
files: files,
replyId: note.replyId, replyId: note.replyId,
renoteId: note.renoteId, renoteId: note.renoteId,
poll: poll, poll: poll,