Rework database Conf to easily get the dialect
This commit is contained in:
parent
ab22feacd2
commit
250998405a
|
@ -61,27 +61,6 @@ class Conf {
|
|||
static get externalDomain() {
|
||||
return Deno.env.get('NOSTR_EXTERNAL') || Conf.localDomain;
|
||||
}
|
||||
/** Path to the main SQLite database which stores users, events, and more. */
|
||||
static get dbPath() {
|
||||
if (Deno.env.get('DATABASE_URL') === 'sqlite://:memory:') {
|
||||
return ':memory:';
|
||||
}
|
||||
|
||||
const { host, pathname } = Conf.databaseUrl;
|
||||
|
||||
if (!pathname) return '';
|
||||
|
||||
// Get relative path.
|
||||
if (host === '') {
|
||||
return pathname;
|
||||
} else if (host === '.') {
|
||||
return pathname;
|
||||
} else if (host) {
|
||||
return host + pathname;
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
/**
|
||||
* Heroku-style database URL. This is used in production to connect to the
|
||||
* database.
|
||||
|
@ -92,9 +71,24 @@ class Conf {
|
|||
* protocol://username:password@host:port/database_name
|
||||
* ```
|
||||
*/
|
||||
static get databaseUrl(): url.UrlWithStringQuery {
|
||||
return url.parse(Deno.env.get('DATABASE_URL') ?? 'sqlite://data/db.sqlite3');
|
||||
static get databaseUrl(): string {
|
||||
return Deno.env.get('DATABASE_URL') ?? 'sqlite://data/db.sqlite3';
|
||||
}
|
||||
static db = {
|
||||
get url(): url.UrlWithStringQuery {
|
||||
return url.parse(Deno.env.get('DATABASE_URL') ?? 'sqlite://data/db.sqlite3');
|
||||
},
|
||||
get dialect(): 'sqlite' | 'postgres' | undefined {
|
||||
switch (Conf.db.url.protocol) {
|
||||
case 'sqlite:':
|
||||
return 'sqlite';
|
||||
case 'postgres:':
|
||||
case 'postgresql:':
|
||||
return 'postgres';
|
||||
}
|
||||
return undefined;
|
||||
},
|
||||
};
|
||||
/** Character limit to enforce for posts made through Mastodon API. */
|
||||
static get postCharLimit() {
|
||||
return Number(Deno.env.get('POST_CHAR_LIMIT') || 5000);
|
||||
|
|
|
@ -19,16 +19,13 @@ export class DittoDB {
|
|||
}
|
||||
|
||||
static async _getInstance(): Promise<Kysely<DittoTables>> {
|
||||
const { databaseUrl } = Conf;
|
||||
|
||||
let kysely: Kysely<DittoTables>;
|
||||
|
||||
switch (databaseUrl.protocol) {
|
||||
case 'sqlite:':
|
||||
switch (Conf.db.dialect) {
|
||||
case 'sqlite':
|
||||
kysely = await DittoSQLite.getInstance();
|
||||
break;
|
||||
case 'postgres:':
|
||||
case 'postgresql:':
|
||||
case 'postgres':
|
||||
kysely = await DittoPostgres.getInstance();
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -19,7 +19,7 @@ export class DittoPostgres {
|
|||
// @ts-ignore mismatched kysely versions probably
|
||||
createDriver() {
|
||||
return new PostgreSQLDriver(
|
||||
{ connectionString: Deno.env.get('DATABASE_URL') },
|
||||
{ connectionString: Conf.databaseUrl },
|
||||
Conf.pg.poolSize,
|
||||
);
|
||||
},
|
||||
|
|
|
@ -36,11 +36,11 @@ export class DittoSQLite {
|
|||
|
||||
/** Get the relative or absolute path based on the `DATABASE_URL`. */
|
||||
static get path() {
|
||||
if (Deno.env.get('DATABASE_URL') === 'sqlite://:memory:') {
|
||||
if (Conf.databaseUrl === 'sqlite://:memory:') {
|
||||
return ':memory:';
|
||||
}
|
||||
|
||||
const { host, pathname } = Conf.databaseUrl;
|
||||
const { host, pathname } = Conf.db.url;
|
||||
|
||||
if (!pathname) return '';
|
||||
|
||||
|
|
|
@ -42,17 +42,8 @@ class EventsDB implements NStore {
|
|||
};
|
||||
|
||||
constructor(private kysely: Kysely<DittoTables>) {
|
||||
let fts: 'sqlite' | 'postgres' | undefined;
|
||||
|
||||
if (Conf.databaseUrl.protocol === 'sqlite:') {
|
||||
fts = 'sqlite';
|
||||
}
|
||||
if (['postgres:', 'postgresql:'].includes(Conf.databaseUrl.protocol!)) {
|
||||
fts = 'postgres';
|
||||
}
|
||||
|
||||
this.store = new NDatabase(kysely, {
|
||||
fts,
|
||||
fts: Conf.db.dialect,
|
||||
indexTags: EventsDB.indexTags,
|
||||
searchText: EventsDB.searchText,
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue