04 - Information Architecture (Health Module)
- 1. Backend IA (implemented)
- 2. Screen IA (proposed)
- 3. Information priorities
- 4. Explicitly absent (keep it lean)
Where the health surface lives in the StudyLyon IA. Global conventions in 00-shared/05. The backend surface is a single public endpoint; the screen IA below is
(proposed)for a future admin surface.
1. Backend IA (implemented)
/api/v1/health GET combined Terminus check (health.controller.ts:27-37)
├─ mongodb (health.controller.ts:32)
├─ redis (redis-health.indicator.ts:12-23)
├─ storage (storage-health.indicator.ts:16-26)
└─ bullmq (bullmq-health.indicator.ts:19-37)
- Root:
/apiglobal prefix, URI versioning, default version1(env.ts:14,16,main.ts:44-48); health also accepts/api/v2/health(@Version(['1','2']),health.controller.ts:28). - Global, not tenant-scoped: no
tenantId, no tenant middleware context - a platform-wide concern. It does not appear in any tenant menu tree. - Planned siblings:
/api/v1/health/liveand/api/v1/health/ready(liveness/readiness split) exist only indocs/user-flows/END_TO_END_USER_FLOWS.md:738-740-(planned), not routed.
2. Screen IA (proposed)
App Health lives in the admin/operations zone, sibling to Audit
(audit.read surface) and Scheduler, not under any tenant feature tree:
Settings / Operations (admin) (proposed placement)
└── App Health S1 - status dashboard
├── Service status cards API / DB / Redis / Queues / Storage
├── Last-check time
└── Retry (manual re-check)
| Node | Content | State source |
|---|---|---|
| API card | implicit - the request itself succeeded | HTTP 200 of the call |
| DB card | data.info.mongodb.status (health.controller.ts:32) | up/down |
| Redis card | data.info.redis.status + ping (redis-health.indicator.ts:16) | up/down |
| Storage card | data.info.storage.status (storage-health.indicator.ts:19) | up/down |
| Queues card | data.info.bullmq.status + pendingJobs (bullmq-health.indicator.ts:30) | up/down |
3. Information priorities
- Overall state - one glance: all green / one red.
- Culprit identification - which dependency, from
data.error(health.controller.spec.ts:29-35). - Freshness - last-check time (client-side timestamp of the 200/503).
- Detail -
pendingJobsbacklog on the Queues card; hidden by default.
4. Explicitly absent (keep it lean)
- No per-tenant health hierarchy (non-goal,
01§5). - No uptime history / incident timeline -
(planned)at best, stateless endpoint today. - No write actions beyond Retry - no config, no thresholds, no toggles on the
screen (
(proposed)surface is read-only + retry).