3ecb0ab161
* add .github/workflows/nodejs.yml * fix * GitHub Actions: Node.js 8.xはサポートしない * add .github/workflows/docker.yml * Dockerビルドをキャッシュするように * Run test in github actions * 同リポジトリ内からのプルリクだと無駄に二回走るのを抑制 * 6925c00のdocker.ymlへの適応忘れ * fix .circleci/misskey/test.yml * test実行時にDBとかredisとか動かすように * fix * fix tests (#5544) * fix test * fix compile errors * PATH引き継ぎでchild_process.spawn時のENOENTを修正 * サーバー起動処理を共通化 * fix coding style * fd=4をipcに使うように * fix port * fix * fix ws port * #4033 にテストケースを追従 * fix? * fix?? * fix * fix * fix * maybe fix * fix * node 10.xサポートしてなかった * 11.10じゃないとだめだった * fix * remove chart test * fix * chart test復活 * fix * 一回一回コネクションを閉じる * Revert "一回一回コネクションを閉じる" This reverts commit 56e35cf4f83070744c8dd852f1a7075011d88828. * 一回一回sync→dropしてるのをやめてみる * fix * fix * … * キャッシュを切ってみる * add ts to require target * omg fix * Revert "キャッシュを切ってみる" This reverts commit 88161c59d2ea769ddf87143ba4fd4660a06afdf2. * done呼び忘れ * 実際の文字数リミットと違ってたので対応 * テストケースがバグってたので修正 * Revert "一回一回sync→dropしてるのをやめてみる" This reverts commit a9e543ba2eef790ac7a14ae8799b898765748e35. * fix * fix * fix * fix? * fix * chartのconnectionを分離する * fix * fix * fix tsconfig? * Revert "fix tsconfig?" This reverts commit ba9269eaf65507ff97ec1dd2e27260fb2cf0510b. * fix * TS_NODE_FILES を scripts の方で指定 * Windowsェ * Circle CIの実行条件をmasterへのpushのみに Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
168 lines
5.2 KiB
TypeScript
168 lines
5.2 KiB
TypeScript
import { createConnection, Logger, getConnection } from 'typeorm';
|
|
import config from '../config';
|
|
import { entities as charts } from '../services/chart/entities';
|
|
import { dbLogger } from './logger';
|
|
import * as highlight from 'cli-highlight';
|
|
|
|
import { Log } from '../models/entities/log';
|
|
import { User } from '../models/entities/user';
|
|
import { DriveFile } from '../models/entities/drive-file';
|
|
import { DriveFolder } from '../models/entities/drive-folder';
|
|
import { AccessToken } from '../models/entities/access-token';
|
|
import { App } from '../models/entities/app';
|
|
import { PollVote } from '../models/entities/poll-vote';
|
|
import { Note } from '../models/entities/note';
|
|
import { NoteReaction } from '../models/entities/note-reaction';
|
|
import { NoteWatching } from '../models/entities/note-watching';
|
|
import { NoteUnread } from '../models/entities/note-unread';
|
|
import { Notification } from '../models/entities/notification';
|
|
import { Meta } from '../models/entities/meta';
|
|
import { Following } from '../models/entities/following';
|
|
import { Instance } from '../models/entities/instance';
|
|
import { Muting } from '../models/entities/muting';
|
|
import { SwSubscription } from '../models/entities/sw-subscription';
|
|
import { Blocking } from '../models/entities/blocking';
|
|
import { UserList } from '../models/entities/user-list';
|
|
import { UserListJoining } from '../models/entities/user-list-joining';
|
|
import { UserGroup } from '../models/entities/user-group';
|
|
import { UserGroupJoining } from '../models/entities/user-group-joining';
|
|
import { UserGroupInvite } from '../models/entities/user-group-invite';
|
|
import { Hashtag } from '../models/entities/hashtag';
|
|
import { NoteFavorite } from '../models/entities/note-favorite';
|
|
import { AbuseUserReport } from '../models/entities/abuse-user-report';
|
|
import { RegistrationTicket } from '../models/entities/registration-tickets';
|
|
import { MessagingMessage } from '../models/entities/messaging-message';
|
|
import { Signin } from '../models/entities/signin';
|
|
import { AuthSession } from '../models/entities/auth-session';
|
|
import { FollowRequest } from '../models/entities/follow-request';
|
|
import { Emoji } from '../models/entities/emoji';
|
|
import { ReversiGame } from '../models/entities/games/reversi/game';
|
|
import { ReversiMatching } from '../models/entities/games/reversi/matching';
|
|
import { UserNotePining } from '../models/entities/user-note-pinings';
|
|
import { Poll } from '../models/entities/poll';
|
|
import { UserKeypair } from '../models/entities/user-keypair';
|
|
import { UserPublickey } from '../models/entities/user-publickey';
|
|
import { UserProfile } from '../models/entities/user-profile';
|
|
import { UserSecurityKey } from '../models/entities/user-security-key';
|
|
import { AttestationChallenge } from '../models/entities/attestation-challenge';
|
|
import { Page } from '../models/entities/page';
|
|
import { PageLike } from '../models/entities/page-like';
|
|
import { ModerationLog } from '../models/entities/moderation-log';
|
|
import { UsedUsername } from '../models/entities/used-username';
|
|
|
|
const sqlLogger = dbLogger.createSubLogger('sql', 'white', false);
|
|
|
|
class MyCustomLogger implements Logger {
|
|
private highlight(sql: string) {
|
|
return highlight.highlight(sql, {
|
|
language: 'sql', ignoreIllegals: true,
|
|
});
|
|
}
|
|
|
|
public logQuery(query: string, parameters?: any[]) {
|
|
sqlLogger.info(this.highlight(query));
|
|
}
|
|
|
|
public logQueryError(error: string, query: string, parameters?: any[]) {
|
|
sqlLogger.error(this.highlight(query));
|
|
}
|
|
|
|
public logQuerySlow(time: number, query: string, parameters?: any[]) {
|
|
sqlLogger.warn(this.highlight(query));
|
|
}
|
|
|
|
public logSchemaBuild(message: string) {
|
|
sqlLogger.info(message);
|
|
}
|
|
|
|
public log(message: string) {
|
|
sqlLogger.info(message);
|
|
}
|
|
|
|
public logMigration(message: string) {
|
|
sqlLogger.info(message);
|
|
}
|
|
}
|
|
|
|
export const entities = [
|
|
Meta,
|
|
Instance,
|
|
App,
|
|
AuthSession,
|
|
AccessToken,
|
|
User,
|
|
UserProfile,
|
|
UserKeypair,
|
|
UserPublickey,
|
|
UserList,
|
|
UserListJoining,
|
|
UserGroup,
|
|
UserGroupJoining,
|
|
UserGroupInvite,
|
|
UserNotePining,
|
|
UserSecurityKey,
|
|
UsedUsername,
|
|
AttestationChallenge,
|
|
Following,
|
|
FollowRequest,
|
|
Muting,
|
|
Blocking,
|
|
Note,
|
|
NoteFavorite,
|
|
NoteReaction,
|
|
NoteWatching,
|
|
NoteUnread,
|
|
Page,
|
|
PageLike,
|
|
Log,
|
|
DriveFile,
|
|
DriveFolder,
|
|
Poll,
|
|
PollVote,
|
|
Notification,
|
|
Emoji,
|
|
Hashtag,
|
|
SwSubscription,
|
|
AbuseUserReport,
|
|
RegistrationTicket,
|
|
MessagingMessage,
|
|
Signin,
|
|
ModerationLog,
|
|
ReversiGame,
|
|
ReversiMatching,
|
|
...charts as any
|
|
];
|
|
|
|
export function initDb(justBorrow = false, sync = false, log = false, forceRecreate = false) {
|
|
if (!forceRecreate) {
|
|
try {
|
|
const conn = getConnection();
|
|
return Promise.resolve(conn);
|
|
} catch (e) {}
|
|
}
|
|
|
|
return createConnection({
|
|
type: 'postgres',
|
|
host: config.db.host,
|
|
port: config.db.port,
|
|
username: config.db.user,
|
|
password: config.db.pass,
|
|
database: config.db.db,
|
|
extra: config.db.extra,
|
|
synchronize: process.env.NODE_ENV === 'test' || sync,
|
|
dropSchema: process.env.NODE_ENV === 'test' && !justBorrow,
|
|
cache: !config.db.disableCache ? {
|
|
type: 'redis',
|
|
options: {
|
|
host: config.redis.host,
|
|
port: config.redis.port,
|
|
password: config.redis.pass,
|
|
prefix: `${config.redis.prefix}:query:`,
|
|
db: config.redis.db || 0
|
|
}
|
|
} : false,
|
|
logging: log,
|
|
logger: log ? new MyCustomLogger() : undefined,
|
|
entities: entities
|
|
});
|
|
}
|