【Codex】用APP绑定教程模块规范移动端接入指引

教育管理系统APP绑定教程用Codex自动生成项目代码

APP绑定教程模块连接教材章节、教案主体和 NotebookLM 资源,是学生端课程内容能否按章节准确打开的关键配置。它维护的不是简单绑定关系,而是从教材路径解析出学段、学科、版本、教材和章节,再把章节映射到 LessonPlan 中的 NotebookLM 教案计划。

本文基于 server_backend/modules/Config/views_app/LessonPlanChapter.pymodules/Config/tasks.pyserver_vue3/src/views/modules/Config/LessonPlanChapter/ 的真实代码,说明如何把章节初始化、批量绑定、异步状态轮询和资源回显转换成 Codex 可执行的项目代码生成任务。

文章目录

设计与需求

APP绑定教程不能只写成"维护章节绑定 ID"。当前代码里,LessonPlanChaptertext_book 保存完整教材路径,用 lesson_plan_notebook_idlesson_plan_notebook_name 绑定 LessonPlan,序列化器还会从 LessonPlan 读取音频概览、视频概览、演示文稿、测验、闪卡、信息图、表格、思维导图和报告 Markdown 等 NotebookLM 资源字段。这个模块要放回教育管理系统的课程分发场景中设计。
APP教程需求
绑定模块设计
章节路径设计
绑定模型设计
任务接口设计
权限验收设计
Codex生成代码
章节资源可用

需求层描述 设计层转换 Codex 代码生成方向
APP 需要按教材章节打开教程 text_book 保存 学段/学科/版本/教材/章节 路径 生成路径解析、筛选字段和章节树接口
教程需要绑定教案主体 使用 lesson_plan_notebook_idlesson_plan_notebook_name 关联 LessonPlan 生成手动选择、清除关联和保存接口
初始化教案耗时较长 update_subject_chapter_book 通过 Celery 提交任务 生成任务提交、状态查询和前端轮询
批量绑定需要减少人工操作 batch_bind_notebook_by_title 按章节标题与 LessonPlan.subtitle 匹配 生成批量绑定接口、筛选范围和统计回显
APP 端需要获取资源信息 resolve_notebook_id 返回绑定 ID、名称和 notebook_json 生成资源回显接口和字段映射
页面需要高效检索章节 列表筛选按学段、学科、版本、教材、章节、绑定名称展开 生成 FastCrud 列表、筛选区和弹窗交互

模块能力可以拆成三个层面。数据层使用 LessonPlanChapter 保存章节路径和绑定结果;服务层负责章节初始化、批量匹配、任务状态查询和资源解析;页面层负责筛选、编辑绑定、选择 LessonPlan、批量绑定和初始化弹窗。Codex 只有拿到这些边界,才能避免把模块写成单纯的 ID 编辑表。

可以直接使用下面的Prompt进行模块功能的设计

text 复制代码
请基于当前教育管理系统源码设计 APP绑定教程模块。不要把它设计成普通 CRUD,而要围绕教材章节、LessonPlan 绑定、NotebookLM 资源回显、异步初始化和批量绑定完成模块设计。

后端需要参考 server_backend/modules/Config/models.py 中的 LessonPlanChapter 模型,字段包括 text_book、lesson_plan_notebook_id、lesson_plan_notebook_name、lesson_plan_notebook_json。接口需要参考 server_backend/modules/Config/views_app/LessonPlanChapter.py 和 server_backend/modules/Config/tasks.py。

模块需要支持章节列表、筛选查询、新增、编辑、软删除、初始化教案任务提交、初始化任务状态查询、批量按标题绑定 NotebookLM 教案计划、按章节名称解析绑定 ID、章节树查询。

序列化器需要把 text_book 解析成 type_book_level、type_book_subject、type_book_version、textbook_name、chapter_name,并从 LessonPlan 中读取 notebooklm_audio_overview、notebooklm_video_overview、notebooklm_presentation、notebooklm_quiz、notebooklm_flashcard、notebooklm_infographic、notebooklm_table、notebooklm_mindmap、notebooklm_report,组装为 notebook_json。

前端需要参考 server_vue3/src/views/modules/Config/LessonPlanChapter/index.vue、api.ts、crud.tsx、components/InitChapterDialog.vue、components/LessonPlanPickerDialog.vue,实现章节列表、筛选、编辑绑定、从 LessonPlan 选择、清除关联、初始化教案、任务轮询和批量绑定。

请输出完整模块设计,覆盖页面结构、模型字段、接口规则、异步任务、批量绑定、资源回显、权限控制和验收标准,再按当前项目结构生成代码。

后端设计

APP绑定教程后端的重点是搭建章节与教案资源的绑定底座。LessonPlanChapterSerializer 不只是返回模型字段,还通过 parse_text_book 生成筛选展示字段,通过 NOTEBOOK_JSON_FIELD_MAPLessonPlan 的 NotebookLM 资源字段转换为统一 notebook_jsonLessonPlanChapterViewSet 还提供初始化、批量绑定、任务状态、章节树和资源解析等自定义接口。

后端设计项 设计重点 Codex 生成方向
数据模型 LessonPlanChapter 保存教材路径、绑定 ID、绑定名称和 JSON 载体 生成章节绑定模型与软删除能力
序列化逻辑 解析 text_book 并隐藏原始 lesson_plan_notebook_json 生成展示字段和资源字段映射
筛选查询 filter_queryset 按学段、学科、版本、教材、章节过滤 生成路径前缀和包含查询
异步初始化 通过 config_update_subject_chapter_book_task 调用 TextBookViewSet.update_subject_chapter_book 生成 Celery 任务提交与状态接口
批量绑定 按章节标题归一化匹配 LessonPlan.subtitle 生成匹配规则、统计结果和批量更新
资源解析 resolve_notebook_id 返回绑定信息和 notebook_json 生成 APP 端资源查询接口
章节树 chapter_tree 按学段、学科、版本、教材、章节构建树 生成筛选导航数据

后端需要特别处理两个边界。批量绑定不能直接覆盖所有数据,代码中 only_unbound 默认只处理未绑定记录,并通过已初始化教材前缀限定当前有效目录。资源回显不能只返回绑定 ID,还要读取 LessonPlan 的 NotebookLM 字段并归一化为空值,避免 APP 端拿到缺字段的结构。

可以直接使用下面的Prompt进行后端代码的设计

text 复制代码
请为教育管理系统配置中心实现 APP绑定教程模块后端代码,要求从零设计或补齐现有代码,并贴合当前项目结构。

后端模块路径:server_backend/modules/Config/。
模型参考:server_backend/modules/Config/models.py 中的 LessonPlanChapter。
接口参考:server_backend/modules/Config/views_app/LessonPlanChapter.py。
任务参考:server_backend/modules/Config/tasks.py。

请实现 LessonPlanChapter 数据模型,字段包含 text_book、lesson_plan_notebook_id、lesson_plan_notebook_name、lesson_plan_notebook_json,并支持软删除。

请实现 LessonPlanChapterSerializer。序列化时需要把 text_book 解析为 type_book_level、type_book_subject、type_book_version、textbook_name、chapter_name。需要从绑定的 LessonPlan 读取 notebooklm_audio_overview、notebooklm_video_overview、notebooklm_presentation、notebooklm_quiz、notebooklm_flashcard、notebooklm_infographic、notebooklm_table、notebooklm_mindmap、notebooklm_report,并组装 notebook_json。

请实现 LessonPlanChapterViewSet,包含列表、详情、新增、编辑、软删除、update_subject_chapter_book、update_subject_chapter_book_task_status、batch_bind_notebook_by_title、chapter_tree、resolve_notebook_id。列表筛选需要支持 type_book_level、type_book_subject、type_book_version、textbook_name、chapter_name、lesson_plan_notebook_name。

update_subject_chapter_book 需要提交 Celery 异步任务 config_update_subject_chapter_book_task,并返回 task_id、state、subject、level、filename、reset_task_queue。update_subject_chapter_book_task_status 需要根据 task_id 返回 PENDING、PROGRESS、SUCCESS、FAILURE 状态和结果。

batch_bind_notebook_by_title 需要按当前筛选条件限定范围,默认 only_unbound=true,只处理未绑定章节。匹配规则需要归一化章节标题和 LessonPlan.subtitle,并优先匹配 NotebookLM 类型和学科一致的数据。返回 updated_count、matched_count、unmatched_count、non_bindable_skipped、already_bound_skipped、unchanged_count、样例标题和 filters。

resolve_notebook_id 需要按 chapter_name 查询章节绑定,返回 matched、lesson_plan_notebook_id、lesson_plan_notebook_name、notebook_json、教材解析字段和 text_book。未匹配时返回空 notebook_json。

请补齐序列化规则、接口视图、路由注册、筛选查询、权限控制和基础校验,保证前端 LessonPlanChapter 页面和 APP 端资源查询都能使用。

前端设计

APP绑定教程前端的重点不是让用户手填绑定 ID,而是让管理员能快速定位章节、选择教案主体、批量匹配未绑定数据,并观察初始化任务执行结果。index.vue 使用 FastCrud 承载列表,在 actionbar 中放置 InitChapterDialog 和"批量绑定APP"按钮,编辑表单中把 lesson_plan_notebook_id 替换为自定义绑定编辑器。

前端设计项 设计重点 Codex 生成方向
页面入口 index.vue 使用 fs-pagefs-crud、初始化弹窗和批量绑定按钮 生成主页面与 actionbar 插槽
接口封装 api.ts 封装列表、编辑、软删除、初始化任务、任务状态、批量绑定、LessonPlan 选择 生成统一请求函数
列表配置 crud.tsx 展示学段、学科、版本、教材、章节、绑定名称 生成 FastCrud 列表和筛选项
字段转换 buildTextBookByPartsnormalizeSubmitForm 负责路径拼接与提交清洗 生成保存前格式转换
绑定编辑 表单插槽提供"从 LessonPlan 选择"和"清除关联" 生成自定义编辑器和回填逻辑
初始化任务 InitChapterDialog 提交任务并按 task_id 轮询状态 生成异步任务 UI、轮询和统计提示
批量绑定 handleBatchBindApp 按当前筛选条件构造 payload 生成确认框、加载状态和结果提示
LessonPlan 选择 LessonPlanPickerDialog 按关键词搜索 select_for_binding 生成选择弹窗、分页和选中回填

前端字段转换是这个模块最容易出错的位置。后端保存的是 text_book 一条路径,前端展示和筛选却拆成 type_book_leveltype_book_subjecttype_book_versiontextbook_namechapter_name。编辑保存前必须重新拼接路径,并删除展示字段,避免把只读字段误提交给后端。

可以直接使用下面的Prompt进行前端代码的设计

text 复制代码
请为教育管理系统配置中心实现 APP绑定教程模块前端代码,要求贴合当前 server_vue3 项目和 FastCrud 写法。

前端模块路径:server_vue3/src/views/modules/Config/LessonPlanChapter/。
需要实现或补齐 index.vue、api.ts、crud.tsx、components/InitChapterDialog.vue、components/LessonPlanPickerDialog.vue。

index.vue 需要使用 fs-page 和 fs-crud 承载章节绑定列表,在 actionbar-left 插槽放置 InitChapterDialog 和批量绑定APP按钮。编辑表单中需要为 lesson_plan_notebook_id 提供自定义插槽,支持从 LessonPlan 选择、清除关联、显示当前绑定名称和 ID。

api.ts 需要封装 /api/Config/LessonPlanChapter/ 的列表、详情、新增、编辑、软删除,并封装 update_subject_chapter_book、update_subject_chapter_book_task_status、batch_bind_notebook_by_title、resolve_notebook_id、get_init_menu、TeachingCenter/LessonPlan/select_for_binding。

crud.tsx 需要生成列表字段和筛选项:type_book_level、type_book_subject、type_book_version、textbook_name、chapter_name、lesson_plan_notebook_name。text_book 原始字段可隐藏。保存前需要把学段、学科、版本、教材名称、章节名称重新拼接为 text_book,并删除只读展示字段。

InitChapterDialog.vue 需要从 TextBook/get_init_menu 获取学段学科菜单,展示章节初始化状态。初始化单学科时提交 update_subject_chapter_book,拿到 task_id 后轮询 update_subject_chapter_book_task_status,直到 SUCCESS 或 FAILURE。当前页一键初始化需要逐个学科执行,并汇总成功、失败、缺教材、章节新增、恢复、跳过、软删、任务队列等统计。

LessonPlanPickerDialog.vue 需要按关键词查询 /api/TeachingCenter/LessonPlan/select_for_binding/,展示 id、plan_code、subtitle、subject、text_book、content_preview,并支持分页和选择回填。

批量绑定APP需要根据当前列表筛选条件构造 payload,默认 only_unbound=true,调用 batch_bind_notebook_by_title 后展示 updated_count、matched_count、unmatched_count、non_bindable_skipped、already_bound_skipped,并刷新列表。

扩展功能

APP绑定教程的扩展能力都来自真实源码。数据联动负责把 text_book 路径拆分、筛选和保存重新拼接起来;批量处理负责初始化教案和按标题批量绑定;资源预览负责把 LessonPlan 中的 NotebookLM 资源字段稳定返回给 APP 或调用方。这些能力让模块从普通绑定表升级为课程资源分发的配置闭环。

扩展功能 主要用途 落地重点
数据联动 保证教材路径、筛选字段、表单提交和列表回显一致 路径解析、展示字段、提交清洗和刷新逻辑
批量处理 批量初始化章节教案、按标题批量绑定未绑定数据 Celery 任务、状态轮询、匹配统计和范围控制
资源预览 返回绑定 LessonPlan 的 NotebookLM 资源结构 字段映射、空值归一、APP 查询接口

数据联动

数据联动围绕 text_book 展开。后端用 LessonPlanChapterViewUtils.parse_text_book普通高中/化学/鲁科版/教材册/章节 拆成多个展示字段;前端 crud.tsx 在保存前通过 buildTextBookByParts 再拼回 text_book;列表筛选则把学段、学科、版本、教材和章节字段转成后端可理解的查询参数。
结果阶段
处理阶段
输入阶段
筛选字段
编辑绑定
选择教案
路径解析
拼接路径
提交保存
刷新列表
列表回显
绑定更新
资源可查

Codex 生成联动逻辑时,需要避免把拆分字段当成真实模型字段。type_book_leveltype_book_subjecttype_book_versiontextbook_namechapter_name 是序列化展示字段,不应直接入库;提交时只保存 text_booklesson_plan_notebook_idlesson_plan_notebook_name 等模型字段。

可以直接使用下面的Prompt进行数据联动设计

text 复制代码
请为 APP绑定教程模块实现数据联动逻辑。

后端使用 LessonPlanChapter.text_book 保存完整教材路径,格式为 学段/学科/版本/教材名称/章节路径。序列化时需要通过 LessonPlanChapterViewUtils.parse_text_book 拆出 type_book_level、type_book_subject、type_book_version、textbook_name、chapter_name。

前端列表需要展示并筛选这些拆分字段,但新增和编辑提交时不能把这些字段直接保存到模型。请在 crud.tsx 中实现 buildTextBookByParts 和 normalizeSubmitForm,把拆分字段重新拼接为 text_book,并删除 type_book_level、type_book_subject、type_book_version、textbook_name、chapter_name。

从 LessonPlanPickerDialog 选择记录后,需要回填 lesson_plan_notebook_id 和 lesson_plan_notebook_name。清除关联时需要同时清空 ID 和名称。保存成功后刷新当前列表。

请保证列表筛选、编辑回显、选择 LessonPlan、清除绑定、保存提交和列表刷新之间一致。

批量处理

批量处理包含两类真实能力:一类是 InitChapterDialog 对当前页学科逐个提交初始化教案任务,并通过 update_subject_chapter_book_task_status 轮询 Celery 状态;另一类是 batch_bind_notebook_by_title 按当前筛选范围,把未绑定章节与 LessonPlan.subtitle 做标题归一化匹配并批量更新。
结果阶段
处理阶段
输入阶段
当前页学科
当前筛选
提交任务
轮询状态
标题匹配
批量更新
初始化统计
绑定统计
刷新列表

批量绑定的边界必须写清楚:默认 only_unbound=true,已绑定数据跳过;范围来自当前筛选条件;目录节点或不可绑定章节要跳过;未匹配标题需要返回样例,便于人工修正。初始化任务也不能用前端长请求硬等,当前源码已经通过 Celery 拆成提交和轮询两个接口。

可以直接使用下面的Prompt进行批量处理功能设计

text 复制代码
请为 APP绑定教程模块实现批量处理能力。

批量初始化教案:前端 InitChapterDialog 打开时请求 TextBook/get_init_menu,单学科初始化需要调用 LessonPlanChapter/update_subject_chapter_book 提交异步任务,拿到 task_id 后每 1200ms 请求 update_subject_chapter_book_task_status,直到 SUCCESS 或 FAILURE。当前页一键初始化需要逐个学科执行,并汇总成功、失败、缺教材、章节新增、恢复、跳过、软删、任务总数和队列总数。

批量绑定APP:前端根据当前列表筛选条件构造 payload,包括 type_book_level、type_book_subject、type_book_version、textbook_name、chapter_name、lesson_plan_notebook_name、only_unbound=true,调用 batch_bind_notebook_by_title。

后端 batch_bind_notebook_by_title 需要限定当前筛选范围,并只处理当前已初始化教材目录下的数据。标题匹配需要对章节名和 LessonPlan.subtitle 做归一化,优先选择 NotebookLM 类型和学科匹配的 LessonPlan。目录节点、已绑定数据、未匹配数据需要分别统计。

接口返回 updated_count、matched_count、unmatched_count、non_bindable_skipped、already_bound_skipped、unchanged_count、empty_title_count、unmatched_sample_titles、non_bindable_sample_titles、filters。前端需要展示汇总提示并刷新列表。

资源预览

资源预览在源码里体现为 notebook_json 回显。LessonPlanChapterSerializer 通过绑定 ID 查询 LessonPlan,从 notebooklm_audio_overviewnotebooklm_video_overviewnotebooklm_presentationnotebooklm_quiznotebooklm_flashcardnotebooklm_infographicnotebooklm_tablenotebooklm_mindmapnotebooklm_report 中提取资源地址或内容,并映射为 audio_overviewvideo_overviewpresentationchoice_quizflashcard_quizinfographicdata_tablemindmapreport_md
结果阶段
处理阶段
输入阶段
章节名称
绑定ID
查询章节
读取LessonPlan
映射资源
返回绑定
返回资源

这部分不是新建文件预览器,而是为 APP 或调用方提供稳定资源结构。Codex 生成时要保证未绑定、绑定 ID 为空、绑定数据不存在时都返回空结构,不能让前端因为缺字段报错。resolve_notebook_id 还要兼容旧字段 lesson_plan_notebook,因为历史页面可能仍读取该字段。

可以直接使用下面的Prompt进行资源预览功能设计

text 复制代码
请为 APP绑定教程模块实现 NotebookLM 资源预览与回显能力。

后端 LessonPlanChapterSerializer 需要根据 lesson_plan_notebook_id 查询 LessonPlan。如果 ID 为空、为默认值 notebook教案计划,或 LessonPlan 不存在,则返回空 notebook_json。空结构必须包含 audio_overview、video_overview、presentation、choice_quiz、flashcard_quiz、infographic、data_table、mindmap、report_md。

如果绑定的 LessonPlan 存在,请从 notebooklm_audio_overview、notebooklm_video_overview、notebooklm_presentation、notebooklm_quiz、notebooklm_flashcard、notebooklm_infographic、notebooklm_table、notebooklm_mindmap、notebooklm_report 读取资源字段,并映射到 notebook_json。

resolve_notebook_id 接口需要按 chapter_name 查询章节绑定,返回 matched、id、lesson_plan_notebook_id、lesson_plan_notebook_name、lesson_plan_notebook、notebook_json、type_book_level、type_book_subject、type_book_version、textbook_name、chapter_name、text_book。未匹配时返回 matched=false 和空资源结构。

请保证 APP 或前端调用该接口时,不会因为未绑定、空字段或资源缺失导致结构不完整。

Codex开发标准

使用 Codex 开发 APP绑定教程模块,需要用需求边界、PDD、SOP、接口权限规则和验收标准约束开发过程。这个模块跨 ConfigTeachingCenter 和 Celery 任务,必须让 Codex 先读上下文,再分阶段实现绑定、任务、批量处理和资源回显。
验收交付
Codex开发
模块设计
输入约束
需求边界
PDD设计
SOP目录规范
接口与权限规则
后端设计
前端设计
扩展能力
读取上下文
生成后端代码
生成前端代码
补齐任务与绑定
功能自检
PDD验收
问题修复
模块交付

SOP 标准

SOP 用来约束 APP绑定教程的目录、文件职责和开发顺序。这个模块的后端主逻辑在 Config,绑定候选数据来自 TeachingCenter/LessonPlan,异步初始化由 Config/tasks.py 承接,前端页面集中在 LessonPlanChapter 目录。

text 复制代码
ManageBak-ExamEdu/
├── server_backend/
│   └── modules/
│       ├── Config/
│       │   ├── models.py
│       │   ├── urls.py
│       │   ├── utils.py
│       │   ├── tasks.py
│       │   └── views_app/
│       │       ├── LessonPlanChapter.py
│       │       └── TextBook.py
│       └── TeachingCenter/
│           ├── models.py
│           └── views_app/
│               └── LessonPlan.py
├── server_vue3/
│   └── src/
│       └── views/
│           └── modules/
│               └── Config/
│                   └── LessonPlanChapter/
│                       ├── index.vue
│                       ├── api.ts
│                       ├── crud.tsx
│                       └── components/
│                           ├── InitChapterDialog.vue
│                           └── LessonPlanPickerDialog.vue
└── docs/
    └── modules/
        └── config-lesson-plan-chapter/
            ├── pdd.md
            ├── api.md
            ├── test-cases.md
            └── codex-sop.md
开发阶段 Codex 执行目标 输出结果
模块设计 明确章节绑定、异步初始化、批量绑定和资源回显边界 pdd.md
目录规划 沿用 Config/LessonPlanChapter 前后端目录 codex-sop.md
后端实现 生成模型、序列化、筛选、任务接口、批量绑定、资源解析 后端模块代码
前端实现 生成列表、筛选、绑定编辑器、初始化弹窗、选择弹窗 前端页面代码
数据联动 打通路径解析、保存拼接、选择回填和刷新逻辑 联动逻辑代码
扩展功能 补齐批量处理和 NotebookLM 资源回显 任务与资源代码
验收修复 按 PDD 检查绑定、任务、批量和资源结构 验收记录与修复提交

可以直接使用下面的Prompt进行SOP撰写

text 复制代码
请按照教育管理系统模块开发 SOP,从零实现或补齐配置中心的 APP绑定教程模块。

开发前先输出目录结构,不要直接写代码。目录必须贴合当前项目:后端放在 server_backend/modules/Config/,前端放在 server_vue3/src/views/modules/Config/LessonPlanChapter/,候选绑定数据读取 server_backend/modules/TeachingCenter/,文档放在 docs/modules/config-lesson-plan-chapter/。

请先生成 docs/modules/config-lesson-plan-chapter/pdd.md、api.md、test-cases.md 和 codex-sop.md。文档需要明确 LessonPlanChapter 模型字段、text_book 路径解析、LessonPlan 绑定、NotebookLM 资源字段映射、异步初始化任务、批量绑定、前端筛选和验收规则。

文档确认后,再根据 SOP 生成或补齐后端模型、序列化、接口视图、路由注册、筛选查询、权限控制、Celery 任务、前端页面、接口封装、FastCrud 列表、InitChapterDialog 和 LessonPlanPickerDialog。

实现过程中不得新增代码里不存在的 LLM 内容生成、OCR、审批、统计、导入导出功能。只实现源码真实存在的数据联动、批量处理和 NotebookLM 资源回显。

PDD 标准

PDD 是 APP绑定教程的设计与验收文档,用来约束 Codex 输出是否符合真实业务。这个模块的验收重点在绑定关系是否准确、异步任务是否可追踪、批量绑定是否受筛选范围约束、NotebookLM 资源结构是否稳定。

验收维度 验收标准 不通过表现
业务目标 能把教材章节绑定到 LessonPlan 的 NotebookLM 教案计划 只保存一个无上下文的 ID
页面结构 包含章节列表、筛选区、编辑绑定、初始化教案、批量绑定、LessonPlan 选择弹窗 缺少绑定选择或任务入口
数据模型 LessonPlanChapter 字段覆盖 text_book、绑定 ID、绑定名称、JSON 载体 字段与后端模型不一致
接口规则 列表、编辑、软删除、任务提交、任务状态、批量绑定、章节树、资源解析可用 前端按钮存在但后端接口缺失
权限控制 后端接口和前端操作遵守当前项目权限体系 只隐藏按钮,接口可越权调用
测试用例 覆盖筛选、编辑绑定、清除绑定、初始化任务、批量绑定、资源解析 只有页面打开验证
数据联动 text_book 拆分展示、保存拼接和筛选参数一致 编辑保存后路径丢失或字段错位
批量处理 任务轮询可完成,批量绑定只处理筛选范围和未绑定数据 长请求超时或覆盖已绑定数据
资源预览 notebook_json 结构完整,未绑定也返回空结构 APP 端因缺字段报错

可以直接使用下面的Prompt进行PDD 验收

text 复制代码
请根据 docs/modules/config-lesson-plan-chapter/pdd.md 对 APP绑定教程模块进行 PDD 验收。

验收范围包括 server_backend/modules/Config/models.py、server_backend/modules/Config/views_app/LessonPlanChapter.py、server_backend/modules/Config/tasks.py、server_backend/modules/Config/utils.py、server_backend/modules/Config/urls.py,以及 server_vue3/src/views/modules/Config/LessonPlanChapter/index.vue、api.ts、crud.tsx、components/InitChapterDialog.vue、components/LessonPlanPickerDialog.vue。

请检查 LessonPlanChapter 字段是否完整,text_book 是否能解析为学段、学科、版本、教材、章节,列表筛选是否按这些字段生效,编辑保存是否重新拼接 text_book,软删除是否通过 is_deleted 更新。

请检查 update_subject_chapter_book 是否提交 Celery 任务,update_subject_chapter_book_task_status 是否能返回任务状态,InitChapterDialog 是否能轮询任务结果并展示初始化统计。

请检查 batch_bind_notebook_by_title 是否默认 only_unbound=true,是否按当前筛选范围处理,是否返回更新、命中、未匹配、不可绑定跳过和已绑定跳过统计。请检查 LessonPlanPickerDialog 是否能查询候选 LessonPlan 并回填绑定 ID 与名称。

请检查 resolve_notebook_id 和 serializer 返回的 notebook_json 是否包含 audio_overview、video_overview、presentation、choice_quiz、flashcard_quiz、infographic、data_table、mindmap、report_md,并在未绑定时返回空结构。

请输出验收结果表,标记通过、未通过和需要修复的文件位置。不要只给结论,需要指出具体问题、影响范围和修复建议。

总结

APP绑定教程模块的开发价值,在于把教材章节、教案主体和 NotebookLM 资源组织成可查询、可绑定、可批量处理的课程资源闭环。它服务的是 APP 端按章节访问教程内容的业务链路,不是普通后台 ID 维护页面。

使用 Codex 开发这类模块时,PDD 要定义绑定边界、异步任务、批量规则和资源结构,SOP 要约束 Config/LessonPlanChapter 的目录结构和开发顺序,Prompt 要把页面、模型、接口、权限和真实扩展能力分阶段交给 Codex 实现。

相关推荐
熊出没1 小时前
02——从 Prompt 到 Workflow
java·前端·prompt
博客zhu虎康1 小时前
小程序按钮实现先表单校验再走手机号获取功能
android·javascript·小程序
超级无敌谢大脚1 小时前
【无标题】
开发语言·前端·javascript
段ヤシ.1 小时前
回顾Java知识点,面试题汇总Day1(持续更新)
java·开发语言
Devin~Y1 小时前
大厂Java面试:Spring Boot + Redis/Kafka + Spring Cloud + JVM + RAG/向量检索(小Y翻车实录)
java·jvm·spring boot·redis·spring cloud·kafka·mybatis
Hello.Reader1 小时前
算法基础(九)——循环不变式如何证明一个算法是正确的
java·开发语言·算法
GISer_Jing2 小时前
全栈实战:分支管理到CI/CD全流程
运维·前端·ci/cd·github·devops
朝新_2 小时前
【LangChain】少样本提示(few-shorting) 大模型 Few-Shot 提示工程:四大 Example Selector应用
java·人工智能·自然语言处理·langchain
yhy66666662 小时前
java内存
java·开发语言