mirror of
https://github.com/monkeytypegame/monkeytype.git
synced 2025-12-09 12:56:07 +08:00
Remove class syntax from db client (#2940) Bruception
Co-authored-by: Jack <jack@monkeytype.com>
This commit is contained in:
parent
9634b93fc3
commit
e5c295cfe4
18 changed files with 68 additions and 77 deletions
|
|
@ -1,5 +1,5 @@
|
|||
import _ from "lodash";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import { Filter, ObjectId, MatchKeysAndValues } from "mongodb";
|
||||
import MonkeyError from "../utils/error";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { InsertManyResult, InsertOneResult } from "mongodb";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
|
||||
async function addCommand(
|
||||
command,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { UpdateResult } from "mongodb";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import _ from "lodash";
|
||||
|
||||
export async function saveConfig(
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import Logger from "../utils/logger";
|
||||
import { performance } from "perf_hooks";
|
||||
import { setLeaderboard } from "../utils/prometheus";
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { ObjectId } from "mongodb";
|
|||
import stringSimilarity from "string-similarity";
|
||||
import path from "path";
|
||||
import fs from "fs";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import MonkeyError from "../utils/error";
|
||||
|
||||
const PATH_TO_REPO = "../../../../monkeytype-new-quotes";
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import MonkeyError from "../utils/error";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import { ObjectId, Filter } from "mongodb";
|
||||
|
||||
const MAX_PRESETS = 10;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
|
||||
export async function get(): Promise<MonkeyTypes.PSA[]> {
|
||||
return await db.collection<MonkeyTypes.PSA>("psa").find().toArray();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import { roundTo2 } from "../utils/misc";
|
||||
|
||||
export async function updateStats(
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
|
||||
export async function submit(
|
||||
quoteId: number,
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import MonkeyError from "../utils/error";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
|
||||
const COLLECTION_NAME = "reports";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { DeleteResult, ObjectId, UpdateResult } from "mongodb";
|
||||
import MonkeyError from "../utils/error";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
|
||||
import { getUser, getTags } from "./user";
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import _ from "lodash";
|
|||
import { isUsernameValid } from "../utils/validation";
|
||||
import { updateUserEmail } from "../utils/auth";
|
||||
import { checkAndUpdatePb } from "../utils/pb";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import MonkeyError from "../utils/error";
|
||||
import {
|
||||
Collection,
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import db from "./db";
|
||||
import * as db from "./db";
|
||||
import _ from "lodash";
|
||||
import Logger from "../utils/logger";
|
||||
import { identity } from "../utils/misc";
|
||||
|
|
|
|||
|
|
@ -6,77 +6,68 @@ import {
|
|||
MongoClientOptions,
|
||||
WithId,
|
||||
} from "mongodb";
|
||||
import MonkeyError from "../utils/error";
|
||||
import Logger from "../utils/logger";
|
||||
|
||||
class DatabaseClient {
|
||||
static mongoClient: MongoClient;
|
||||
static db: Db;
|
||||
static collections: Record<string, Collection<any>> = {};
|
||||
static connected = false;
|
||||
let mongoClient: MongoClient;
|
||||
let db: Db;
|
||||
|
||||
static async connect(): Promise<void> {
|
||||
const {
|
||||
DB_USERNAME,
|
||||
DB_PASSWORD,
|
||||
DB_AUTH_MECHANISM,
|
||||
DB_AUTH_SOURCE,
|
||||
DB_URI,
|
||||
DB_NAME,
|
||||
} = process.env;
|
||||
export async function connect(): Promise<void> {
|
||||
const {
|
||||
DB_USERNAME,
|
||||
DB_PASSWORD,
|
||||
DB_AUTH_MECHANISM,
|
||||
DB_AUTH_SOURCE,
|
||||
DB_URI,
|
||||
DB_NAME,
|
||||
} = process.env;
|
||||
|
||||
if (!DB_URI || !DB_NAME) {
|
||||
throw new Error("No database configuration provided");
|
||||
}
|
||||
if (!DB_URI || !DB_NAME) {
|
||||
throw new Error("No database configuration provided");
|
||||
}
|
||||
|
||||
const connectionOptions: MongoClientOptions = {
|
||||
connectTimeoutMS: 2000,
|
||||
serverSelectionTimeoutMS: 2000,
|
||||
const connectionOptions: MongoClientOptions = {
|
||||
connectTimeoutMS: 2000,
|
||||
serverSelectionTimeoutMS: 2000,
|
||||
};
|
||||
|
||||
if (DB_USERNAME && DB_PASSWORD) {
|
||||
connectionOptions.auth = {
|
||||
username: DB_USERNAME,
|
||||
password: DB_PASSWORD,
|
||||
};
|
||||
|
||||
if (DB_USERNAME && DB_PASSWORD) {
|
||||
connectionOptions.auth = {
|
||||
username: DB_USERNAME,
|
||||
password: DB_PASSWORD,
|
||||
};
|
||||
}
|
||||
|
||||
if (DB_AUTH_MECHANISM) {
|
||||
connectionOptions.authMechanism = DB_AUTH_MECHANISM as AuthMechanism;
|
||||
}
|
||||
|
||||
if (DB_AUTH_SOURCE) {
|
||||
connectionOptions.authSource = DB_AUTH_SOURCE;
|
||||
}
|
||||
|
||||
this.mongoClient = new MongoClient(DB_URI, connectionOptions);
|
||||
|
||||
try {
|
||||
await this.mongoClient.connect();
|
||||
this.db = this.mongoClient.db(DB_NAME);
|
||||
this.connected = true;
|
||||
} catch (error) {
|
||||
Logger.error(error.message);
|
||||
Logger.error(
|
||||
"Failed to connect to database. Exiting with exit status code 1."
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static async close(): Promise<void> {
|
||||
if (this.connected) {
|
||||
await this.mongoClient.close();
|
||||
}
|
||||
if (DB_AUTH_MECHANISM) {
|
||||
connectionOptions.authMechanism = DB_AUTH_MECHANISM as AuthMechanism;
|
||||
}
|
||||
|
||||
static collection<T>(collectionName: string): Collection<WithId<T>> {
|
||||
if (!(collectionName in this.collections)) {
|
||||
this.collections[collectionName] =
|
||||
this.db.collection<WithId<T>>(collectionName);
|
||||
}
|
||||
if (DB_AUTH_SOURCE) {
|
||||
connectionOptions.authSource = DB_AUTH_SOURCE;
|
||||
}
|
||||
|
||||
return this.collections[collectionName];
|
||||
mongoClient = new MongoClient(DB_URI, connectionOptions);
|
||||
|
||||
try {
|
||||
await mongoClient.connect();
|
||||
db = mongoClient.db(DB_NAME);
|
||||
} catch (error) {
|
||||
Logger.error(error.message);
|
||||
Logger.error(
|
||||
"Failed to connect to database. Exiting with exit status code 1."
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
export default DatabaseClient;
|
||||
export function getDb(): Db | undefined {
|
||||
return db;
|
||||
}
|
||||
|
||||
export function collection<T>(collectionName: string): Collection<WithId<T>> {
|
||||
if (!db) {
|
||||
throw new MonkeyError(500, "Database is not initialized.");
|
||||
}
|
||||
|
||||
return db.collection<WithId<T>>(collectionName);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { CronJob } from "cron";
|
||||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import Logger from "../utils/logger";
|
||||
|
||||
const CRON_SCHEDULE = "0 0 0 * * *";
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import Logger from "../utils/logger";
|
||||
import MonkeyError from "../utils/error";
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import "dotenv/config";
|
|||
import admin, { ServiceAccount } from "firebase-admin";
|
||||
// @ts-ignore
|
||||
import serviceAccount from "./credentials/serviceAccountKey.json"; // eslint-disable-line require-path-exists/exists
|
||||
import db from "./init/db";
|
||||
import * as db from "./init/db";
|
||||
import jobs from "./jobs";
|
||||
import { getLiveConfiguration } from "./init/configuration";
|
||||
import app from "./app";
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import db from "../init/db";
|
||||
import * as db from "../init/db";
|
||||
import chalk from "chalk";
|
||||
import winston, { format } from "winston";
|
||||
import { resolve } from "path";
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue