Skip to content

Commit 347f669

Browse files
committed
set up initial backend
1 parent b90873c commit 347f669

File tree

9 files changed

+1797
-0
lines changed

9 files changed

+1797
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
node_modules
2+
dist

backend/db.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import type { Knex } from "knex";
2+
3+
import { getKnex } from "./knex";
4+
import { asyncLocalStorage } from "./store";
5+
6+
type KnexRepoFn<T, Args extends unknown[]> = (
7+
knex: Knex,
8+
...args: Args
9+
) => Promise<T>;
10+
11+
type UseKnex = <T, Args extends unknown[]>(
12+
fn: KnexRepoFn<T, Args>
13+
) => (...args: Args) => Promise<T>;
14+
15+
export const useKnex: UseKnex = (fn) => {
16+
return async (...args) => {
17+
const store = asyncLocalStorage.getStore();
18+
const logger = store?.get("logger");
19+
20+
store?.get("logger")?.debug({ args }, `Starting ${fn.name}`);
21+
22+
args.push(logger);
23+
24+
const knex = getKnex();
25+
try {
26+
return await fn(knex, ...args);
27+
} catch (err) {
28+
logger?.error(err);
29+
throw err;
30+
} finally {
31+
logger?.debug(`Finished ${fn.name}`);
32+
}
33+
};
34+
};

backend/knex.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import knex, { type Knex } from "knex";
2+
3+
let db: Knex | null = null;
4+
5+
export function getKnex() {
6+
if (!db) {
7+
db = knex({
8+
connection: process.env.DB_URL,
9+
client: "pg",
10+
});
11+
}
12+
13+
return db;
14+
}
15+
16+
export function closeKnex() {
17+
db?.destroy();
18+
db = null;
19+
}

backend/logging.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import pino from "pino";
2+
3+
export const logger = pino({
4+
level: "debug",
5+
});

0 commit comments

Comments
 (0)