- add dashboard.graphql.ts with 6 real aggregate queries
(teacherDashboard / studentDashboard / parentDashboard /
adminDashboard / warnings / errorBookStats), snake_case aligned
- add dashboard.ts with 6 hooks + full domain model types
- add 4 role dashboard pages (teacher/student/parent/admin)
using DashboardShell + StatCard + DashboardSection with
loading / error / success tri-state
- update [[...route]]/page.tsx to redirect /shell -> /shell/{role}
- retire 6 fake contract queries and hooks (grades/homeworks/
schedule/attendance/exams/announcements) and mark widget
placeholders as migrated
- update universal.test.ts to drop retired hook tests
- mark ARCHITECTURE.md P1-2 as completed with acceptance evidence
28 lines
975 B
TypeScript
28 lines
975 B
TypeScript
// Universal domain GraphQL documents
|
||
// Extracted from widgets/universal/*/index.tsx
|
||
// Related: spec section 2.2
|
||
//
|
||
// P1-2(ARCHITECTURE.md §10):6 个假契约查询已下线(grades/homeworks/
|
||
// schedule/attendance/exams/announcements root 字段在后端 schema 不存在)。
|
||
// 仪表盘改用 data-ana 的真实聚合查询(dashboard.graphql.ts)。
|
||
// 仅保留 notifications(查询真实字段 notifications(userId),形状待 P1-7 修正)。
|
||
import { gql } from "@apollo/client";
|
||
|
||
// From widgets/universal/notifications-widget
|
||
// 注意:notifications(userId) 返回平铺数组,非 {items, total} 包装。
|
||
// 形状修正待 P1-7(codegen 恢复后统一处理)。
|
||
export const GET_NOTIFICATIONS_LIST_DOC = gql`
|
||
query GetNotificationsList($limit: Int, $offset: Int) {
|
||
notifications(limit: $limit, offset: $offset) {
|
||
items {
|
||
id
|
||
title
|
||
body
|
||
createdAt
|
||
type
|
||
}
|
||
total
|
||
}
|
||
}
|
||
`;
|