P1-验证报告.txt

P1 数据模型落地 — 验证报告
日期:2026-08-22
目录:/home/zyw/Downloads/ai-lesson-prep
依据:《v0.2修订执行计划》P1 DoD;《设计说明书-v0.2》§4.2;《v0.2样例JSON.md》

========================================================================
1. 环境
========================================================================
Node:v20.15.1
npm:9.2.0
Prisma:5.22.0
说明:未新装依赖。npx 执行前取消 HTTP(S)_PROXY,避免 P0.5 同类
      “HttpsProxyAgent is not a constructor” 问题。

========================================================================
2. Prisma schema
========================================================================
prisma validate:The schema at prisma/schema.prisma is valid(exit 0)

JSON 约定:Prisma 5.22 SQLite 连接器不支持 Json 类型(validate 报
P1012)。全部 JSON 载荷用 String 存 JSON 文本;结构写在字段注释中。
users 模型列与 P0.5 一致,仅增加关系字段(不产生 ALTER TABLE users)。

========================================================================
3. 迁移(npx prisma migrate dev --name v02_models --skip-seed)
========================================================================
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": SQLite database "dev.db" at "file:./dev.db"

Applying migration `20260822014730_v02_models`

The following migration(s) have been created and applied from new schema changes:

migrations/
  └─ 20260822014730_v02_models/
    └─ migration.sql

Your database is now in sync with your schema.

Running generate... ✔ Generated Prisma Client (v5.22.0)
  to ./node_modules/@prisma/client in 419ms

exit 0

迁移 SQL 含 CREATE TABLE / CREATE INDEX,不含 ALTER TABLE "users"。

_prisma_migrations:
  20260822000000_init          applied
  20260822014730_v02_models    applied

数据库文件:prisma/dev.db(368640 bytes)

========================================================================
4. prisma generate
========================================================================
(migrate dev 已生成一次;再执行 npx prisma generate)

Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma

✔ Generated Prisma Client (v5.22.0) to ./node_modules/@prisma/client in 470ms

exit 0

========================================================================
5. 表清单(sqlite_master,不含 sqlite_* / _prisma_*)
========================================================================
共 27 张表:

  users                      (P0.5 已有,列未改)
  courses
  chapters
  lessons
  course_outcomes
  knowledge_points
  knowledge_prereq
  sizheng_elements
  knowledge_point_sizheng
  major_templates
  template_rules
  classes
  questionnaires
  questionnaire_responses
  hotspots
  cases
  case_knowledge_points
  case_templates
  lesson_plans
  course_outlines
  feedbacks
  generation_tasks
  knowledge_patches
  sys_config
  user_export_prefs
  rss_sources
  exports                    (ER:LessonPlan 1──N Export,一并落地)

========================================================================
6. users 表未受影响
========================================================================
PRAGMA table_info(users):
  id            INTEGER  PK AUTOINCREMENT  NOT NULL
  username      TEXT     NOT NULL
  password_hash TEXT     NOT NULL
  display_name  TEXT     NOT NULL
  role          TEXT     NOT NULL
  created_at    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP

CREATE TABLE "users" 与 20260822000000_init 一致。

现有账号:
  id=1  username=admin  display_name=系统管理员  role=admin
  password_hash 长度=60(bcrypt)

PrismaClient.user.findUnique({ username: "admin" }) 返回同一对象。
认证代码(src/lib/auth.ts / seed/admin.ts)未改。

========================================================================
7. P1 关键列抽检
========================================================================
questionnaire_responses:
  student_no  TEXT  NOT NULL=0(可空独立列,非题目)

lesson_plans.status 默认 'not_started'
  七态注释:not_started / plan_draft / plan_confirmed /
            ppt_draft / ppt_confirmed / materials_draft / completed
  draft_content / confirmed_content / teacher_edits_summary /
  why_changed / adaptation_log / generation_meta 均存在

course_outcomes:
  literacy_dim TEXT NOT NULL
  is_core      BOOLEAN NOT NULL
  UNIQUE(course_id, code)

classes:
  profile, profile_revision_log, chaoxing_course_id, chaoxing_class_id

template_rules:
  literacy_focus / omit_items / permitted_tools /
  expected_student_performance / preferred_lesson_type / media_strategy

knowledge_points:
  content_depth / bloom_range / misconceptions(无 base_depth)

cases:
  case_type / dilemma / stakeholders / teaching_note / time_needed /
  literacy_focus / source_case_id

feedbacks:
  goal_achievement / difficulty / case_sparked_discussion /
  next_lesson_suggestion / effect_rating / chaoxing_metrics

generation_tasks.type 注释含:
  lesson_plan / ppt / materials / outline /
  questionnaire / profile_report / knowledge_extract / hotspot_analyze

UNIQUE:
  lesson_plans(class_id, lesson_id)
  questionnaires.token
  knowledge_prereq(from_kp_id, to_kp_id)
  case_knowledge_points(case_id, knowledge_point_id)
  case_templates(case_id, template_id)
  sys_config.key

========================================================================
8. 对拍(详见 P1-对拍报告.md)
========================================================================
静态字段名对拍(样例 JSON 键 ⊂ schema 注释/列):95 / 95 通过
入库回读(写入样例 JSON 再 parse):17 / 17 通过
临时对拍数据已清理。

结论:与《v0.2样例JSON.md》字段名全部一致。

========================================================================
9. P1 DoD 对照
========================================================================
[x] Prisma schema + 迁移,含目标对象/关联表/草稿分存/补丁表/系统配置表
[x] questionnaire_responses.student_no 可空独立列,非 questions[] 题目
[x] 与 P0 样例 JSON 对拍通过(字段名一致)
[x] prisma migrate 可跑;prisma generate 通过
[x] users 表与现有认证不受影响
[x] 未删除/移动现有 .md/.txt 设计文档与 P0.5 代码

========================================================================
10. 遗留(不阻塞 P1)
========================================================================
- 种子数据(第七章知识点/流浪狗案例/法学 template_rules/问卷蓝图)属 P2
- 空/过短 description 拒生成、token 限次/过期、学号不进 prompt 等
  为应用层门槛,P1 只落表与注释
- raw_text 500–800 字上限为应用层校验
- sys_config 表为空;.env LESSON_MINUTES=45 仍为初值(表覆盖在 P7 读取时写入)
- generation_tasks.created_by 为相对 v0.1 的可选补充列
- exports 表按 ER 落地,任务点名清单未单列,属完整模型
- P0.5 遗留仍在:教师自助注册、DEEPSEEK_API_KEY 为空、班级卡片静态占位
下载此文件