chore(task): archive 07-02-emergency-incident-workspace
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
# Emergency Incident Workspace Design
|
||||
|
||||
## Summary
|
||||
|
||||
Replace `/app/emergency` with a real safety/emergency incident workspace using the existing `systemIncidents` Drizzle table. The MVP covers manual event creation, status triage, filters, and metrics.
|
||||
|
||||
## Route Boundary
|
||||
|
||||
- Unscoped route: `app/(app)/app/emergency/page.tsx`
|
||||
- Scoped route: `app/(app)/app/[organizationSlug]/emergency/page.tsx`
|
||||
- Navigation remains under `运营`.
|
||||
- Permissions:
|
||||
- read: `incident:read`
|
||||
- mutate: `incident:manage`
|
||||
|
||||
Server Component behavior:
|
||||
|
||||
1. Load `getCurrentAuthContext()`.
|
||||
2. Redirect unauthenticated users to `/login`.
|
||||
3. Redirect users without `incident:read` to dashboard.
|
||||
4. Require active organization.
|
||||
5. Load incidents through `listEmergencyIncidentData(organizationId)`.
|
||||
6. Render client workspace with `canManage`.
|
||||
|
||||
## Data Model
|
||||
|
||||
Use existing `system_incidents`:
|
||||
|
||||
- `organizationId`
|
||||
- `severity`: `info | warning | critical`
|
||||
- `status`: `open | acknowledged | resolved | closed`
|
||||
- `title`
|
||||
- `description`
|
||||
- `source`
|
||||
- acknowledgement / resolution account and time fields
|
||||
|
||||
No schema change is required for MVP. Elder/bed linking stays future work for the context optimization task.
|
||||
|
||||
## Server Helpers
|
||||
|
||||
Create `modules/emergency/`:
|
||||
|
||||
- `modules/emergency/types.ts`
|
||||
- labels, DTOs, create/status validators.
|
||||
- `modules/emergency/server/operations.ts`
|
||||
- `listEmergencyIncidentData(organizationId: string)`
|
||||
- `createEmergencyIncident(input)`
|
||||
- `updateEmergencyIncidentStatus(input)`
|
||||
- `modules/emergency/components/EmergencyWorkspaceClient.tsx`
|
||||
- metrics, filters, event table, create dialog, status actions.
|
||||
|
||||
## API Design
|
||||
|
||||
- `GET /api/emergency/incidents`
|
||||
- permission: `incident:read`
|
||||
- response: `{ success: true; reason: string; data }`
|
||||
- `POST /api/emergency/incidents`
|
||||
- permission: `incident:manage`
|
||||
- request: `{ severity; title; description; source }`
|
||||
- creates an organization-scoped incident
|
||||
- `PATCH /api/emergency/incidents/[id]`
|
||||
- permission: `incident:manage`
|
||||
- request: `{ status }`
|
||||
- updates only rows in the active organization
|
||||
|
||||
All create/update mutations write audit logs after successful persistence.
|
||||
|
||||
## UI Design
|
||||
|
||||
- Metrics: open, acknowledged, critical, resolved/closed today.
|
||||
- Filters: status, severity, search by title/source/description.
|
||||
- Dense table columns: event, severity, status, source, created time, updated time, actions.
|
||||
- Actions: acknowledge, resolve, close.
|
||||
- Manual creation dialog for authorized operators.
|
||||
- Read-only users can see rows but not mutation controls.
|
||||
|
||||
## Compatibility
|
||||
|
||||
- Existing `/api/system/incidents/[id]` stays for system status settings.
|
||||
- The emergency workspace uses dedicated `/api/emergency/...` routes so tests and UI contracts are local to the operational module.
|
||||
Reference in New Issue
Block a user