2019-12-10 23:33:48 +01:00
|
|
|
import path from 'path';
|
|
|
|
import { Connection, createConnection as ormCreateConnection } from 'typeorm';
|
|
|
|
import { SqliteConnectionOptions } from 'typeorm/driver/sqlite/SqliteConnectionOptions';
|
2020-04-10 05:02:19 +02:00
|
|
|
import { appPath } from './app-path';
|
2019-06-23 02:30:24 +02:00
|
|
|
|
2020-07-25 02:02:37 +02:00
|
|
|
export enum Database {
|
2019-07-26 23:05:29 +02:00
|
|
|
LIBRARY = 'library',
|
2020-04-22 01:59:20 +02:00
|
|
|
STORE = 'store',
|
2019-06-23 02:30:24 +02:00
|
|
|
}
|
|
|
|
|
2020-07-25 02:02:37 +02:00
|
|
|
type MyConnectionOptions = { [key in Database]: SqliteConnectionOptions };
|
2019-12-10 23:33:48 +01:00
|
|
|
|
2020-05-14 22:13:12 +02:00
|
|
|
const databaseDir = path.resolve(appPath, 'database');
|
2020-07-25 02:02:37 +02:00
|
|
|
|
|
|
|
function getConnectionOptionsFor(database: Database): SqliteConnectionOptions {
|
|
|
|
return {
|
|
|
|
name: database,
|
|
|
|
type: 'sqlite',
|
|
|
|
database: path.resolve(databaseDir, `${database}.db`),
|
|
|
|
cache: true,
|
|
|
|
entities: [`./src/main/entities/${database}/*.js`],
|
|
|
|
migrations: [`./src/main/migrations/${database}/*.js`],
|
|
|
|
cli: {
|
|
|
|
migrationsDir: `./src/main/migrations/${database}`,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
const connectionOptions: MyConnectionOptions = {
|
|
|
|
[Database.LIBRARY]: getConnectionOptionsFor(Database.LIBRARY),
|
|
|
|
[Database.STORE]: getConnectionOptionsFor(Database.STORE),
|
|
|
|
};
|
|
|
|
|
|
|
|
function createConnection(database: Database): Promise<Connection> {
|
|
|
|
let connection: Connection;
|
2019-12-10 23:33:48 +01:00
|
|
|
return ormCreateConnection(connectionOptions[database])
|
2020-07-25 02:02:37 +02:00
|
|
|
.then((c) => {
|
|
|
|
connection = c;
|
|
|
|
return c.runMigrations();
|
2019-10-03 02:09:45 +02:00
|
|
|
})
|
2020-07-25 02:02:37 +02:00
|
|
|
.then(() => connection);
|
2019-12-10 23:33:48 +01:00
|
|
|
}
|
2019-10-03 02:09:45 +02:00
|
|
|
|
2020-07-25 02:02:37 +02:00
|
|
|
const connections = {
|
|
|
|
[Database.LIBRARY]: createConnection(Database.LIBRARY),
|
|
|
|
[Database.STORE]: createConnection(Database.STORE),
|
|
|
|
};
|
|
|
|
|
|
|
|
export function getConnection(database: Database): Promise<Connection> {
|
2019-12-15 01:14:39 +01:00
|
|
|
return Promise.resolve(connections[database]);
|
2019-06-23 02:30:24 +02:00
|
|
|
}
|