✨ feat(schedule): 实现日程操作记录接口 - #174
Conversation
Codecov Report❌ Patch coverage is 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
No issues found in this review.
Verified with:
cmake -S tests/host -B /tmp/voicelife-host-review-174 && cmake --build /tmp/voicelife-host-review-174 --target schedule_operation_test && ctest --test-dir /tmp/voicelife-host-review-174 -R '^schedule_operation_test$' --output-on-failurecmake --build /tmp/voicelife-host-review-174 && ctest --test-dir /tmp/voicelife-host-review-174 -L '^schedule$' --output-on-failurectest --test-dir /tmp/voicelife-host-review-174 --output-on-failure
|
@fennoai 你是资深后端/全栈架构师 + 嵌入式硬件工程师复合型专家,执行严格、客观、不留情面的代码仓库Review,请遵循下面所有评审规则,逐条输出审查结果,禁止敷衍、禁止只说空话、禁止笼统概括。 评审维度
输出要求
现在开始对提供的仓库代码/PR变更、硬件资料、结构模型进行评审 |
Review Findings
Overall Risk① 整体仓库风险总结:这次变更能通过编译和当前新增 host 测试,但核心风险不在语法,而在边界设计。现在的实现仍然是进程内 mock + 全局静态状态,缺少真实持久化、并发保护和快照可信性,放到实际运行环境里,历史会丢、记录会串、撤销会失真。 ② 优先级整改清单:先修 1/2/3/4/7/8/12 这几项,直接关系到记录是否真实、是否可恢复、是否会在并发下坏掉。然后补 14/15/16 的测试缺口,最后再清理 5/6/9/10/11/17/18/19/20 这些长期维护成本。 ③ 长期架构、软硬件协同优化方案:把“操作记录”从业务服务里拆成独立的仓储端口,服务层只产生日程快照和意图,适配器负责落库、版本化和恢复;同时把时钟、ID 生成和存储对象注入化,避免全局静态状态进入固件主路径。若后面要接 SQLite 或其他本地存储,记录模型必须先定 versioned snapshot schema,再做 CRUD/undo 的原子事务。 验证: |
结论
本 PR 实现日程创建、修改、删除操作的独立记录接口,保存操作前的
Schedule快照,并在 mock 存储中限制最近 10 条记录。请 Reviewer 重点确认previous的领域模型边界、操作类型校验和有限历史记录策略。Refs #173
变更
OperationRecord::previous和RecordScheduleOperationCommand::previous改为std::optional<Schedule>。明确未包含:
Schedule到数据库 JSON 字段的序列化。架构与兼容
领域数据模型由不透明
JsonDocument快照改为std::optional<Schedule>,符合领域层保存完整日程实体、存储适配器负责 JSON 序列化的边界。未新增 Port、Profile 或外部协议,未改变组件依赖方向;现有日程 CRUD 行为不变。验证
./scripts/run_pre_submit_checks.sh证据:
/usr/local/opt/llvm@18/bin/clang-format格式检查通过。CLANG_FORMAT=/usr/local/opt/llvm@18/bin/clang-format RUFF=/Users/mac/.local/share/uv/tools/ruff/bin/ruff ./scripts/check_format.sh通过。./scripts/run_host_tests.sh通过,22/22 测试通过。TDD 记录
schedule_operation_test,在接口未实现时无法完成记录、校验和容量行为。Schedule快照。风险与回退
56c6dcd,不会影响现有日程 CRUD 行为。