feat(server): 管理者用アカウント削除API実装

動作確認済み
Resolve #7735
This commit is contained in:
syuilo
2021-09-22 17:34:48 +09:00
parent 72a49f334a
commit 9208825975
6 changed files with 80 additions and 7 deletions

View File

@@ -173,9 +173,10 @@ export function createImportUserListsJob(user: ThinUser, fileId: DriveFile['id']
});
}
export function createDeleteAccountJob(user: ThinUser) {
export function createDeleteAccountJob(user: ThinUser, opts: { soft?: boolean; }) {
return dbQueue.add('deleteAccount', {
user: user
user: user,
soft: opts.soft
}, {
removeOnComplete: true,
removeOnFail: true

View File

@@ -1,7 +1,7 @@
import * as Bull from 'bull';
import { queueLogger } from '../../logger';
import { DriveFiles, Notes, UserProfiles, Users } from '@/models/index';
import { DbUserJobData } from '@/queue/types';
import { DbUserDeleteJobData } from '@/queue/types';
import { Note } from '@/models/entities/note';
import { DriveFile } from '@/models/entities/drive-file';
import { MoreThan } from 'typeorm';
@@ -10,7 +10,7 @@ import { sendEmail } from '@/services/send-email';
const logger = queueLogger.createSubLogger('delete-account');
export async function deleteAccount(job: Bull.Job<DbUserJobData>): Promise<string | void> {
export async function deleteAccount(job: Bull.Job<DbUserDeleteJobData>): Promise<string | void> {
logger.info(`Deleting account of ${job.data.user.id} ...`);
const user = await Users.findOne(job.data.user.id);
@@ -83,7 +83,12 @@ export async function deleteAccount(job: Bull.Job<DbUserJobData>): Promise<strin
}
}
await Users.delete(job.data.user.id);
// soft指定されている場合は物理削除しない
if (job.data.soft) {
// nop
} else {
await Users.delete(job.data.user.id);
}
return 'Account deleted';
}

View File

@@ -17,12 +17,17 @@ export type InboxJobData = {
signature: httpSignature.IParsedSignature;
};
export type DbJobData = DbUserJobData | DbUserImportJobData;
export type DbJobData = DbUserJobData | DbUserImportJobData | DbUserDeleteJobData;
export type DbUserJobData = {
user: ThinUser;
};
export type DbUserDeleteJobData = {
user: ThinUser;
soft?: boolean;
};
export type DbUserImportJobData = {
user: ThinUser;
fileId: DriveFile['id'];