refactor: replace TypeORM with knex.js

Co-authored-by: Philip Molares <philip.molares@udo.edu>
Signed-off-by: Philip Molares <philip.molares@udo.edu>
Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
Erik Michelson 2025-03-14 23:33:29 +01:00
parent 6e151c8a1b
commit c0ce00b3f9
No known key found for this signature in database
GPG key ID: DB99ADDDC5C0AF82
242 changed files with 4601 additions and 6871 deletions

View file

@ -4,8 +4,8 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
import { registerAs } from '@nestjs/config';
import z from 'zod';
import { Knex } from 'knex';
import z from 'zod';
import { DatabaseType } from './database-type.enum';
import { parseOptionalNumber } from './utils';
@ -47,31 +47,15 @@ const mariaDbSchema = z.object({
.describe('HD_DATABASE_PORT'),
});
const mysqlDbSchema = z.object({
type: z.literal(DatabaseType.MYSQL).describe('HD_DATABASE_TYPE'),
name: z.string().describe('HD_DATABASE_NAME'),
username: z.string().describe('HD_DATABASE_USERNAME'),
password: z.string().describe('HD_DATABASE_PASSWORD'),
host: z.string().describe('HD_DATABASE_HOST'),
port: z
.number()
.positive()
.max(65535)
.default(3306)
.describe('HD_DATABASE_PORT'),
});
const dbSchema = z.discriminatedUnion('type', [
sqliteDbSchema,
mariaDbSchema,
mysqlDbSchema,
postgresDbSchema,
]);
export type SqliteDatabaseConfig = z.infer<typeof sqliteDbSchema>;
export type PostgresDatabaseConfig = z.infer<typeof postgresDbSchema>;
export type MariadbDatabaseConfig = z.infer<typeof mariaDbSchema>;
export type MySQLDatabaseConfig = z.infer<typeof mysqlDbSchema>;
export type DatabaseConfig = z.infer<typeof dbSchema>;
export default registerAs('databaseConfig', () => {
@ -98,7 +82,7 @@ export function getKnexConfig(databaseConfig: DatabaseConfig): Knex.Config {
return {
client: 'better-sqlite3',
connection: {
filename: databaseConfig.database,
filename: databaseConfig.name,
},
};
case DatabaseType.POSTGRES:
@ -108,7 +92,7 @@ export function getKnexConfig(databaseConfig: DatabaseConfig): Knex.Config {
host: databaseConfig.host,
port: databaseConfig.port,
user: databaseConfig.username,
database: databaseConfig.database,
database: databaseConfig.name,
password: databaseConfig.password,
// eslint-disable-next-line @typescript-eslint/naming-convention
application_name: 'HedgeDoc',
@ -116,12 +100,13 @@ export function getKnexConfig(databaseConfig: DatabaseConfig): Knex.Config {
};
case DatabaseType.MARIADB:
return {
// Knex recommends using the mysql driver for MariaDB database instances
client: 'mysql',
connection: {
host: databaseConfig.host,
port: databaseConfig.port,
user: databaseConfig.username,
database: databaseConfig.database,
database: databaseConfig.name,
password: databaseConfig.password,
},
};