P0.A20.F4 · Codegen 后端 ✅
所属 ADR:ADR-AIOS-20 §2.4 T3 主 commit:
d9cdbe9测试:6/6 xunit pass
完成内容
新增 5 个文件(+497 行)
| 文件 | 说明 |
|---|---|
Models/CodegenRequest.cs |
WidgetDefDto + CodegenRequest |
Models/CodegenResponse.cs |
响应体(Header/PresetSchema/文件名) |
Services/CodegenService.cs |
核心生成:GenerateHeader + GeneratePresetSchema |
Controllers/CodegenController.cs |
POST /api/codegen/generate + ModuleId 正则校验 |
Tests/CodegenServiceTests.cs |
6 case TDD(xunit) |
Program.cs DI
API
POST /api/codegen/generate
Body: { moduleId, displayName?, mode, widgets: [{ type, name, label?, unit?, min?, max?, defaultValue?, options?, readOnly?, dataType? }] }
→ { skipped, skipReason?, header, presetSchema, headerFileName, schemaFileName }
生成规则
| Widget Type | C 函数 | JSON Schema |
|---|---|---|
| slider/knob/number-input | float set/get |
number + min/max/unit |
| toggle/checkbox/button-toggle | bool set/get |
boolean |
| combo-box/radio-group/tab-bar | int set/get |
string + enum |
| button-momentary | void trigger only |
不生成(瞬态) |
| label-value/meter-level (ReadOnly) | 跳过 | 不生成 |
| TT* 控件 | dataType→C类型 set/get | dataType→schema 类型 |
安全
- ModuleId 白名单正则:
^[a-zA-Z][a-zA-Z0-9_]*$ - legacy mode →
{ skipped: true }
验收结果
-
POST /api/codegen/generate接口可访问 - normal 模块返回
.h含 set/get - legacy 模块 →
{ skipped: true } - ReadOnly widget 不出现在
.h - ModuleId 特殊字符 → 400 BadRequest
-
CodegenServiceTests.cs6/6 pass(xunit) -
dotnet build0 error
解锁
- 🟢 F5 codegen 前端(POST /api/codegen/generate 接口稳定)