feat(family): deploy Single-Writer DuckDB backend, Mila parent cockpit & feeding analytics, and Moritz macro tracker
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
# DuckDB Backend
|
||||
|
||||
HTTP-based analytical and transactional backend for personal logging data stored in the Knowledge Wiki.
|
||||
Powered by Python 3.12, FastAPI, and in-memory DuckDB querying JSONL files directly.
|
||||
|
||||
## Architecture
|
||||
|
||||
- **Single Source of Truth**: Knowledge Wiki (`/wiki` git repository with data in `/wiki/data/**/*.jsonl`).
|
||||
- **Engine**: In-memory DuckDB reading `sleep`, `nutrition`, `mila`, `entities`, and `garmin` partitions.
|
||||
- **Git Synchronization**:
|
||||
- Background periodic `git pull --rebase origin main` (every 60s).
|
||||
- Mutating operations (`POST /duckdb-api/v1/events`) append to typed JSONL partition files, sort them, commit, rebase, and push to origin main.
|
||||
- Conflicts trigger automatic rebase abort and flag `git_conflict: true` on `/status` and `/healthz`.
|
||||
|
||||
## Endpoints
|
||||
|
||||
- `GET /duckdb-api/v1/mila/dashboard`: Curated aggregated dashboard for Mila (sleep, wake timer, feedings, diapers, WHO percentiles).
|
||||
- `GET /duckdb-api/v1/moritz/dashboard`: Curated aggregated dashboard for Moritz (today's intake, yesterday's 24h deficit/surplus, Garmin recovery & sleep, 7d/30d trends).
|
||||
- `POST /duckdb-api/v1/query`: Generic read-only SQL queries against DuckDB tables and views.
|
||||
- `POST /duckdb-api/v1/events`: Record new events (sleep, nutrition, diaper, feeding, growth).
|
||||
- `POST /duckdb-api/v1/events/stop`: Close active open sleep session or interval.
|
||||
- `DELETE /duckdb-api/v1/events/{id}`: Soft-delete event.
|
||||
- `POST /duckdb-api/v1/entities`: Upsert entities (`foods`, `recipes`, `places`, `people`).
|
||||
- `GET /duckdb-api/v1/healthz`: Liveness and readiness probe.
|
||||
- `GET /duckdb-api/v1/status`: Git synchronization status and table row counts.
|
||||
- `POST /duckdb-api/v1/git/sync`: Manual pull or webhook sync trigger.
|
||||
Reference in New Issue
Block a user