summaryrefslogtreecommitdiff
path: root/packages/backend/src/queue/processors
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/queue/processors')
-rw-r--r--packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts25
-rw-r--r--packages/backend/src/queue/processors/CleanProcessorService.ts15
-rw-r--r--packages/backend/src/queue/processors/DeliverProcessorService.ts12
-rw-r--r--packages/backend/src/queue/processors/EndedPollNotificationProcessorService.ts8
-rw-r--r--packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts1
-rw-r--r--packages/backend/src/queue/processors/ExportNotesProcessorService.ts3
-rw-r--r--packages/backend/src/queue/processors/ImportCustomEmojisProcessorService.ts1
-rw-r--r--packages/backend/src/queue/processors/InboxProcessorService.ts2
8 files changed, 52 insertions, 15 deletions
diff --git a/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts b/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
index 02324c6cd4..e2720b4fe0 100644
--- a/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
+++ b/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
@@ -7,6 +7,7 @@ import { bindThis } from '@/decorators.js';
import type { RetentionAggregationsRepository, UsersRepository } from '@/models/index.js';
import { deepClone } from '@/misc/clone.js';
import { IdService } from '@/core/IdService.js';
+import { isDuplicateKeyValueError } from '@/misc/is-duplicate-key-value-error.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type Bull from 'bull';
@@ -49,13 +50,23 @@ export class AggregateRetentionProcessorService {
});
const targetUserIds = targetUsers.map(u => u.id);
- await this.retentionAggregationsRepository.insert({
- id: this.idService.genId(),
- createdAt: now,
- updatedAt: now,
- userIds: targetUserIds,
- usersCount: targetUserIds.length,
- });
+ try {
+ await this.retentionAggregationsRepository.insert({
+ id: this.idService.genId(),
+ createdAt: now,
+ updatedAt: now,
+ dateKey,
+ userIds: targetUserIds,
+ usersCount: targetUserIds.length,
+ });
+ } catch (err) {
+ if (isDuplicateKeyValueError(err)) {
+ this.logger.succ('Skip because it has already been processed by another worker.');
+ done();
+ return;
+ }
+ throw err;
+ }
// 今日活動したユーザーを全て取得
const activeUsers = await this.usersRepository.findBy({
diff --git a/packages/backend/src/queue/processors/CleanProcessorService.ts b/packages/backend/src/queue/processors/CleanProcessorService.ts
index 7fd2cde9c0..9534454fd7 100644
--- a/packages/backend/src/queue/processors/CleanProcessorService.ts
+++ b/packages/backend/src/queue/processors/CleanProcessorService.ts
@@ -1,7 +1,7 @@
import { Inject, Injectable } from '@nestjs/common';
import { In, LessThan } from 'typeorm';
import { DI } from '@/di-symbols.js';
-import type { AntennaNotesRepository, MutedNotesRepository, NotificationsRepository, RoleAssignmentsRepository, UserIpsRepository } from '@/models/index.js';
+import type { AntennaNotesRepository, AntennasRepository, MutedNotesRepository, NotificationsRepository, RoleAssignmentsRepository, UserIpsRepository } from '@/models/index.js';
import type { Config } from '@/config.js';
import type Logger from '@/logger.js';
import { bindThis } from '@/decorators.js';
@@ -26,6 +26,9 @@ export class CleanProcessorService {
@Inject(DI.mutedNotesRepository)
private mutedNotesRepository: MutedNotesRepository,
+ @Inject(DI.antennasRepository)
+ private antennasRepository: AntennasRepository,
+
@Inject(DI.antennaNotesRepository)
private antennaNotesRepository: AntennaNotesRepository,
@@ -55,8 +58,16 @@ export class CleanProcessorService {
reason: 'word',
});
- this.antennaNotesRepository.delete({
+ this.mutedNotesRepository.delete({
id: LessThan(this.idService.genId(new Date(Date.now() - (1000 * 60 * 60 * 24 * 90)))),
+ reason: 'word',
+ });
+
+ // 7日以上使われてないアンテナを停止
+ this.antennasRepository.update({
+ lastUsedAt: LessThan(new Date(Date.now() - (1000 * 60 * 60 * 24 * 7))),
+ }, {
+ isActive: false,
});
const expiredRoleAssignments = await this.roleAssignmentsRepository.createQueryBuilder('assign')
diff --git a/packages/backend/src/queue/processors/DeliverProcessorService.ts b/packages/backend/src/queue/processors/DeliverProcessorService.ts
index 2a053a12e0..43a92bb267 100644
--- a/packages/backend/src/queue/processors/DeliverProcessorService.ts
+++ b/packages/backend/src/queue/processors/DeliverProcessorService.ts
@@ -115,6 +115,18 @@ export class DeliverProcessorService {
if (res instanceof StatusError) {
// 4xx
if (res.isClientError) {
+ // 相手が閉鎖していることを明示しているため、配送停止する
+ if (job.data.isSharedInbox && res.statusCode === 410) {
+ this.federatedInstanceService.fetch(host).then(i => {
+ this.instancesRepository.update(i.id, {
+ isSuspended: true,
+ });
+ this.federatedInstanceService.updateCachePartial(host, {
+ isSuspended: true,
+ });
+ });
+ return `${host} is gone`;
+ }
// HTTPステータスコード4xxはクライアントエラーであり、それはつまり
// 何回再送しても成功することはないということなのでエラーにはしないでおく
return `${res.statusCode} ${res.statusMessage}`;
diff --git a/packages/backend/src/queue/processors/EndedPollNotificationProcessorService.ts b/packages/backend/src/queue/processors/EndedPollNotificationProcessorService.ts
index 037dfa1a53..501ed4090a 100644
--- a/packages/backend/src/queue/processors/EndedPollNotificationProcessorService.ts
+++ b/packages/backend/src/queue/processors/EndedPollNotificationProcessorService.ts
@@ -3,11 +3,11 @@ import { DI } from '@/di-symbols.js';
import type { PollVotesRepository, NotesRepository } from '@/models/index.js';
import type { Config } from '@/config.js';
import type Logger from '@/logger.js';
-import { CreateNotificationService } from '@/core/CreateNotificationService.js';
+import { NotificationService } from '@/core/NotificationService.js';
+import { bindThis } from '@/decorators.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type Bull from 'bull';
import type { EndedPollNotificationJobData } from '../types.js';
-import { bindThis } from '@/decorators.js';
@Injectable()
export class EndedPollNotificationProcessorService {
@@ -23,7 +23,7 @@ export class EndedPollNotificationProcessorService {
@Inject(DI.pollVotesRepository)
private pollVotesRepository: PollVotesRepository,
- private createNotificationService: CreateNotificationService,
+ private notificationService: NotificationService,
private queueLoggerService: QueueLoggerService,
) {
this.logger = this.queueLoggerService.logger.createSubLogger('ended-poll-notification');
@@ -47,7 +47,7 @@ export class EndedPollNotificationProcessorService {
const userIds = [...new Set([note.userId, ...votes.map(v => v.userId)])];
for (const userId of userIds) {
- this.createNotificationService.createNotification(userId, 'pollEnded', {
+ this.notificationService.createNotification(userId, 'pollEnded', {
noteId: note.id,
});
}
diff --git a/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts b/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
index c65f0a97a0..e9330772b9 100644
--- a/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
@@ -148,6 +148,7 @@ function serialize(favorite: NoteFavorite & { note: Note & { user: User } }, pol
visibility: favorite.note.visibility,
visibleUserIds: favorite.note.visibleUserIds,
localOnly: favorite.note.localOnly,
+ reactionAcceptance: favorite.note.reactionAcceptance,
uri: favorite.note.uri,
url: favorite.note.url,
user: {
diff --git a/packages/backend/src/queue/processors/ExportNotesProcessorService.ts b/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
index 3f4f16a2ec..2f74dd63cc 100644
--- a/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
@@ -10,10 +10,10 @@ import { DriveService } from '@/core/DriveService.js';
import { createTemp } from '@/misc/create-temp.js';
import type { Poll } from '@/models/entities/Poll.js';
import type { Note } from '@/models/entities/Note.js';
+import { bindThis } from '@/decorators.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type Bull from 'bull';
import type { DbUserJobData } from '../types.js';
-import { bindThis } from '@/decorators.js';
@Injectable()
export class ExportNotesProcessorService {
@@ -141,5 +141,6 @@ function serialize(note: Note, poll: Poll | null = null): Record<string, unknown
visibility: note.visibility,
visibleUserIds: note.visibleUserIds,
localOnly: note.localOnly,
+ reactionAcceptance: note.reactionAcceptance,
};
}
diff --git a/packages/backend/src/queue/processors/ImportCustomEmojisProcessorService.ts b/packages/backend/src/queue/processors/ImportCustomEmojisProcessorService.ts
index 4ecf8daf74..ed96e9a525 100644
--- a/packages/backend/src/queue/processors/ImportCustomEmojisProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportCustomEmojisProcessorService.ts
@@ -102,6 +102,7 @@ export class ImportCustomEmojisProcessorService {
host: null,
aliases: emojiInfo.aliases,
driveFile,
+ license: emojiInfo.license,
});
}
diff --git a/packages/backend/src/queue/processors/InboxProcessorService.ts b/packages/backend/src/queue/processors/InboxProcessorService.ts
index 33d6f4eafa..41fe06b7c3 100644
--- a/packages/backend/src/queue/processors/InboxProcessorService.ts
+++ b/packages/backend/src/queue/processors/InboxProcessorService.ts
@@ -64,7 +64,7 @@ export class InboxProcessorService {
const activity = job.data.activity;
//#region Log
- const info = Object.assign({}, activity) as any;
+ const info = Object.assign({}, activity);
delete info['@context'];
this.logger.debug(JSON.stringify(info, null, 2));
//#endregion