Replace PostgreSQL and Docker deployment with embedded Turso, Drizzle relational queries v2, native systemd deployment on port 43821, and fresh SQLite migrations.

Hop-State: A_06FP5KEDBTB4A9ZT7QB498G
Hop-Proposal: R_06FP5KDWMCKVVMQZT4MVZ28
Hop-Task: T_06FP5DZ7T0G45FG93PT90B8
Hop-Attempt: AT_06FP5DZ7T0PKQW99V27JCV8
This commit is contained in:
2026-07-14 15:44:42 -07:00
committed by Hop
184 changed files with 8375 additions and 53944 deletions
+12 -19
View File
@@ -1,26 +1,19 @@
import { drizzle } from 'drizzle-orm/node-postgres';
import { Pool } from 'pg';
import * as schema from './schema';
import { mkdirSync } from 'node:fs';
import { dirname, resolve } from 'node:path';
import { drizzle } from 'drizzle-orm/tursodatabase/database';
import { relations } from './relations';
// Best Practice for VPS/Self-Hosting:
// We use 'pg' (node-postgres) which connects via standard TCP.
// This works for local Postgres, Docker, VPS, and managed clouds (AWS RDS, Neon, etc.).
const configuredPath = process.env.DATABASE_PATH || './data/synapsis.db';
const databasePath = configuredPath === ':memory:' ? configuredPath : resolve(configuredPath);
const connectionString = process.env.DATABASE_URL || 'postgres://placeholder:placeholder@localhost:5432/placeholder';
if (databasePath !== ':memory:') {
mkdirSync(dirname(databasePath), { recursive: true });
}
// Create a connection pool
const pool = new Pool({
connectionString,
max: 20, // Adjust based on your server capacity
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
});
export const db = drizzle(databasePath, { relations });
// Create the Drizzle client
export const db = drizzle(pool, { schema });
// Helper to check if DB is configured
export const isDbAvailable = () => !!process.env.DATABASE_URL;
// Embedded Turso is always available; DATABASE_PATH only changes its location.
export const isDbAvailable = () => true;
// Export schema for use elsewhere
export * from './schema';