/ opencodehub / src / db / index.ts
swadhinbiswas Initial commit of OpenCodeHub source · 12/11/2025
1110042
35 lines · 886 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
 * Database initialization and connection
 */

import Database from "better-sqlite3";
import { BetterSQLite3Database, drizzle } from "drizzle-orm/better-sqlite3";
import { existsSync, mkdirSync } from "fs";
import { dirname } from "path";
import * as schema from "./schema";

let db: BetterSQLite3Database<typeof schema> | null = null;

export function getDatabase(): BetterSQLite3Database<typeof schema> {
  if (db) return db;

  const dbPath = process.env.DATABASE_URL || "./data/opencodehub.db";

  // Ensure directory exists
  const dir = dirname(dbPath);
  if (!existsSync(dir)) {
    mkdirSync(dir, { recursive: true });
  }

  const sqlite = new Database(dbPath);
  sqlite.pragma("journal_mode = WAL");
  sqlite.pragma("foreign_keys = ON");

  db = drizzle(sqlite, { schema });

  return db;
}

export { schema };
export type Database = BetterSQLite3Database<typeof schema>;