Checkpoint: v3.0 - 新增训练视频教程库(分类浏览、自评系统)、训练提醒通知(多类型提醒、浏览器推送)、通知记录管理、去除冗余文字。65个测试全部通过。

这个提交包含在:
Manus
2026-03-14 08:28:57 -04:00
父节点 2c418b482e
当前提交 27083d5af9
修改 19 个文件,包含 2856 行新增32 行删除

查看文件

@@ -0,0 +1,9 @@
{
"query": "CREATE TABLE `notification_log` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`userId` int NOT NULL,\n\t`reminderId` int,\n\t`notificationType` varchar(32) NOT NULL,\n\t`title` varchar(256) NOT NULL,\n\t`message` text,\n\t`isRead` int DEFAULT 0,\n\t`createdAt` timestamp NOT NULL DEFAULT (now()),\n\tCONSTRAINT `notification_log_id` PRIMARY KEY(`id`)\n);\n\nCREATE TABLE `training_reminders` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`userId` int NOT NULL,\n\t`reminderType` varchar(32) NOT NULL,\n\t`title` varchar(256) NOT NULL,\n\t`message` text,\n\t`timeOfDay` varchar(5) NOT NULL,\n\t`daysOfWeek` json NOT NULL,\n\t`isActive` int DEFAULT 1,\n\t`lastTriggered` timestamp,\n\t`createdAt` timestamp NOT NULL DEFAULT (now()),\n\t`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,\n\tCONSTRAINT `training_reminders_id` PRIMARY KEY(`id`)\n);\n\nCREATE TABLE `tutorial_progress` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`userId` int NOT NULL,\n\t`tutorialId` int NOT NULL,\n\t`watched` int DEFAULT 0,\n\t`comparisonVideoId` int,\n\t`selfScore` float,\n\t`notes` text,\n\t`createdAt` timestamp NOT NULL DEFAULT (now()),\n\t`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,\n\tCONSTRAINT `tutorial_progress_id` PRIMARY KEY(`id`)\n);\n\nCREATE TABLE `tutorial_videos` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`title` varchar(256) NOT NULL,\n\t`category` varchar(64) NOT NULL,\n\t`skillLevel` enum('beginner','intermediate','advanced') DEFAULT 'beginner',\n\t`description` text,\n\t`keyPoints` json,\n\t`commonMistakes` json,\n\t`videoUrl` text,\n\t`thumbnailUrl` text,\n\t`duration` int,\n\t`sortOrder` int DEFAULT 0,\n\t`isPublished` int DEFAULT 1,\n\t`createdAt` timestamp NOT NULL DEFAULT (now()),\n\t`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,\n\tCONSTRAINT `tutorial_videos_id` PRIMARY KEY(`id`)\n);",
"command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway04.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 2DECURBBieadmmU.root --database auVVpV3E7dpuxwRrSUT9kL --execute CREATE TABLE `notification_log` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`userId` int NOT NULL,\n\t`reminderId` int,\n\t`notificationType` varchar(32) NOT NULL,\n\t`title` varchar(256) NOT NULL,\n\t`message` text,\n\t`isRead` int DEFAULT 0,\n\t`createdAt` timestamp NOT NULL DEFAULT (now()),\n\tCONSTRAINT `notification_log_id` PRIMARY KEY(`id`)\n);\n\nCREATE TABLE `training_reminders` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`userId` int NOT NULL,\n\t`reminderType` varchar(32) NOT NULL,\n\t`title` varchar(256) NOT NULL,\n\t`message` text,\n\t`timeOfDay` varchar(5) NOT NULL,\n\t`daysOfWeek` json NOT NULL,\n\t`isActive` int DEFAULT 1,\n\t`lastTriggered` timestamp,\n\t`createdAt` timestamp NOT NULL DEFAULT (now()),\n\t`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,\n\tCONSTRAINT `training_reminders_id` PRIMARY KEY(`id`)\n);\n\nCREATE TABLE `tutorial_progress` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`userId` int NOT NULL,\n\t`tutorialId` int NOT NULL,\n\t`watched` int DEFAULT 0,\n\t`comparisonVideoId` int,\n\t`selfScore` float,\n\t`notes` text,\n\t`createdAt` timestamp NOT NULL DEFAULT (now()),\n\t`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,\n\tCONSTRAINT `tutorial_progress_id` PRIMARY KEY(`id`)\n);\n\nCREATE TABLE `tutorial_videos` (\n\t`id` int AUTO_INCREMENT NOT NULL,\n\t`title` varchar(256) NOT NULL,\n\t`category` varchar(64) NOT NULL,\n\t`skillLevel` enum('beginner','intermediate','advanced') DEFAULT 'beginner',\n\t`description` text,\n\t`keyPoints` json,\n\t`commonMistakes` json,\n\t`videoUrl` text,\n\t`thumbnailUrl` text,\n\t`duration` int,\n\t`sortOrder` int DEFAULT 0,\n\t`isPublished` int DEFAULT 1,\n\t`createdAt` timestamp NOT NULL DEFAULT (now()),\n\t`updatedAt` timestamp NOT NULL DEFAULT (now()) ON UPDATE CURRENT_TIMESTAMP,\n\tCONSTRAINT `tutorial_videos_id` PRIMARY KEY(`id`)\n);",
"rows": [],
"messages": [],
"stdout": "",
"stderr": "",
"execution_time_ms": 3057
}