From 9f416903efe94300c485d29c0fc067bfd9df5bcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aerilyn=20Dziedzel=C4=97?= Date: Sat, 28 Mar 2026 18:25:49 +0900 Subject: [PATCH] Implement regimens --- .claude/settings.local.json | 3 +- CLAUDE.md | 1 + docs/instructions/testing.md | 2 + .../phases/phase-3-regimens-pill-organizer.md | 450 +++++++---- packages/api/src/main.ts | 6 + .../cabinet-events.repository.test.ts | 396 +++++++++ .../cabinet-events.repository.ts | 214 +++++ .../cabinet-events.routes.test.ts | 387 +++++++++ .../cabinet-events/cabinet-events.routes.ts | 157 ++++ .../cabinet-events.service.test.ts | 142 ++++ .../cabinet-events/cabinet-events.service.ts | 43 + .../cabinet/cabinet.repository.test.ts | 41 + .../src/modules/cabinet/cabinet.repository.ts | 21 + .../modules/cabinet/cabinet.routes.test.ts | 92 +++ .../api/src/modules/cabinet/cabinet.routes.ts | 40 +- .../modules/cabinet/cabinet.service.test.ts | 171 +++- .../src/modules/cabinet/cabinet.service.ts | 127 ++- .../organizer/organizer.repository.test.ts | 183 +++++ .../modules/organizer/organizer.repository.ts | 77 ++ .../organizer/organizer.routes.test.ts | 478 +++++++++++ .../src/modules/organizer/organizer.routes.ts | 203 +++++ .../organizer/organizer.service.test.ts | 647 +++++++++++++++ .../modules/organizer/organizer.service.ts | 290 +++++++ .../regimens/regimens.repository.test.ts | 230 ++++++ .../modules/regimens/regimens.repository.ts | 92 +++ .../modules/regimens/regimens.routes.test.ts | 488 +++++++++++ .../src/modules/regimens/regimens.routes.ts | 211 +++++ .../modules/regimens/regimens.service.test.ts | 757 ++++++++++++++++++ .../src/modules/regimens/regimens.service.ts | 202 +++++ .../api/src/schemas/cabinet-event.schema.ts | 40 + .../api/src/schemas/cabinet-item.schema.ts | 6 + .../api/src/schemas/organizer-fill.schema.ts | 55 ++ packages/api/src/schemas/regimen.schema.ts | 50 ++ .../src/enums/cabinet-event.enums.test.ts | 39 + .../shared/src/enums/cabinet-event.enums.ts | 15 + packages/shared/src/enums/index.ts | 2 + .../shared/src/enums/regimen.enums.test.ts | 55 ++ packages/shared/src/enums/regimen.enums.ts | 22 + packages/shared/src/index.ts | 3 + packages/shared/src/types/burn-rate.ts | 13 + packages/shared/src/types/cabinet-event.ts | 48 ++ packages/shared/src/types/cabinet.ts | 6 + packages/shared/src/types/index.ts | 4 + packages/shared/src/types/organizer-fill.ts | 31 + packages/shared/src/types/regimen.ts | 31 + packages/shared/src/utils/frequency.test.ts | 68 ++ packages/shared/src/utils/frequency.ts | 63 ++ packages/shared/src/utils/index.ts | 1 + .../validation/cabinet-event.schemas.test.ts | 111 +++ .../src/validation/cabinet-event.schemas.ts | 87 ++ .../shared/src/validation/cabinet.schemas.ts | 12 + packages/shared/src/validation/index.ts | 3 + .../src/validation/organizer.schemas.test.ts | 113 +++ .../src/validation/organizer.schemas.ts | 93 +++ .../src/validation/regimen.schemas.test.ts | 157 ++++ .../shared/src/validation/regimen.schemas.ts | 105 +++ .../app/(dashboard)/medicines/ActivityTab.tsx | 420 ++++++++++ .../(dashboard)/medicines/OrganizerTab.tsx | 455 +++++++++++ .../app/(dashboard)/medicines/RegimensTab.tsx | 722 +++++++++++++++++ .../(dashboard)/medicines/activity/page.tsx | 51 ++ .../(dashboard)/medicines/organizer/page.tsx | 51 ++ .../src/app/(dashboard)/medicines/page.tsx | 18 + .../(dashboard)/medicines/regimens/page.tsx | 52 ++ packages/web/src/services/cabinet-events.ts | 60 ++ packages/web/src/services/organizer.ts | 55 ++ packages/web/src/services/regimens.ts | 51 ++ 66 files changed, 9130 insertions(+), 189 deletions(-) create mode 100644 packages/api/src/modules/cabinet-events/cabinet-events.repository.test.ts create mode 100644 packages/api/src/modules/cabinet-events/cabinet-events.repository.ts create mode 100644 packages/api/src/modules/cabinet-events/cabinet-events.routes.test.ts create mode 100644 packages/api/src/modules/cabinet-events/cabinet-events.routes.ts create mode 100644 packages/api/src/modules/cabinet-events/cabinet-events.service.test.ts create mode 100644 packages/api/src/modules/cabinet-events/cabinet-events.service.ts create mode 100644 packages/api/src/modules/organizer/organizer.repository.test.ts create mode 100644 packages/api/src/modules/organizer/organizer.repository.ts create mode 100644 packages/api/src/modules/organizer/organizer.routes.test.ts create mode 100644 packages/api/src/modules/organizer/organizer.routes.ts create mode 100644 packages/api/src/modules/organizer/organizer.service.test.ts create mode 100644 packages/api/src/modules/organizer/organizer.service.ts create mode 100644 packages/api/src/modules/regimens/regimens.repository.test.ts create mode 100644 packages/api/src/modules/regimens/regimens.repository.ts create mode 100644 packages/api/src/modules/regimens/regimens.routes.test.ts create mode 100644 packages/api/src/modules/regimens/regimens.routes.ts create mode 100644 packages/api/src/modules/regimens/regimens.service.test.ts create mode 100644 packages/api/src/modules/regimens/regimens.service.ts create mode 100644 packages/api/src/schemas/cabinet-event.schema.ts create mode 100644 packages/api/src/schemas/organizer-fill.schema.ts create mode 100644 packages/api/src/schemas/regimen.schema.ts create mode 100644 packages/shared/src/enums/cabinet-event.enums.test.ts create mode 100644 packages/shared/src/enums/cabinet-event.enums.ts create mode 100644 packages/shared/src/enums/regimen.enums.test.ts create mode 100644 packages/shared/src/enums/regimen.enums.ts create mode 100644 packages/shared/src/types/burn-rate.ts create mode 100644 packages/shared/src/types/cabinet-event.ts create mode 100644 packages/shared/src/types/organizer-fill.ts create mode 100644 packages/shared/src/types/regimen.ts create mode 100644 packages/shared/src/utils/frequency.test.ts create mode 100644 packages/shared/src/utils/frequency.ts create mode 100644 packages/shared/src/utils/index.ts create mode 100644 packages/shared/src/validation/cabinet-event.schemas.test.ts create mode 100644 packages/shared/src/validation/cabinet-event.schemas.ts create mode 100644 packages/shared/src/validation/organizer.schemas.test.ts create mode 100644 packages/shared/src/validation/organizer.schemas.ts create mode 100644 packages/shared/src/validation/regimen.schemas.test.ts create mode 100644 packages/shared/src/validation/regimen.schemas.ts create mode 100644 packages/web/src/app/(dashboard)/medicines/ActivityTab.tsx create mode 100644 packages/web/src/app/(dashboard)/medicines/OrganizerTab.tsx create mode 100644 packages/web/src/app/(dashboard)/medicines/RegimensTab.tsx create mode 100644 packages/web/src/app/(dashboard)/medicines/activity/page.tsx create mode 100644 packages/web/src/app/(dashboard)/medicines/organizer/page.tsx create mode 100644 packages/web/src/app/(dashboard)/medicines/regimens/page.tsx create mode 100644 packages/web/src/services/cabinet-events.ts create mode 100644 packages/web/src/services/organizer.ts create mode 100644 packages/web/src/services/regimens.ts diff --git a/.claude/settings.local.json b/.claude/settings.local.json index f33bcf3..78484fa 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -2,7 +2,8 @@ "permissions": { "allow": [ "Bash(npm run:*)", - "Bash(ls:*)" + "Bash(ls:*)", + "Bash(npm test:*)" ] } } diff --git a/CLAUDE.md b/CLAUDE.md index dd24749..5a69891 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -98,6 +98,7 @@ Services throw `AppError` subclasses (`NotFoundError`, `ConflictError`, `Forbidd 5. **`.lean().exec()`** on all Mongoose read queries 6. **`householdId` filter** on every domain query — this is the multi-tenancy boundary 7. **No emojis** — never use emoji characters in source code, UI text, console output, or documentation +8. **`npx` is banned** — never run `npx` for any reason. Use `npm run