Retire the SQLite backend — Postgres is the only engine
The dual backend (SQLite via db.js + Postgres via schema.pg.sql) was a maintenance foot-gun: a schema change could land on the SQLite path only and silently 500 every read on prod (it just did, with #18/#13). Production has run on Postgres for weeks, so SQLite is retired: ONE schema source of truth (db/schema.pg.sql), no drift possible. - dbx.js: default DB_BACKEND=pg; an unknown backend now fails loudly at require time instead of silently selecting a stale engine. - Deleted server/db.js, server/db/sqlite.js, server/db/migrate-sqlite-to-pg.js, server/scripts/migrate-bizgaze-only.js (all SQLite-only, none in the runtime path — the running server loads db/pg.js). - Tests (e2e, db-smoke) target Postgres now and fail-fast (skip) unless DATABASE_URL points at a disposable test DB — never SQLite, never prod. - Removed the dead DB_PATH env + fixed misleading SQLite comments in the Dockerfile / docker-compose (kept the /data volume: it holds uploads/recordings/transcripts/downloads, not just the old data.db). - CLAUDE.md: stack + repo-layout + run-locally updated for Postgres-only. Runtime is unaffected (prod already sets DB_BACKEND=pg and pg is a prod dep); this only removes the unused SQLite path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -12,8 +12,11 @@ Roadmap: grow into a communication platform (meetings + persistent chat) for
|
||||
registered BizGaze users.
|
||||
|
||||
## Tech stack (intentionally minimal — keep it this way)
|
||||
- **Node.js >= 22.5**, single npm dependency: `ws` (WebSocket).
|
||||
- **Built-in `node:sqlite`** (no native modules). DB file: `server/data.db`.
|
||||
- **Node.js >= 22.5**. npm deps: `ws`, `pg`, `redis`, `web-push` (+ optional `nodemailer`).
|
||||
- **PostgreSQL** via the async adapter (`server/dbx.js` → `server/db/pg.js`). SQLite was RETIRED 2026-08-12:
|
||||
there is now ONE schema source of truth, **`server/db/schema.pg.sql`** — every schema change goes there
|
||||
(and post-cutover COLUMNS need an explicit `ALTER TABLE … ADD COLUMN IF NOT EXISTS`, since the file is
|
||||
applied idempotently on every boot and `CREATE TABLE IF NOT EXISTS` won't alter an existing table).
|
||||
- **WebRTC** peer-to-peer for media (screen video + voice + data channels).
|
||||
- **No build step, no framework.** Each page is a single self-contained HTML file
|
||||
with inline `<style>` and `<script>`. Do not introduce React/bundlers.
|
||||
@@ -30,9 +33,10 @@ server/
|
||||
routes.js # HTTP JSON API (/api/*, /sso) -> { "METHOD /path": handler } map
|
||||
static.js # static file serving + authenticated recording/transcript downloads
|
||||
signaling.js # WebSocket signaling (consent + SDP/ICE relay)
|
||||
repos.js # data-access layer — ALL SQL lives here (tenant-scoped)
|
||||
repos.js # data-access layer — ALL SQL lives here (tenant-scoped, async)
|
||||
bizgaze.js # BizGaze identity provider (validate login, env-gated)
|
||||
db.js # node:sqlite schema + idempotent migrations
|
||||
dbx.js # async DB adapter facade -> db/pg.js (Postgres; only backend)
|
||||
db/pg.js # Postgres backend; db/schema.pg.sql = the single schema source of truth
|
||||
auth.js # scrypt hashing, token/id generation, TOTP helpers
|
||||
package.json # { "dependencies": { "ws": "^8.18" }, engines node>=22.5 }
|
||||
test/e2e.js # 21-check backend e2e (register->login->session->signaling->audit)
|
||||
@@ -48,11 +52,16 @@ server/
|
||||
transcripts/ # saved transcripts (.txt) [created at runtime]
|
||||
```
|
||||
Architecture/roadmap detail lives in `ARCHITECTURE.md`. Backend SQL must go through
|
||||
`repos.js` (never inline in routes/signaling). Run `node test/e2e.js` after backend edits.
|
||||
`repos.js` (never inline in routes/signaling). ANY schema change goes in `db/schema.pg.sql` (see stack note).
|
||||
After backend edits, run the tests against a DISPOSABLE Postgres (they no longer bundle SQLite):
|
||||
`DATABASE_URL=postgres://…/bizgaze_test node test/db-smoke.js`.
|
||||
|
||||
## Run locally
|
||||
```
|
||||
cd server && npm install && node server.js
|
||||
# Start a local Postgres (or use the compose one), then:
|
||||
docker compose up -d bizgazepg
|
||||
cd server && npm install
|
||||
DB_BACKEND=pg DATABASE_URL=postgres://bizgaze:bizgaze_local@localhost:5432/bizgaze node server.js
|
||||
# HTTP on :8090 (HTTPS on :8443 only if cert.pem + key.pem exist in server/)
|
||||
# Env: ALLOW_REGISTRATION=1 opens the first-team registration
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user