Update CleanRemoteNotesProcessorService.ts

This commit is contained in:
syuilo 2025-07-30 16:20:54 +09:00
parent 0217cff067
commit a48429a274
1 changed files with 17 additions and 4 deletions

View File

@ -5,9 +5,9 @@
import { setTimeout } from 'node:timers/promises'; import { setTimeout } from 'node:timers/promises';
import { Inject, Injectable } from '@nestjs/common'; import { Inject, Injectable } from '@nestjs/common';
import { And, IsNull, LessThan, MoreThan, Not } from 'typeorm'; import { And, In, IsNull, LessThan, MoreThan, Not } from 'typeorm';
import { DI } from '@/di-symbols.js'; import { DI } from '@/di-symbols.js';
import type { MiNote, NotesRepository } from '@/models/_.js'; import type { MiNote, NoteFavoritesRepository, NotesRepository } from '@/models/_.js';
import type Logger from '@/logger.js'; import type Logger from '@/logger.js';
import { bindThis } from '@/decorators.js'; import { bindThis } from '@/decorators.js';
import { IdService } from '@/core/IdService.js'; import { IdService } from '@/core/IdService.js';
@ -22,6 +22,9 @@ export class CleanRemoteNotesProcessorService {
@Inject(DI.notesRepository) @Inject(DI.notesRepository)
private notesRepository: NotesRepository, private notesRepository: NotesRepository,
@Inject(DI.noteFavoritesRepository)
private noteFavoritesRepository: NoteFavoritesRepository,
private idService: IdService, private idService: IdService,
private queueLoggerService: QueueLoggerService, private queueLoggerService: QueueLoggerService,
) { ) {
@ -51,13 +54,12 @@ export class CleanRemoteNotesProcessorService {
let cursor: MiNote['id'] | null = null; let cursor: MiNote['id'] | null = null;
while (true) { while (true) {
const notes: Pick<MiNote, 'id'>[] = await this.notesRepository.find({ let notes: Pick<MiNote, 'id'>[] = await this.notesRepository.find({
where: { where: {
id: cursor ? And(MoreThan(cursor), LessThan(maxId)) : LessThan(maxId), id: cursor ? And(MoreThan(cursor), LessThan(maxId)) : LessThan(maxId),
userHost: Not(IsNull()), userHost: Not(IsNull()),
clippedCount: 0, clippedCount: 0,
renoteCount: 0, renoteCount: 0,
// TODO: お気に入りされてないかなどの判定
}, },
take: MAX_NOTE_COUNT_PER_QUERY, take: MAX_NOTE_COUNT_PER_QUERY,
order: { order: {
@ -67,6 +69,17 @@ export class CleanRemoteNotesProcessorService {
select: ['id'], select: ['id'],
}); });
const favorites = notes.length === 0 ? [] : await this.noteFavoritesRepository.find({
where: {
noteId: In(notes.map(note => note.id)),
},
select: ['noteId'],
});
notes = notes.filter(note => {
return !favorites.some(favorite => favorite.noteId === note.id);
});
if (notes.length === 0) { if (notes.length === 0) {
job.updateProgress(100); job.updateProgress(100);
break; break;