refactor: migrate to typeorm 3.0 (#8443)

* wip

* wip

* wip

* Update following.ts

* wip

* wip

* wip

* Update resolve-user.ts

* maxQueryExecutionTime

* wip

* wip
This commit is contained in:
syuilo
2022-03-26 15:34:00 +09:00
committed by GitHub
parent 41c87074e6
commit 1c67c26bd8
325 changed files with 1314 additions and 1494 deletions

View File

@ -1,6 +1,7 @@
import define from '../../../define.js';
import { Users } from '@/models/index.js';
import { signup } from '../../../common/signup.js';
import { IsNull } from 'typeorm';
export const meta = {
tags: ['admin'],
@ -29,9 +30,9 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, _me) => {
const me = _me ? await Users.findOneOrFail(_me.id) : null;
const noUsers = (await Users.count({
host: null,
const me = _me ? await Users.findOneByOrFail({ id: _me.id }) : null;
const noUsers = (await Users.countBy({
host: IsNull(),
})) === 0;
if (!noUsers && !me?.isAdmin) throw new Error('access denied');

View File

@ -21,7 +21,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const user = await Users.findOne(ps.userId);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');

View File

@ -27,7 +27,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const ad = await Ads.findOne(ps.id);
const ad = await Ads.findOneBy({ id: ps.id });
if (ad == null) throw new ApiError(meta.errors.noSuchAd);

View File

@ -34,7 +34,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const ad = await Ads.findOne(ps.id);
const ad = await Ads.findOneBy({ id: ps.id });
if (ad == null) throw new ApiError(meta.errors.noSuchAd);

View File

@ -63,7 +63,7 @@ export default define(meta, paramDef, async (ps) => {
title: ps.title,
text: ps.text,
imageUrl: ps.imageUrl,
}).then(x => Announcements.findOneOrFail(x.identifiers[0]));
}).then(x => Announcements.findOneByOrFail(x.identifiers[0]));
return Object.assign({}, announcement, { createdAt: announcement.createdAt.toISOString(), updatedAt: null });
});

View File

@ -27,7 +27,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const announcement = await Announcements.findOne(ps.id);
const announcement = await Announcements.findOneBy({ id: ps.id });
if (announcement == null) throw new ApiError(meta.errors.noSuchAnnouncement);

View File

@ -69,7 +69,7 @@ export default define(meta, paramDef, async (ps) => {
const announcements = await query.take(ps.limit).getMany();
for (const announcement of announcements) {
(announcement as any).reads = await AnnouncementReads.count({
(announcement as any).reads = await AnnouncementReads.countBy({
announcementId: announcement.id,
});
}

View File

@ -30,7 +30,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const announcement = await Announcements.findOne(ps.id);
const announcement = await Announcements.findOneBy({ id: ps.id });
if (announcement == null) throw new ApiError(meta.errors.noSuchAnnouncement);

View File

@ -19,7 +19,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const files = await DriveFiles.find({
const files = await DriveFiles.findBy({
userId: ps.userId,
});

View File

@ -18,7 +18,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const files = await DriveFiles.find({
const files = await DriveFiles.findBy({
userId: IsNull(),
});

View File

@ -160,7 +160,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const file = ps.fileId ? await DriveFiles.findOne(ps.fileId) : await DriveFiles.findOne({
const file = ps.fileId ? await DriveFiles.findOneBy({ id: ps.fileId }) : await DriveFiles.findOne({
where: [{
url: ps.url,
}, {

View File

@ -1,7 +1,8 @@
import define from '../../../define.js';
import { Emojis } from '@/models/index.js';
import { getConnection, In } from 'typeorm';
import { In } from 'typeorm';
import { ApiError } from '../../../error.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -25,7 +26,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps) => {
const emojis = await Emojis.find({
const emojis = await Emojis.findBy({
id: In(ps.ids),
});
@ -36,5 +37,5 @@ export default define(meta, paramDef, async (ps) => {
});
}
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
});

View File

@ -1,11 +1,11 @@
import define from '../../../define.js';
import { Emojis, DriveFiles } from '@/models/index.js';
import { genId } from '@/misc/gen-id.js';
import { getConnection } from 'typeorm';
import { insertModerationLog } from '@/services/insert-moderation-log.js';
import { ApiError } from '../../../error.js';
import rndstr from 'rndstr';
import { publishBroadcastStream } from '@/services/stream.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -32,7 +32,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const file = await DriveFiles.findOne(ps.fileId);
const file = await DriveFiles.findOneBy({ id: ps.fileId });
if (file == null) throw new ApiError(meta.errors.noSuchFile);
@ -48,9 +48,9 @@ export default define(meta, paramDef, async (ps, me) => {
originalUrl: file.url,
publicUrl: file.webpublicUrl ?? file.url,
type: file.webpublicType ?? file.type,
}).then(x => Emojis.findOneOrFail(x.identifiers[0]));
}).then(x => Emojis.findOneByOrFail(x.identifiers[0]));
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
publishBroadcastStream('emojiAdded', {
emoji: await Emojis.pack(emoji.id),

View File

@ -1,11 +1,11 @@
import define from '../../../define.js';
import { Emojis } from '@/models/index.js';
import { genId } from '@/misc/gen-id.js';
import { getConnection } from 'typeorm';
import { ApiError } from '../../../error.js';
import { DriveFile } from '@/models/entities/drive-file.js';
import { uploadFromUrl } from '@/services/drive/upload-from-url.js';
import { publishBroadcastStream } from '@/services/stream.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -44,7 +44,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const emoji = await Emojis.findOne(ps.emojiId);
const emoji = await Emojis.findOneBy({ id: ps.emojiId });
if (emoji == null) {
throw new ApiError(meta.errors.noSuchEmoji);
@ -68,9 +68,9 @@ export default define(meta, paramDef, async (ps, me) => {
originalUrl: driveFile.url,
publicUrl: driveFile.webpublicUrl ?? driveFile.url,
type: driveFile.webpublicType ?? driveFile.type,
}).then(x => Emojis.findOneOrFail(x.identifiers[0]));
}).then(x => Emojis.findOneByOrFail(x.identifiers[0]));
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
publishBroadcastStream('emojiAdded', {
emoji: await Emojis.pack(copied.id),

View File

@ -1,8 +1,9 @@
import define from '../../../define.js';
import { Emojis } from '@/models/index.js';
import { getConnection, In } from 'typeorm';
import { In } from 'typeorm';
import { insertModerationLog } from '@/services/insert-moderation-log.js';
import { ApiError } from '../../../error.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -23,14 +24,14 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const emojis = await Emojis.find({
const emojis = await Emojis.findBy({
id: In(ps.ids),
});
for (const emoji of emojis) {
await Emojis.delete(emoji.id);
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
insertModerationLog(me, 'deleteEmoji', {
emoji: emoji,

View File

@ -1,8 +1,8 @@
import define from '../../../define.js';
import { Emojis } from '@/models/index.js';
import { getConnection } from 'typeorm';
import { insertModerationLog } from '@/services/insert-moderation-log.js';
import { ApiError } from '../../../error.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -29,13 +29,13 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const emoji = await Emojis.findOne(ps.id);
const emoji = await Emojis.findOneBy({ id: ps.id });
if (emoji == null) throw new ApiError(meta.errors.noSuchEmoji);
await Emojis.delete(emoji.id);
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
insertModerationLog(me, 'deleteEmoji', {
emoji: emoji,

View File

@ -1,7 +1,8 @@
import define from '../../../define.js';
import { Emojis } from '@/models/index.js';
import { getConnection, In } from 'typeorm';
import { In } from 'typeorm';
import { ApiError } from '../../../error.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -25,7 +26,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps) => {
const emojis = await Emojis.find({
const emojis = await Emojis.findBy({
id: In(ps.ids),
});
@ -36,5 +37,5 @@ export default define(meta, paramDef, async (ps) => {
});
}
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
});

View File

@ -1,7 +1,8 @@
import define from '../../../define.js';
import { Emojis } from '@/models/index.js';
import { getConnection, In } from 'typeorm';
import { In } from 'typeorm';
import { ApiError } from '../../../error.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -32,5 +33,5 @@ export default define(meta, paramDef, async (ps) => {
aliases: ps.aliases,
});
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
});

View File

@ -1,7 +1,8 @@
import define from '../../../define.js';
import { Emojis } from '@/models/index.js';
import { getConnection, In } from 'typeorm';
import { In } from 'typeorm';
import { ApiError } from '../../../error.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -30,5 +31,5 @@ export default define(meta, paramDef, async (ps) => {
category: ps.category,
});
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
});

View File

@ -1,7 +1,7 @@
import define from '../../../define.js';
import { Emojis } from '@/models/index.js';
import { getConnection } from 'typeorm';
import { ApiError } from '../../../error.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -33,7 +33,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps) => {
const emoji = await Emojis.findOne(ps.id);
const emoji = await Emojis.findOneBy({ id: ps.id });
if (emoji == null) throw new ApiError(meta.errors.noSuchEmoji);
@ -44,5 +44,5 @@ export default define(meta, paramDef, async (ps) => {
aliases: ps.aliases,
});
await getConnection().queryResultCache!.remove(['meta_emojis']);
await db.queryResultCache!.remove(['meta_emojis']);
});

View File

@ -19,7 +19,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const files = await DriveFiles.find({
const files = await DriveFiles.findBy({
userHost: ps.host,
});

View File

@ -20,7 +20,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const instance = await Instances.findOne({ host: toPuny(ps.host) });
const instance = await Instances.findOneBy({ host: toPuny(ps.host) });
if (instance == null) {
throw new Error('instance not found');

View File

@ -19,13 +19,13 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const followings = await Followings.find({
const followings = await Followings.findBy({
followerHost: ps.host,
});
const pairs = await Promise.all(followings.map(f => Promise.all([
Users.findOneOrFail(f.followerId),
Users.findOneOrFail(f.followeeId),
Users.findOneByOrFail({ id: f.followerId }),
Users.findOneByOrFail({ id: f.followeeId }),
])));
for (const pair of pairs) {

View File

@ -20,7 +20,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const instance = await Instances.findOne({ host: toPuny(ps.host) });
const instance = await Instances.findOneBy({ host: toPuny(ps.host) });
if (instance == null) {
throw new Error('instance not found');

View File

@ -1,5 +1,5 @@
import define from '../../define.js';
import { getConnection } from 'typeorm';
import { db } from '@/db/postgre.js';
export const meta = {
requireCredential: true,
@ -16,15 +16,13 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async () => {
const stats = await
getConnection().query(`SELECT * FROM pg_indexes;`)
.then(recs => {
const res = [] as { tablename: string; indexname: string; }[];
for (const rec of recs) {
res.push(rec);
}
return res;
});
const stats = await db.query(`SELECT * FROM pg_indexes;`).then(recs => {
const res = [] as { tablename: string; indexname: string; }[];
for (const rec of recs) {
res.push(rec);
}
return res;
});
return stats;
});

View File

@ -1,5 +1,5 @@
import { db } from '@/db/postgre.js';
import define from '../../define.js';
import { getConnection } from 'typeorm';
export const meta = {
requireCredential: true,
@ -28,7 +28,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async () => {
const sizes = await
getConnection().query(`
db.query(`
SELECT relname AS "table", reltuples as "count", pg_total_relation_size(C.oid) AS "size"
FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE nspname NOT IN ('pg_catalog', 'information_schema')

View File

@ -19,7 +19,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps) => {
const user = await Users.findOne(ps.userId as string);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');

View File

@ -18,7 +18,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps) => {
const user = await Users.findOne(ps.userId as string);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');

View File

@ -40,7 +40,7 @@ export default define(meta, paramDef, async (ps, user) => {
throw e;
});
const exist = await PromoNotes.findOne(note.id);
const exist = await PromoNotes.findOneBy({ noteId: note.id });
if (exist != null) {
throw new ApiError(meta.errors.alreadyPromoted);

View File

@ -33,7 +33,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps) => {
const user = await Users.findOne(ps.userId as string);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');

View File

@ -23,7 +23,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const report = await AbuseUserReports.findOne(ps.reportId);
const report = await AbuseUserReports.findOneByOrFail({ id: ps.reportId });
if (report == null) {
throw new Error('report not found');
@ -31,7 +31,7 @@ export default define(meta, paramDef, async (ps, me) => {
if (ps.forward && report.targetUserHost != null) {
const actor = await getInstanceActor();
const targetUser = await Users.findOneOrFail(report.targetUserId);
const targetUser = await Users.findOneByOrFail({ id: report.targetUserId });
deliver(actor, renderActivity(renderFlag(actor, [targetUser.uri!], report.comment)), targetUser.inbox);
}

View File

@ -1,8 +1,8 @@
import * as os from 'node:os';
import si from 'systeminformation';
import { getConnection } from 'typeorm';
import define from '../../define.js';
import { redisClient } from '../../../../db/redis.js';
import { db } from '@/db/postgre.js';
export const meta = {
requireCredential: true,
@ -103,7 +103,7 @@ export default define(meta, paramDef, async () => {
machine: os.hostname(),
os: os.platform(),
node: process.version,
psql: await getConnection().query('SHOW server_version').then(x => x[0].server_version),
psql: await db.query('SHOW server_version').then(x => x[0].server_version),
redis: redisClient.server_info.redis_version,
cpu: {
model: os.cpus()[0].model,

View File

@ -23,13 +23,13 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');
}
const _me = await Users.findOneOrFail(me.id);
const _me = await Users.findOneByOrFail({ id: me.id });
if ((_me.isModerator && !_me.isAdmin) && user.isAdmin) {
throw new Error('cannot show info of admin');
}

View File

@ -20,7 +20,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');

View File

@ -23,7 +23,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');
@ -58,12 +58,12 @@ export default define(meta, paramDef, async (ps, me) => {
});
async function unFollowAll(follower: User) {
const followings = await Followings.find({
const followings = await Followings.findBy({
followerId: follower.id,
});
for (const following of followings) {
const followee = await Users.findOne({
const followee = await Users.findOneBy({
id: following.followeeId,
});

View File

@ -20,7 +20,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');

View File

@ -20,7 +20,7 @@ export const paramDef = {
// eslint-disable-next-line import/no-default-export
export default define(meta, paramDef, async (ps, me) => {
const user = await Users.findOne(ps.userId as string);
const user = await Users.findOneBy({ id: ps.userId });
if (user == null) {
throw new Error('user not found');

View File

@ -1,8 +1,8 @@
import define from '../../define.js';
import { getConnection } from 'typeorm';
import { Meta } from '@/models/entities/meta.js';
import { insertModerationLog } from '@/services/insert-moderation-log.js';
import { DB_MAX_NOTE_TEXT_LENGTH } from '@/misc/hard-limits.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -396,7 +396,7 @@ export default define(meta, paramDef, async (ps, me) => {
set.deeplIsPro = ps.deeplIsPro;
}
await getConnection().transaction(async transactionalEntityManager => {
await db.transaction(async transactionalEntityManager => {
const meta = await transactionalEntityManager.findOne(Meta, {
order: {
id: 'DESC',

View File

@ -1,6 +1,6 @@
import define from '../../define.js';
import { getConnection } from 'typeorm';
import { insertModerationLog } from '@/services/insert-moderation-log.js';
import { db } from '@/db/postgre.js';
export const meta = {
tags: ['admin'],
@ -30,7 +30,7 @@ export default define(meta, paramDef, async (ps, me) => {
params.push('ANALYZE');
}
getConnection().query('VACUUM ' + params.join(' '));
db.query('VACUUM ' + params.join(' '));
insertModerationLog(me, 'vacuum', ps);
});