summary refs log tree commit diff
path: root/src/util/util/Database.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/util/Database.ts')
-rw-r--r--src/util/util/Database.ts78
1 files changed, 41 insertions, 37 deletions
diff --git a/src/util/util/Database.ts b/src/util/util/Database.ts
index 84ce473d..b9f8365e 100644
--- a/src/util/util/Database.ts
+++ b/src/util/util/Database.ts
@@ -1,13 +1,12 @@
+import { config } from "dotenv";
+import fs from "fs";
 import path from "path";
+import { green, red, yellow } from "picocolors";
+import { exit } from "process";
 import "reflect-metadata";
-import { DataSource, createConnection, DataSourceOptions, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm";
+import { DataSource, DataSourceOptions, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm";
 import * as Models from "../entities";
-import { Migration } from "../entities/Migration";
-import { yellow, green, red } from "picocolors";
-import fs from "fs";
-import { exit } from "process";
 import { BaseClass, BaseClassWithoutId } from "../entities";
-import { config } from "dotenv";
 
 // UUID extension option is only supported with postgres
 // We want to generate all id's with Snowflakes that's why we have our own BaseEntity class
@@ -18,15 +17,15 @@ let dataSource: DataSource;
 export async function getOrInitialiseDatabase(): Promise<DataSource> {
 	//if (dataSource) return dataSource; // prevent initalizing multiple times
 
-	if(dataSource.isInitialized) return dataSource;
-	
+	if (dataSource.isInitialized) return dataSource;
+
 	await dataSource.initialize();
 	console.log(`[Database] ${green("Connected!")}`);
 	await dataSource.runMigrations();
 	console.log(`[Database] ${green("Up to date!")}`);
 
-	if("DB_MIGRATE" in process.env) {
-		console.log("DB_MIGRATE specified, exiting!")
+	if ("DB_MIGRATE" in process.env) {
+		console.log("DB_MIGRATE specified, exiting!");
 		exit(0);
 	}
 	return dataSource;
@@ -40,64 +39,69 @@ function getDataSourceOptions(): DataSourceOptions {
 	config();
 	//get connection string and check for migrations
 	const dbConnectionString = process.env.DATABASE || path.join(process.cwd(), "database.db");
-	const type = dbConnectionString.includes("://") ? dbConnectionString.split(":")[0]?.replace("+srv", "") : "sqlite" as any;
+	const type = dbConnectionString.includes("://") ? dbConnectionString.split(":")[0]?.replace("+srv", "") : ("sqlite" as any);
 	const isSqlite = type.includes("sqlite");
 	const migrationsExist = fs.existsSync(path.join(__dirname, "..", "migrations", type));
 	//read env vars
 	const synchronizeInsteadOfMigrations = "DB_UNSAFE" in process.env;
 	const verboseDb = "DB_VERBOSE" in process.env;
-	
-	if(isSqlite)
+
+	if (isSqlite)
 		console.log(`[Database] ${red(`You are running sqlite! Please keep in mind that we recommend setting up a dedicated database!`)}`);
-	if(verboseDb)
-		console.log(`[Database] ${red(`Verbose database logging is enabled, this might impact performance! Unset DB_VERBOSE to disable.`)}`);
+	if (verboseDb)
+		console.log(
+			`[Database] ${red(`Verbose database logging is enabled, this might impact performance! Unset DB_VERBOSE to disable.`)}`
+		);
 
-	if(synchronizeInsteadOfMigrations){
-		console.log(`[Database] ${red(`Unsafe database upgrades are enabled! We are not responsible for broken databases! Unset DB_UNSAFE to disable.`)}`);
-	}
-	else if(!migrationsExist) {
+	if (synchronizeInsteadOfMigrations) {
+		console.log(
+			`[Database] ${red(
+				`Unsafe database upgrades are enabled! We are not responsible for broken databases! Unset DB_UNSAFE to disable.`
+			)}`
+		);
+	} else if (!migrationsExist) {
 		console.log(`[Database] ${red(`Database engine not supported! Set UNSAFE_DB to bypass.`)}`);
 		console.log(`[Database] ${red(`Please mention this to Fosscord developers, and provide this info:`)}`);
-		console.log(`[Database]\n${red(JSON.stringify({
-			db_type: type,
-			migrations_exist: migrationsExist
-		}, null, 4))}`);
+		console.log(
+			`[Database]\n${red(
+				JSON.stringify(
+					{
+						db_type: type,
+						migrations_exist: migrationsExist
+					},
+					null,
+					4
+				)
+			)}`
+		);
 
-		if(!("DB_MIGRATE" in process.env)) exit(1);
+		if (!("DB_MIGRATE" in process.env)) exit(1);
 	}
 	console.log(`[Database] ${yellow(`Configuring data source to use ${type} database...`)}`);
 	return {
 		type,
-        charset: 'utf8mb4',
+		charset: "utf8mb4",
 		url: isSqlite ? undefined : dbConnectionString,
 		database: isSqlite ? dbConnectionString : undefined,
 		// @ts-ignore
 		//entities: Object.values(Models).filter((x) => x.constructor.name !== "Object" && x.constructor.name !== "Array" && x.constructor.name !== "BigInt" && x).map(x=>x.name),
 		entities: Object.values(Models).filter((x) => x.constructor.name == "Function" && shouldIncludeEntity(x.name)),
 		synchronize: synchronizeInsteadOfMigrations,
-		logging: verboseDb,
+		logging: verboseDb ? "all" : false,
 		cache: {
-			duration: 1000 * 3, // cache all find queries for 3 seconds
+			duration: 1000 * 3 // cache all find queries for 3 seconds
 		},
 		bigNumberStrings: false,
 		supportBigNumbers: true,
 		name: "default",
 		migrations: synchronizeInsteadOfMigrations ? [] : [path.join(__dirname, "..", "migrations", type, "*.js")],
 		migrationsRun: !synchronizeInsteadOfMigrations,
-		//migrationsRun: false,
-		cli: {
-			migrationsDir: `src/migrations/${type}`
-		},
+		applicationName: `Fosscord Server`,
 	} as DataSourceOptions;
 }
 
 function shouldIncludeEntity(name: string): boolean {
-	return ![
-		BaseClassWithoutId,
-		PrimaryColumn,
-		BaseClass,
-		PrimaryGeneratedColumn
-	].map(x=>x.name).includes(name);
+	return ![BaseClassWithoutId, PrimaryColumn, BaseClass, PrimaryGeneratedColumn].map((x) => x.name).includes(name);
 }
 
 export default dataSource = new DataSource(getDataSourceOptions());