refactor: reorganize project structure and improve user command handling
This commit is contained in:
parent
5cfcb3ba0c
commit
49d6b51de6
7 changed files with 64 additions and 26 deletions
41
db/db.ts
Normal file
41
db/db.ts
Normal file
|
@ -0,0 +1,41 @@
|
|||
import { sql as pgsql } from "bun";
|
||||
import { Database as SQLiteDB } from "bun:sqlite";
|
||||
|
||||
const dbType = process.env.DB_TYPE;
|
||||
|
||||
|
||||
const sqlite = () => {
|
||||
const db = new SQLiteDB(process.env.DB_URL || ":memory:");
|
||||
function toSql(strings: TemplateStringsArray, values: any[]) {
|
||||
let sql = strings[0] || "";
|
||||
for (let i = 0; i < values.length; i++) {
|
||||
sql += "?" + (strings[i + 1] || "");
|
||||
}
|
||||
return sql;
|
||||
}
|
||||
|
||||
return {
|
||||
all: async <T extends any[]>(strings: TemplateStringsArray, ...params: any[]) => {
|
||||
const sql = toSql(strings, params);
|
||||
return db.query(sql).all(...params) as T;
|
||||
},
|
||||
get: async <T>(strings: TemplateStringsArray, ...params: any[]) => {
|
||||
const sql = toSql(strings, params);
|
||||
return db.query(sql).get(...params) as T;
|
||||
},
|
||||
run: async <T>(strings: TemplateStringsArray, ...params: any[]) => {
|
||||
const sql = toSql(strings, params);
|
||||
return db.query(sql).run(...params) as T;
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
const postgres = () => {
|
||||
return {
|
||||
all: async <T>(strings: TemplateStringsArray, ...values: any[]) => await pgsql(strings, ...values) as T,
|
||||
get: async <T>(strings: TemplateStringsArray, ...values: any[]) => (await pgsql(strings, ...values))[0] as T,
|
||||
run: async <T>(strings: TemplateStringsArray, ...values: any[]) => await pgsql(strings, ...values) as T,
|
||||
};
|
||||
};
|
||||
|
||||
export const db = dbType === "sqlite" ? sqlite() : postgres();
|
Loading…
Add table
Add a link
Reference in a new issue