feat(storage,app): PostgreSQL backend (D3) + project manager window (D4)
D3: oakdb+pg:// fully wired (shared sea-orm entities, BIGSERIAL DDL, connect-probe instead of pool retry on dead servers); Storage/Backend=pg + Storage/PgUrl config; 13 OAK_TEST_PG_URL-gated PG tests (verified against a Docker postgres:16), always-on clean-error tests otherwise. D4: DaVinci-style project manager — list with derived stats, create/ rename/duplicate/delete (confirm)/import/export (native dialogs, ove/otio/fcpxml), shown at startup and from the file menu; facade oakengine_library_* exports (list/create/delete/rename/duplicate/ import/export + project_load_library that binds write-through); save/save-as menu becomes 'export project file', open splits into from-library/from-file; status bar shows library write state; storage activates on app start and flushes on exit; spawn_modal reentrancy fixed (window-callback path) with a doc note. Also: the P1 audio test's environment probe was lost in the ffi purge; restored on cpal (the output device is cpal now).
This commit is contained in:
+29
-2
@@ -91,12 +91,39 @@ removed clips.
|
||||
or otio backend; nothing is read from or written to the database
|
||||
beyond the current state.
|
||||
|
||||
## Configuration
|
||||
|
||||
Library selection and behavior are driven by the `Storage` config group
|
||||
(read by `crates/oakengine/src/storage.rs`):
|
||||
|
||||
- `Storage/Backend` — `"sqlite"` (the documented default), `"database"`
|
||||
or `"pg"` enables write-through; any other value (e.g. `"off"`)
|
||||
disables it. When the key is absent no library is configured and
|
||||
projects stay unbound (headless consumers and the test suite never
|
||||
touch the user's real library).
|
||||
- `Storage/SqlitePath` — the SQLite library file; default
|
||||
`<system data dir>/library.db` (honoring `OAK_CONFIG_DIR`).
|
||||
- `Storage/PgUrl` — the PostgreSQL connection string, used when
|
||||
`Backend = "pg"`: `user:pass@host:5432/dbname` (libpq URL form; an
|
||||
optional `postgres://`/`postgresql://` scheme is stripped). The
|
||||
resolved library URI is `oakdb+pg://<PgUrl>`.
|
||||
- `Storage/SnapshotIntervalSec` (default 600) and
|
||||
`Storage/JournalRetentionDays` (default 0 = keep forever) — see above.
|
||||
|
||||
## Multi-writer and platforms
|
||||
|
||||
v1 assumes a single writer per database (SQLite `busy_timeout`, PG row
|
||||
locks). Multi-writer collaboration is future work (M14). The default
|
||||
database is a single user-level SQLite file; PostgreSQL is selected
|
||||
with an `oakdb+pg://` URI.
|
||||
database is a single user-level SQLite file; PostgreSQL is selected with
|
||||
`Storage/Backend = "pg"` + `Storage/PgUrl`, or directly with an
|
||||
`oakdb+pg://` URI.
|
||||
|
||||
Database tests: `cargo test -p oakstorage` is green without PostgreSQL —
|
||||
the SQLite suite always runs; the PG suite (`tests/database_pg_test.rs`)
|
||||
connects to a real server when `OAK_TEST_PG_URL` is set (e.g.
|
||||
`postgres://user:pass@host:5432/db`) and skips with a note otherwise.
|
||||
The URL should point at a dedicated test database: each test resets the
|
||||
four tables.
|
||||
|
||||
See also: [M10 oakstorage manual](plans/riir/M10-oakstorage.md),
|
||||
[M13 write-through plan](plans/riir/M13-storage-live.md),
|
||||
|
||||
Reference in New Issue
Block a user