refactor(grades,diagnostic): 完成成绩和学情诊断模块审计 P1+P2 改进项
P1-1: 抽取 stats-service.ts,将 8 个统计计算纯函数从 data-access 层分离 P1-5: 创建 WidgetBoundary 组件 + 补齐 teacher 路由 loading.tsx/error.tsx (14 文件) P1-6: 同步架构图文档 004/005,新增 stats-service 与 widget-boundary 节点 P2-1: 补充 a11y ARIA 属性(5 图表 role=img + aria-label,2 表格 caption,3 列表 role=list,3 按钮 aria-label) P2-3: 修复班级报告 studentId 字段语义错误(schema 改为可空 + 迁移 + 代码适配) P2-4: 修复 grade_managed scope 返回空数据(改为子查询 classes 表按 gradeId 过滤) P2-5: 新增 /parent/diagnostic/ 页面(多子女学情诊断聚合 + loading + error) P2-6: 统一 SearchParams 工具(student/grades 和 management/grade/insights 改用 @/shared/lib/search-params)
This commit is contained in:
45
drizzle/0003_diagnostic_student_nullable.sql
Normal file
45
drizzle/0003_diagnostic_student_nullable.sql
Normal file
@@ -0,0 +1,45 @@
|
||||
CREATE TABLE `class_invitation_codes` (
|
||||
`id` varchar(128) NOT NULL,
|
||||
`class_id` varchar(128) NOT NULL,
|
||||
`code` varchar(8) NOT NULL,
|
||||
`class_invitation_code_status` enum('active','disabled','expired','exhausted') NOT NULL DEFAULT 'active',
|
||||
`max_uses` int,
|
||||
`used_count` int NOT NULL DEFAULT 0,
|
||||
`expires_at` timestamp,
|
||||
`created_by` varchar(128) NOT NULL,
|
||||
`created_at` timestamp NOT NULL DEFAULT (now()),
|
||||
`updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,
|
||||
`revoked_at` timestamp,
|
||||
`revoked_by` varchar(128),
|
||||
`note` varchar(255),
|
||||
CONSTRAINT `class_invitation_codes_id` PRIMARY KEY(`id`),
|
||||
CONSTRAINT `class_invitation_codes_code_unique` UNIQUE(`code`),
|
||||
CONSTRAINT `class_invitation_codes_code_idx` UNIQUE(`code`)
|
||||
);
|
||||
--> statement-breakpoint
|
||||
CREATE TABLE `system_settings` (
|
||||
`id` varchar(128) NOT NULL,
|
||||
`category` varchar(50) NOT NULL,
|
||||
`key` varchar(100) NOT NULL,
|
||||
`value` text NOT NULL,
|
||||
`value_type` varchar(20) NOT NULL DEFAULT 'string',
|
||||
`updated_by` varchar(128),
|
||||
`created_at` timestamp NOT NULL DEFAULT (now()),
|
||||
`updated_at` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT `system_settings_id` PRIMARY KEY(`id`),
|
||||
CONSTRAINT `ss_category_key_idx` UNIQUE(`category`,`key`)
|
||||
);
|
||||
--> statement-breakpoint
|
||||
ALTER TABLE `homework_assignments` MODIFY COLUMN `source_exam_id` varchar(128);--> statement-breakpoint
|
||||
ALTER TABLE `learning_diagnostic_reports` MODIFY COLUMN `student_id` varchar(128);--> statement-breakpoint
|
||||
ALTER TABLE `messages` ADD `sender_deleted_at` timestamp;--> statement-breakpoint
|
||||
ALTER TABLE `messages` ADD `receiver_deleted_at` timestamp;--> statement-breakpoint
|
||||
ALTER TABLE `notification_preferences` ADD `quiet_hours_enabled` boolean DEFAULT false NOT NULL;--> statement-breakpoint
|
||||
ALTER TABLE `notification_preferences` ADD `quiet_hours_start` varchar(5);--> statement-breakpoint
|
||||
ALTER TABLE `notification_preferences` ADD `quiet_hours_end` varchar(5);--> statement-breakpoint
|
||||
ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `class_invitation_codes_class_id_classes_id_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||||
ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `class_invitation_codes_created_by_users_id_fk` FOREIGN KEY (`created_by`) REFERENCES `users`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||||
ALTER TABLE `class_invitation_codes` ADD CONSTRAINT `cic_c_fk` FOREIGN KEY (`class_id`) REFERENCES `classes`(`id`) ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
|
||||
CREATE INDEX `class_invitation_codes_class_idx` ON `class_invitation_codes` (`class_id`);--> statement-breakpoint
|
||||
CREATE INDEX `class_invitation_codes_status_expires_idx` ON `class_invitation_codes` (`class_invitation_code_status`,`expires_at`);--> statement-breakpoint
|
||||
CREATE INDEX `ss_category_idx` ON `system_settings` (`category`);
|
||||
Reference in New Issue
Block a user