feat(server): add SQL abstraction layer for database portability
Phase 1 of server portability plan. Abstracts better-sqlite3 behind
SqlAdapter interface to enable future support for Cloudflare Durable
Objects SQLite.
- Create sql/types.js with SqlAdapter/SqlAdapterFactory interfaces
- Create sql/better-sqlite3-adapter.js implementing the interface
- Create sql/index.js factory for adapter selection
- Refactor db.js to use adapter instead of direct better-sqlite3 calls
- Refactor users.js to use adapter for system.db
- Update backup.js with TODO for DO SQLite backup strategy
- Update tests to use adapter methods (conn.all/get vs conn.prepare)
All 110 tests pass.