summaryrefslogtreecommitdiff
path: root/packages/backend/src/queue
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-10-21 14:18:53 +0900
committerGitHub <noreply@github.com>2023-10-21 14:18:53 +0900
commit3043b5256d7f9d9228035b0af9943027e0222dd4 (patch)
treed90296222000ca6f11e1ca26f940bc136b913e0f /packages/backend/src/queue
parentMerge pull request #12011 from misskey-dev/develop (diff)
parentNew Crowdin updates (#12094) (diff)
downloadmisskey-3043b5256d7f9d9228035b0af9943027e0222dd4.tar.gz
misskey-3043b5256d7f9d9228035b0af9943027e0222dd4.tar.bz2
misskey-3043b5256d7f9d9228035b0af9943027e0222dd4.zip
Merge pull request #12060 from misskey-dev/develop
Release: 2023.10.2
Diffstat (limited to '')
-rw-r--r--packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts4
-rw-r--r--packages/backend/src/queue/processors/ExportAntennasProcessorService.ts1
-rw-r--r--packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts60
-rw-r--r--packages/backend/src/queue/processors/ExportNotesProcessorService.ts39
-rw-r--r--packages/backend/src/queue/processors/ImportAntennasProcessorService.ts5
-rw-r--r--packages/backend/src/queue/processors/ImportFollowingProcessorService.ts6
-rw-r--r--packages/backend/src/queue/processors/ImportUserListsProcessorService.ts3
-rw-r--r--packages/backend/src/queue/processors/InboxProcessorService.ts2
-rw-r--r--packages/backend/src/queue/processors/RelationshipProcessorService.ts8
-rw-r--r--packages/backend/src/queue/types.ts3
10 files changed, 71 insertions, 60 deletions
diff --git a/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts b/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
index 5aac3f19e8..9f49d85c7f 100644
--- a/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
+++ b/packages/backend/src/queue/processors/AggregateRetentionProcessorService.ts
@@ -47,13 +47,13 @@ export class AggregateRetentionProcessorService {
// 今日登録したユーザーを全て取得
const targetUsers = await this.usersRepository.findBy({
host: IsNull(),
- createdAt: MoreThan(new Date(Date.now() - (1000 * 60 * 60 * 24))),
+ id: MoreThan(this.idService.gen(Date.now() - (1000 * 60 * 60 * 24))),
});
const targetUserIds = targetUsers.map(u => u.id);
try {
await this.retentionAggregationsRepository.insert({
- id: this.idService.genId(),
+ id: this.idService.gen(),
createdAt: now,
updatedAt: now,
dateKey,
diff --git a/packages/backend/src/queue/processors/ExportAntennasProcessorService.ts b/packages/backend/src/queue/processors/ExportAntennasProcessorService.ts
index a0afbee3ba..d0968d2923 100644
--- a/packages/backend/src/queue/processors/ExportAntennasProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportAntennasProcessorService.ts
@@ -80,6 +80,7 @@ export class ExportAntennasProcessorService {
return this.utilityService.getFullApAccount(u.username, u.host); // acct
}) : null,
caseSensitive: antenna.caseSensitive,
+ localOnly: antenna.localOnly,
withReplies: antenna.withReplies,
withFile: antenna.withFile,
notify: antenna.notify,
diff --git a/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts b/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
index 7248c7a649..af2a3434a9 100644
--- a/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportFavoritesProcessorService.ts
@@ -15,6 +15,7 @@ import { createTemp } from '@/misc/create-temp.js';
import type { MiPoll } from '@/models/Poll.js';
import type { MiNote } from '@/models/Note.js';
import { bindThis } from '@/decorators.js';
+import { IdService } from '@/core/IdService.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type * as Bull from 'bullmq';
import type { DbJobDataWithUser } from '../types.js';
@@ -35,6 +36,7 @@ export class ExportFavoritesProcessorService {
private driveService: DriveService,
private queueLoggerService: QueueLoggerService,
+ private idService: IdService,
) {
this.logger = this.queueLoggerService.logger.createSubLogger('export-favorites');
}
@@ -99,7 +101,7 @@ export class ExportFavoritesProcessorService {
if (favorite.note.hasPoll) {
poll = await this.pollsRepository.findOneByOrFail({ noteId: favorite.note.id });
}
- const content = JSON.stringify(serialize(favorite, poll));
+ const content = JSON.stringify(this.serialize(favorite, poll));
const isFirst = exportedFavoritesCount === 0;
await write(isFirst ? content : ',\n' + content);
exportedFavoritesCount++;
@@ -125,34 +127,34 @@ export class ExportFavoritesProcessorService {
cleanup();
}
}
-}
-function serialize(favorite: MiNoteFavorite & { note: MiNote & { user: MiUser } }, poll: MiPoll | null = null): Record<string, unknown> {
- return {
- id: favorite.id,
- createdAt: favorite.createdAt,
- note: {
- id: favorite.note.id,
- text: favorite.note.text,
- createdAt: favorite.note.createdAt,
- fileIds: favorite.note.fileIds,
- replyId: favorite.note.replyId,
- renoteId: favorite.note.renoteId,
- poll: poll,
- cw: favorite.note.cw,
- 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: {
- id: favorite.note.user.id,
- name: favorite.note.user.name,
- username: favorite.note.user.username,
- host: favorite.note.user.host,
- uri: favorite.note.user.uri,
+ private serialize(favorite: MiNoteFavorite & { note: MiNote & { user: MiUser } }, poll: MiPoll | null = null): Record<string, unknown> {
+ return {
+ id: favorite.id,
+ createdAt: this.idService.parse(favorite.id).date.toISOString(),
+ note: {
+ id: favorite.note.id,
+ text: favorite.note.text,
+ createdAt: this.idService.parse(favorite.note.id).date.toISOString(),
+ fileIds: favorite.note.fileIds,
+ replyId: favorite.note.replyId,
+ renoteId: favorite.note.renoteId,
+ poll: poll,
+ cw: favorite.note.cw,
+ 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: {
+ id: favorite.note.user.id,
+ name: favorite.note.user.name,
+ username: favorite.note.user.username,
+ host: favorite.note.user.host,
+ uri: favorite.note.user.uri,
+ },
},
- },
- };
+ };
+ }
}
diff --git a/packages/backend/src/queue/processors/ExportNotesProcessorService.ts b/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
index e0bc80e190..cd4ccb0b07 100644
--- a/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
+++ b/packages/backend/src/queue/processors/ExportNotesProcessorService.ts
@@ -17,6 +17,7 @@ import type { MiNote } from '@/models/Note.js';
import { bindThis } from '@/decorators.js';
import { DriveFileEntityService } from '@/core/entities/DriveFileEntityService.js';
import { Packed } from '@/misc/json-schema.js';
+import { IdService } from '@/core/IdService.js';
import { QueueLoggerService } from '../QueueLoggerService.js';
import type * as Bull from 'bullmq';
import type { DbJobDataWithUser } from '../types.js';
@@ -37,8 +38,8 @@ export class ExportNotesProcessorService {
private driveService: DriveService,
private queueLoggerService: QueueLoggerService,
-
private driveFileEntityService: DriveFileEntityService,
+ private idService: IdService,
) {
this.logger = this.queueLoggerService.logger.createSubLogger('export-notes');
}
@@ -103,7 +104,7 @@ export class ExportNotesProcessorService {
poll = await this.pollsRepository.findOneByOrFail({ noteId: note.id });
}
const files = await this.driveFileEntityService.packManyByIds(note.fileIds);
- const content = JSON.stringify(serialize(note, poll, files));
+ const content = JSON.stringify(this.serialize(note, poll, files));
const isFirst = exportedNotesCount === 0;
await write(isFirst ? content : ',\n' + content);
exportedNotesCount++;
@@ -129,22 +130,22 @@ export class ExportNotesProcessorService {
cleanup();
}
}
-}
-function serialize(note: MiNote, poll: MiPoll | null = null, files: Packed<'DriveFile'>[]): Record<string, unknown> {
- return {
- id: note.id,
- text: note.text,
- createdAt: note.createdAt,
- fileIds: note.fileIds,
- files: files,
- replyId: note.replyId,
- renoteId: note.renoteId,
- poll: poll,
- cw: note.cw,
- visibility: note.visibility,
- visibleUserIds: note.visibleUserIds,
- localOnly: note.localOnly,
- reactionAcceptance: note.reactionAcceptance,
- };
+ private serialize(note: MiNote, poll: MiPoll | null = null, files: Packed<'DriveFile'>[]): Record<string, unknown> {
+ return {
+ id: note.id,
+ text: note.text,
+ createdAt: this.idService.parse(note.id).date.toISOString(),
+ fileIds: note.fileIds,
+ files: files,
+ replyId: note.replyId,
+ renoteId: note.renoteId,
+ poll: poll,
+ cw: note.cw,
+ visibility: note.visibility,
+ visibleUserIds: note.visibleUserIds,
+ localOnly: note.localOnly,
+ reactionAcceptance: note.reactionAcceptance,
+ };
+ }
}
diff --git a/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts b/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
index 7c95bccaff..291ea14b67 100644
--- a/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportAntennasProcessorService.ts
@@ -43,6 +43,7 @@ const validate = new Ajv().compile({
type: 'string',
} },
caseSensitive: { type: 'boolean' },
+ localOnly: { type: 'boolean' },
withReplies: { type: 'boolean' },
withFile: { type: 'boolean' },
notify: { type: 'boolean' },
@@ -76,8 +77,7 @@ export class ImportAntennasProcessorService {
continue;
}
const result = await this.antennasRepository.insert({
- id: this.idService.genId(),
- createdAt: now,
+ id: this.idService.gen(now.getTime()),
lastUsedAt: now,
userId: job.data.user.id,
name: antenna.name,
@@ -87,6 +87,7 @@ export class ImportAntennasProcessorService {
excludeKeywords: antenna.excludeKeywords,
users: (antenna.src === 'list' && antenna.userListAccts !== null ? antenna.userListAccts : antenna.users).filter(Boolean),
caseSensitive: antenna.caseSensitive,
+ localOnly: antenna.localOnly,
withReplies: antenna.withReplies,
withFile: antenna.withFile,
notify: antenna.notify,
diff --git a/packages/backend/src/queue/processors/ImportFollowingProcessorService.ts b/packages/backend/src/queue/processors/ImportFollowingProcessorService.ts
index 2b5e41a12d..e75499a56f 100644
--- a/packages/backend/src/queue/processors/ImportFollowingProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportFollowingProcessorService.ts
@@ -56,7 +56,7 @@ export class ImportFollowingProcessorService {
const csv = await this.downloadService.downloadTextFile(file.url);
const targets = csv.trim().split('\n');
- this.queueService.createImportFollowingToDbJob({ id: user.id }, targets);
+ this.queueService.createImportFollowingToDbJob({ id: user.id }, targets, job.data.withReplies);
this.logger.succ('Import jobs created');
}
@@ -93,9 +93,9 @@ export class ImportFollowingProcessorService {
// skip myself
if (target.id === job.data.user.id) return;
- this.logger.info(`Follow ${target.id} ...`);
+ this.logger.info(`Follow ${target.id} ${job.data.withReplies ? 'with replies' : 'without replies'} ...`);
- this.queueService.createFollowJob([{ from: user, to: { id: target.id }, silent: true }]);
+ this.queueService.createFollowJob([{ from: user, to: { id: target.id }, silent: true, withReplies: job.data.withReplies }]);
} catch (e) {
this.logger.warn(`Error: ${e}`);
}
diff --git a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
index 9be36a9d0d..5dd3fbe887 100644
--- a/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
+++ b/packages/backend/src/queue/processors/ImportUserListsProcessorService.ts
@@ -80,8 +80,7 @@ export class ImportUserListsProcessorService {
if (list == null) {
list = await this.userListsRepository.insert({
- id: this.idService.genId(),
- createdAt: new Date(),
+ id: this.idService.gen(),
userId: user.id,
name: listName,
}).then(x => this.userListsRepository.findOneByOrFail(x.identifiers[0]));
diff --git a/packages/backend/src/queue/processors/InboxProcessorService.ts b/packages/backend/src/queue/processors/InboxProcessorService.ts
index 99e823f9fa..89d4ea503e 100644
--- a/packages/backend/src/queue/processors/InboxProcessorService.ts
+++ b/packages/backend/src/queue/processors/InboxProcessorService.ts
@@ -88,7 +88,7 @@ export class InboxProcessorService {
if (err.isClientError) {
throw new Bull.UnrecoverableError(`skip: Ignored deleted actors on both ends ${activity.actor} - ${err.statusCode}`);
}
- throw new Error(`Error in actor ${activity.actor} - ${err.statusCode ?? err}`);
+ throw new Error(`Error in actor ${activity.actor} - ${err.statusCode}`);
}
}
}
diff --git a/packages/backend/src/queue/processors/RelationshipProcessorService.ts b/packages/backend/src/queue/processors/RelationshipProcessorService.ts
index 5b2d2ef313..b2d8e3631f 100644
--- a/packages/backend/src/queue/processors/RelationshipProcessorService.ts
+++ b/packages/backend/src/queue/processors/RelationshipProcessorService.ts
@@ -34,8 +34,12 @@ export class RelationshipProcessorService {
@bindThis
public async processFollow(job: Bull.Job<RelationshipJobData>): Promise<string> {
- this.logger.info(`${job.data.from.id} is trying to follow ${job.data.to.id}`);
- await this.userFollowingService.follow(job.data.from, job.data.to, job.data.requestId, job.data.silent);
+ this.logger.info(`${job.data.from.id} is trying to follow ${job.data.to.id} ${job.data.withReplies ? "with replies" : "without replies"}`);
+ await this.userFollowingService.follow(job.data.from, job.data.to, {
+ requestId: job.data.requestId,
+ silent: job.data.silent,
+ withReplies: job.data.withReplies,
+ });
return 'ok';
}
diff --git a/packages/backend/src/queue/types.ts b/packages/backend/src/queue/types.ts
index c9122f5ca2..9330c01528 100644
--- a/packages/backend/src/queue/types.ts
+++ b/packages/backend/src/queue/types.ts
@@ -32,6 +32,7 @@ export type RelationshipJobData = {
to: ThinUser;
silent?: boolean;
requestId?: string;
+ withReplies?: boolean;
}
export type DbJobData<T extends keyof DbJobMap> = DbJobMap[T];
@@ -79,6 +80,7 @@ export type DbUserDeleteJobData = {
export type DbUserImportJobData = {
user: ThinUser;
fileId: MiDriveFile['id'];
+ withReplies?: boolean;
};
export type DBAntennaImportJobData = {
@@ -89,6 +91,7 @@ export type DBAntennaImportJobData = {
export type DbUserImportToDbJobData = {
user: ThinUser;
target: string;
+ withReplies?: boolean;
};
export type ObjectStorageJobData = ObjectStorageFileJobData | Record<string, unknown>;