2.9 KiB
2.9 KiB
Unit of Work Dependencies — CMS Frontend
Dependency Matrix
| Unit | Depends On | Blocks |
|---|---|---|
| Unit 0 — Backend Prerequisites | (none — standalone .NET change) | Unit 1 (CORS must work before frontend can call API) |
| Unit 1 — Project Scaffold | Unit 0 | Units 2, 3, 4, 5, 6 |
| Unit 2 — Auth Pages | Unit 1 (ApiClient, AuthContext) | Units 3, 4, 5, 6 (auth layer required) |
| Unit 3 — Layout & Navigation | Unit 2 (ProtectedRoute, RoleGuard) | Units 4, 5, 6 (authenticated shell) |
| Unit 4 — Dashboard | Unit 3 (AppLayout) | Unit 5, 6 (patterns established) |
| Unit 5 — User Management | Unit 3 (RoleGuard), Unit 4 (patterns) | Unit 6 |
| Unit 6 — Remaining Pages & Docs | Unit 3 (AppLayout, RoleGuard) | (none — final unit) |
Dependency Diagram
graph TD
U0["Unit 0\nBackend Prerequisites"]
U1["Unit 1\nProject Scaffold"]
U2["Unit 2\nAuth Pages"]
U3["Unit 3\nLayout & Navigation"]
U4["Unit 4\nDashboard"]
U5["Unit 5\nUser Management"]
U6["Unit 6\nRemaining Pages"]
U0 -->|"CORS + cookie\nenabled"| U1
U1 -->|"ApiClient\nAuthContext"| U2
U2 -->|"ProtectedRoute\nRoleGuard\nInitGuard"| U3
U3 -->|"AppLayout\nSidebar"| U4
U3 -->|"AppLayout\nRoleGuard"| U5
U3 -->|"AppLayout\nRoleGuard"| U6
U4 -->|"patterns\nestablished"| U5
style U0 fill:#4CAF50,stroke:#2E7D32,color:#fff
style U1 fill:#FFC107,stroke:#F57F17,color:#000
style U2 fill:#FF5722,stroke:#BF360C,color:#fff
style U3 fill:#9C27B0,stroke:#4A148C,color:#fff
style U4 fill:#2196F3,stroke:#0D47A1,color:#fff
style U5 fill:#009688,stroke:#004D40,color:#fff
style U6 fill:#607D8B,stroke:#263238,color:#fff
Shared Components Across Units
| Component | Created In | Used By |
|---|---|---|
ApiClient |
Unit 1 | Units 2, 4, 5, 6 |
AuthContext / useAuth |
Unit 1 | Units 2, 3, 4, 5, 6 |
types.ts (TS interfaces) |
Unit 1 | All units |
ProtectedRoute |
Unit 2 | Units 3, 4, 5, 6 (via layout route) |
RoleGuard |
Unit 2 | Units 3, 5, 6 |
InitGuard |
Unit 2 | All authenticated routes (via __root.tsx) |
AppLayout |
Unit 3 | Units 4, 5, 6 |
Sidebar |
Unit 3 | Units 4, 5, 6 |
useAvailabilityStatus |
Unit 4 | Unit 6 (SettingsPage) |
AvailabilityStatusBadge |
Unit 4 | Unit 6 (SettingsPage) |
useValidateInvitation |
Unit 5 | Unit 2 (InviteCompletePage) — note: hook defined in Unit 5, used in Unit 2 route |
Note on cross-unit hook usage:
useValidateInvitationanduseCompleteSetupare logically invitation hooks (Unit 5) but are used inInviteCompletePage(Unit 2). In practice, these hooks can be created in Unit 2 and moved/refactored in Unit 5, or created directly in Unit 5 andInviteCompletePagecompleted then. Implementation order to follow: create stubs in Unit 2, full implementation in Unit 5.