import { Inject, Injectable } from '@nestjs/common'; import { In } from 'typeorm'; import { DI } from '@/di-symbols.js'; import type { MutingsRepository } from '@/models/index.js'; import type { Config } from '@/config.js'; import type Logger from '@/logger.js'; import { bindThis } from '@/decorators.js'; import { UserMutingService } from '@/core/UserMutingService.js'; import { QueueLoggerService } from '../QueueLoggerService.js'; import type Bull from 'bull'; @Injectable() export class CheckExpiredMutingsProcessorService { private logger: Logger; constructor( @Inject(DI.config) private config: Config, @Inject(DI.mutingsRepository) private mutingsRepository: MutingsRepository, private userMutingService: UserMutingService, private queueLoggerService: QueueLoggerService, ) { this.logger = this.queueLoggerService.logger.createSubLogger('check-expired-mutings'); } @bindThis public async process(job: Bull.Job>, done: () => void): Promise { this.logger.info('Checking expired mutings...'); const expired = await this.mutingsRepository.createQueryBuilder('muting') .where('muting.expiresAt IS NOT NULL') .andWhere('muting.expiresAt < :now', { now: new Date() }) .innerJoinAndSelect('muting.mutee', 'mutee') .getMany(); if (expired.length > 0) { await this.userMutingService.unmute(expired); } this.logger.succ('All expired mutings checked.'); done(); } }