mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-10 13:22:14 +00:00
feat(records): add allergy + family-history data model
Introduce two structured health-record tables, kept as reference records (not time-series signals): - `allergies` — AllergyIntolerance-style: substance + category + type + severity + status + optional onset. The substance label stays queryable plaintext; the free-text reaction and note are AES-256-GCM encrypted (`reaction_encrypted` / `notes_encrypted` BYTEA). - `family_history_entries` — one condition per relative: relationship + condition label + optional age-at-onset; the free-text note is encrypted. Both are owner-scoped and soft-deleted. Migrations 0215/0216 are additive and idempotent. The three new encrypted columns are registered in ENCRYPTED_COLUMNS and wired into the key-rotation script, so a key drop can never silently strand them undecryptable.
This commit is contained in:
1 parent
3a84a07423
commit
3ded891641
5 files changed
+306
No files matched your search
@@ -448,6 +448,23 @@ async function main() {
|
||||
),
|
||||
);
|
||||
|
||||
// ───── v1.25 structured health records (Bytes columns) ─────
|
||||
// Allergy free-text reaction + note; family-history note. Always encrypted
|
||||
// on write (no legacy plaintext column), so every non-null row rotates.
|
||||
results.push(
|
||||
await rotateBytesColumn("Allergy", "reactionEncrypted", prisma.allergy),
|
||||
);
|
||||
results.push(
|
||||
await rotateBytesColumn("Allergy", "notesEncrypted", prisma.allergy),
|
||||
);
|
||||
results.push(
|
||||
await rotateBytesColumn(
|
||||
"FamilyHistoryEntry",
|
||||
"notesEncrypted",
|
||||
prisma.familyHistoryEntry,
|
||||
),
|
||||
);
|
||||
|
||||
console.log("\n=== Rotation summary ===");
|
||||
let totalRotated = 0;
|
||||
let totalErrors = 0;
|
||||
|
||||
Reference in new issue
Block a user