77 lines
2.0 KiB
TypeScript
77 lines
2.0 KiB
TypeScript
import { app } from 'electron';
|
|
import * as fs from 'fs';
|
|
import * as fsp from 'fs/promises';
|
|
import * as path from 'path';
|
|
import { DataSource } from 'typeorm';
|
|
import {
|
|
MessageEntity,
|
|
UserEntity,
|
|
RoomEntity,
|
|
ReactionEntity,
|
|
BanEntity,
|
|
AttachmentEntity,
|
|
MetaEntity
|
|
} from '../entities';
|
|
import { settings } from '../settings';
|
|
|
|
let applicationDataSource: DataSource | undefined;
|
|
|
|
export function getDataSource(): DataSource | undefined {
|
|
return applicationDataSource;
|
|
}
|
|
|
|
export async function initializeDatabase(): Promise<void> {
|
|
const userDataPath = app.getPath('userData');
|
|
const dbDir = path.join(userDataPath, 'metoyou');
|
|
|
|
await fsp.mkdir(dbDir, { recursive: true });
|
|
const databaseFilePath = path.join(dbDir, settings.databaseName);
|
|
|
|
let database: Uint8Array | undefined;
|
|
|
|
if (fs.existsSync(databaseFilePath)) {
|
|
database = fs.readFileSync(databaseFilePath);
|
|
}
|
|
|
|
applicationDataSource = new DataSource({
|
|
type: 'sqljs',
|
|
database,
|
|
entities: [MessageEntity, UserEntity, RoomEntity, ReactionEntity, BanEntity, AttachmentEntity, MetaEntity],
|
|
migrations: [
|
|
path.join(__dirname, '..', 'migrations', '*.js'),
|
|
path.join(__dirname, '..', 'migrations', '*.ts')
|
|
],
|
|
synchronize: false,
|
|
logging: false,
|
|
autoSave: true,
|
|
location: databaseFilePath
|
|
});
|
|
|
|
try {
|
|
await applicationDataSource.initialize();
|
|
console.log('[DB] Connection initialised at:', databaseFilePath);
|
|
|
|
try {
|
|
await applicationDataSource.runMigrations();
|
|
console.log('[DB] Migrations executed');
|
|
} catch (migErr) {
|
|
console.error('[DB] Migration error:', migErr);
|
|
}
|
|
} catch (error) {
|
|
console.error('[DB] Initialisation error:', error);
|
|
}
|
|
}
|
|
|
|
export async function destroyDatabase(): Promise<void> {
|
|
if (applicationDataSource?.isInitialized) {
|
|
try {
|
|
await applicationDataSource.destroy();
|
|
console.log('[DB] Connection closed');
|
|
} catch (error) {
|
|
console.error('[DB] Error closing connection:', error);
|
|
} finally {
|
|
applicationDataSource = undefined;
|
|
}
|
|
}
|
|
}
|