social bookmarking for atproto
at main 50 lines 1.1 kB view raw
1/* 2 * clippr: a social bookmarking service for the AT Protocol 3 * Copyright (c) 2025 clippr contributors. 4 * SPDX-License-Identifier: AGPL-3.0-only 5 */ 6 7import { drizzle } from "drizzle-orm/libsql"; 8import { Config } from "../config.js"; 9import Logger from "../logger.js"; 10 11const config = Config.getInstance().getConfig(); 12const dbname = config.database.name; 13 14class DatabaseError extends Error { 15 constructor(message: string) { 16 super(message); 17 this.name = "DatabaseError"; 18 } 19} 20 21export class Database { 22 private static instance: Database; 23 private readonly db; 24 25 private constructor() { 26 try { 27 this.db = drizzle({ connection: { url: `${dbname}` } }); 28 } catch (e: unknown) { 29 if (e instanceof Error) { 30 throw new DatabaseError(e.message); 31 } else throw new DatabaseError("Unknown error"); 32 } 33 } 34 35 static getInstance(): Database { 36 if (!Database.instance) { 37 try { 38 Database.instance = new Database(); 39 } catch (e) { 40 Logger.error(e); 41 process.exit(1); 42 } 43 } 44 return Database.instance; 45 } 46 47 getDb() { 48 return this.db; 49 } 50}