Refacor electron app and add migrations
This commit is contained in:
76
electron/db/database.ts
Normal file
76
electron/db/database.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user