mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 04:32:42 +00:00
A background job fetches air quality, pollen and UV for every earlier local day with a reading, mood entry, dose, symptom or workout: after the update (boot and nightly discovery), when the home is set and when air quality is switched on. A day with a weather row gets its air quality; a day without one gets both, at the covering location period or else at the home, also before the home was set. Days the source does not reach (before 2013 in Europe, before August 2022 elsewhere) stay empty and are not counted. Pending days are grouped by coarse location and cut into ranges of up to 90 days, joining days at most 14 apart, newest first. A run holds itself to 300 of the account's 400 daily calls and half of each instance window, stores its progress on the user (migration 0391) and sends a follow-up while it makes progress; a budget stop waits for the next discovery. The Location & weather card shows the progress. The air-quality client now asks pollen and dust from 2021 and skips the request outside Europe before CAMS global starts.
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).