Skip to content

feat(interview): 建立公共能力与持久化底座 - #43

Merged
yydounai1234 merged 11 commits into
1024XEngineer:mainfrom
pionxe:codex/feat-interview-foundation
Aug 5, 2026
Merged

feat(interview): 建立公共能力与持久化底座#43
yydounai1234 merged 11 commits into
1024XEngineer:mainfrom
pionxe:codex/feat-interview-foundation

Conversation

@pionxe

@pionxe pionxe commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

变更概述

  • 完善 Interview Flow、Scene Session、语音评分与音频合成公共能力
  • 增加安全文档解析、本地 PaddleOCR 及对象存储录音配置
  • 建立 Interview 三张资产表及 Entity、Mapper、Repository

验证

  • 383 个单元测试通过
  • 10 个集成测试通过
  • 聚合行覆盖率 80.0082%
  • Docker 构建及断网 OCR smoke test 通过

范围

本 PR 不包含 Interview Controller、前端和业务编排。

Closes #37

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two concrete issues are called out inline. I also ran a focused test slice over the new audio, document, OCR, and interview persistence code; it passed.

public SceneFlowResponse createFlow(String sceneId) {
SceneType sceneType = parseSceneType(sceneId);
if (sceneType != SceneType.FREE_CHAT) {
boolean startsAtDialogue = sceneType == SceneType.FREE_CHAT

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Medium: INTERVIEW_SCENE skips findScene(...) here, so /api/custom-scenes/flows can create interview flows even when no prepared interview record exists. That makes the new interview path succeed before its backing snapshot has been persisted.

&& startsWith(content, PDF_SIGNATURE)) {
return DocumentType.PDF;
}
if (normalizedName.endsWith(".docx")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Medium: this gate only accepts .pdf and .docx, but the interview foundation spec allows DOC resumes too. As written, a valid .doc upload will always fail with DOCUMENT_FORMAT_UNSUPPORTED.

pionxe added 11 commits August 5, 2026 10:00
修正 Interview、IELTS 的 Scene 归属和 Flyway DDL 位置。
记录公共能力边界、ADR、接口契约与核心场景伪代码。
让 Interview Flow 直接进入 DIALOGUE 且跳过 Scene 查询。
统一成功与失败终止的释放语义并补齐回归测试。
支持注册由 Scene 创建的运行态会话并创建 practice_session。
提供受控的 COMPLETED 与 FAILED 终态更新且不进入 Realtime。
扩展 EvaluationService 以复用现有发音评分和计算公式。
隔离 Scene、Session、LLM 与持久化副作用并固化接口契约。
提供 PCM WAV 标准化、顺序拼接和 64kbps MP3 编码。
将现有讯飞编码器移出供应商目录并保持评分行为兼容。
将头像专用存储错误统一为通用对象存储错误。

增加 Interview 录音对象前缀配置,并对对象前缀做统一规范化与安全校验。
支持文本型 PDF 和 DOCX 的受限文本提取。

拒绝超限、损坏、扫描件和不支持格式并返回稳定错误。
建立通用 OCR Provider 并内置 CPU 版 PaddleOCR runner。

批量识别受限图片且确保临时文件、进程和输出安全。
建立岗位摘要、资产、实际问题和五维报告的数据模型。

通过统一 Codec 固化 role_summary 的四字段 JSON 契约。
通过下一可用 Flyway migration 创建三张 Interview 资产表。

固化无外键、复合主键、分数范围和完成资产索引约束。
实现三张 Interview 表的 Entity、Mapper 与 Repository。

保证 JSONB 映射、用户归属和问题复合主键条件完整可测。
@pionxe
pionxe force-pushed the codex/feat-interview-foundation branch from 2a3e9a8 to a71beb5 Compare August 5, 2026 02:36
@pionxe
pionxe requested a review from yydounai1234 August 5, 2026 03:29

@yydounai1234 yydounai1234 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@yydounai1234
yydounai1234 merged commit 3ed5bda into 1024XEngineer:main Aug 5, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(interview): 建设 Interview 公共能力与持久化底座

2 participants