47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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<Record<string, unknown>>, done: () => void): Promise<void> {
 | |
| 		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();
 | |
| 	}
 | |
| }
 | 
