mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
When the auto-AI-read opt-in is on, a freshly uploaded document is summarised once in the background and the encrypted summary is stored and shown on the document detail view. - A background step runs after upload alongside the existing content-index and thumbnail steps. It generates a short (3-4 sentence) plain-language summary only when the user's documentsAutoAiRead opt-in is on (that flag is also the standing AI-egress consent), skips a document that already has one, and no-ops when no vision provider is configured. It reuses the same provider resolution, egress-consent re-assertion, and AI-budget reserve/reconcile helpers as the on-demand route; a provider error refunds the reservation and never fails the upload. - The summary is stored encrypted (summaryEncrypted Bytes) with a summaryGeneratedAt timestamp on inbound_documents, registered for key rotation, and returned decrypted in the document detail response. - The on-demand transient summary route is unchanged. Gated by the same consent, budget, and module checks.
prisma/
The database layer. HealthLog runs PostgreSQL 16 via Prisma 7. This directory holds the single schema file and the forward-only migration history; the generated client is emitted elsewhere.
Contents
schema.prisma— 61 models, one file.cuid()primary keys,snake_casecolumns via@map(...), encrypted columns mostly suffixed*Encrypted(search the file; there are 24 encrypted column references). Thegenerator clientblock emits to../src/generated/prisma(imported as@/generated/prisma).migrations/— numbered, forward-only SQL migrations (0001_…upward).migration_lock.tomlpins the provider topostgresql.
Migration workflow
# author a migration from a schema edit
pnpm dlx prisma migrate dev --name <short_snake_case_name>
# regenerate the client after any schema change
pnpm dlx prisma generate
Number a new migration with the next free prefix. The production entrypoint runs prisma migrate deploy on boot, so every migration must apply cleanly forward — there is no down-migration path. Always include the migration file in the same change as the schema edit.
Conventions
- Encryption is fail-closed:
*Encryptedcolumns are written through@/lib/crypto(AES-256-GCM, versioned key ids); never store plaintext in an encrypted column. Key rotation isscripts/rotate-encryption-key.ts+docs/ops/encryption-key-rotation.md. - The generated client under
src/generated/prismais build output — do not edit it. - Schema-touching changes that affect the API surface must regenerate
docs/api/openapi.yaml(see../CLAUDE.md).
Related: ../src/lib/README.md (db.ts, rollups/), ../docs/ops/ (migrations + backup runbooks).