Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

04 — Information Architecture (Parents Module)

Where Parents screens live in the shell (00-shared/05). Two zones: the admin guardians workspace (CRUD + linking) and the parent self-service zone ((forward-looking) — no "my profile/children" endpoints exist today, see 01_Product_Overview.md OQ-1). All routes derive from parent.controller.ts (parent.controller.ts:22-60) and the shared shell.


1. Two zones

AppShell (authed)
 ├─ ADMIN WORKSPACE (role: org_admin / admission staff)
 │    /parents                         parents list (paginated)
 │    /parents/:id                     parent detail (+ linked children)
 │    /parents/new                     create parent profile
 │    /parents/:id/edit                edit parent profile
 │    (sheet) link guardian            POST /parents/link/:studentId
 │    (dialog) unlink guardian         DELETE /parents/link/:linkId
 │
 └─ PARENT SELF-SERVICE  (role: parent — (forward-looking))
      /my/children                     my children + child switcher
      /my/profile                      my guardian profile (edit)
  • Admin workspace routes are gated by intended parent.read/create/update/delete/link permissions (planned) (04-Modules/Parents.md:64-70) — not seeded today (permissions.constants.ts); server is JWT-only (parent.controller.ts:23).
  • Parent self-service zone is reachable for the parent role only (role.schema.ts:50-56); requires the (forward-looking) my-profile endpoint.

2. Route table (module-owned; extends 00-shared/05 §4)

RouteScreenAuthSource API
/parentsParents listJWT (+ parent.read planned)GET /parents
/parents/newCreate parent formJWT (+ parent.create planned)POST /parents
/parents/:idParent detail + linked childrenJWT (+ parent.read planned)GET /parents/:id, GET /parents/:id/students
/parents/:id/editEdit parent formJWT (+ parent.update planned)PATCH /parents/:id
/parents/link (sheet)Link guardian ↔ studentJWT (+ parent.link planned)POST /parents/link/:studentId
— (dialog)Unlink guardianJWT (+ parent.link planned)DELETE /parents/link/:linkId
/my/childrenMy children + switcher (forward-looking)parent role(planned)
/my/profileMy guardian profile (forward-looking)parent roleGET/PATCH /parents/:id

3. Screen hierarchy

  • Parents list is the admin hub: → /parents/new, → /parents/:id (detail) → /parents/:id/edit, detail → link sheet (per child) / unlink dialog.
  • Student detail (Students module) cross-links to guardians via GET /parents/link/student/:studentId (parent.controller.ts:53-57) — guardian list embedded in the student screen.
  • Parent zone: /my/children is the hub; child switcher swaps context; /my/profile is a subpage.
flowchart TD
    PL[/parents/] --> PN[/parents/new/]
    PL --> PD[/parents/:id/]
    PD --> PE[/parents/:id/edit/]
    PD --> LS[(link sheet)] --> POST1[POST /parents/link/:studentId]
    PD --> UD[(unlink dialog)] --> DEL[DELETE /parents/link/:linkId]
    SD[/students/:id/] --> SL[(guardians via GET /parents/link/student/:studentId)]
    MC[/my/children/ (forward-looking)/] --> CS[(child switcher)]
    MC --> MP[/my/profile/ (forward-looking)/]

4. Modal hierarchy (module)

Following 00-shared/05 §5:

  1. Snackbar — "Guardian linked", "Link removed", "Profile updated".
  2. Bottom sheet — link guardian (relationship + flags ≤ 6 controls), student picker.
  3. Dialog — unlink confirm (destructive-ish), "already linked" warning, primary switch confirm.
  4. Full-screen page — create/edit parent form (> 3 fields → page, 00-shared/05 §5).
  5. Loader — skeleton on lists; CTA spinner on mutations.

5. Screen relationships

  • List → Detail → Edit; Edit returns → Detail (refresh via re-fetch — no cache for detail, 00-shared/06 §3.3).
  • Detail → linked children → per-child guardian menu (unlink, set primary via delete+recreate — OQ-4).
  • Student detail ↔ parent detail bidirectional navigation.
  • Unlink from either side refreshes the other (shared ParentsCubit cache invalidation).

6. Nested nav

  • Tablet/desktop ≥ 840 dp: master-detail — /parents list left, detail right (00-shared/05 §3); phone pushes.
  • Parent zone: /my/children single pane with switcher bar (no master-detail).

7. Quick actions / FAB / context menus

  • Parents list FAB "Add guardian" (extended) → /parents/new.
  • Parent row AppMenu: Edit, Open; linked-child row AppMenu: Unlink, Set primary.
  • Student detail: "Add guardian" tonal button → link sheet.
  • Keyboard (desktop): N on /parents = new; Esc closes sheets/dialogs (00-shared/08 §2).
PatternTargetNote
studylyon://parents/:idParent detailadmin
studylyon://students/:idStudent detailparent: only if linked (forward-looking)
studylyon://my/childrenMy childrenparent role

9. Accessibility of IA

  • One headlineMedium per screen; forms ordered identity → role → flags; focus begins at first field (09_Accessibility_Baseline.md §11).
  • Link sheet: single semantics group per guardian row.

10. Peripheral: which nav elements are Parents-owned

  • Admin: the /parents workspace only. Parent: /my/children + /my/profile — both must register in the shared shell's role-gated destination map (00-shared/05 §2) and be hidden + unroutable for other roles (00-shared/05 §1).