Remove class syntax from db client (#2940) Bruception

Co-authored-by: Jack <jack@monkeytype.com>
This commit is contained in:
Bruce Berrios 2022-05-04 19:57:51 -04:00 committed by GitHub
parent 9634b93fc3
commit e5c295cfe4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 68 additions and 77 deletions

View file

@ -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";

View file

@ -1,5 +1,5 @@
import { InsertManyResult, InsertOneResult } from "mongodb";
import db from "../init/db";
import * as db from "../init/db";
async function addCommand(
command,

View file

@ -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(

View file

@ -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";

View file

@ -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";

View file

@ -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;

View file

@ -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();

View file

@ -1,4 +1,4 @@
import db from "../init/db";
import * as db from "../init/db";
import { roundTo2 } from "../utils/misc";
export async function updateStats(

View file

@ -1,4 +1,4 @@
import db from "../init/db";
import * as db from "../init/db";
export async function submit(
quoteId: number,

View file

@ -1,5 +1,5 @@
import MonkeyError from "../utils/error";
import db from "../init/db";
import * as db from "../init/db";
const COLLECTION_NAME = "reports";

View file

@ -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";

View file

@ -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,

View file

@ -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";

View file

@ -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);
}

View file

@ -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 * * *";

View file

@ -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";

View file

@ -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";

View file

@ -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";