目的:判斷現行 FE 框架 4 畫面能否直接吃 v2 BE,或要怎麼遷移。 方法:v1 FE 實際呼叫/讀寫欄位(FE code 盤點)↔︎ v2 BE adapter(framework維護工作我寫的)逐欄對照。 信心:URL/欄位比對為客觀(已查 FE code + BE 註冊);標 ⚠️ 者為需重啟後對真實 FE 複驗。
框架 CRUD(畫面1)可直接套用、FE 零改;版本管理/匯入/catalog 編輯(畫面2~4)流程都接得上,但有 4 個具體對不上點要修 —— 多數是 BE adapter 小修,不是 FE 重寫。 其中「AO 欄位對映」一處改就同時修好 3 個畫面。
| FE 動作 | FE 端點 | v2 BE | 結果 |
|---|---|---|---|
| 列表 | POST /oscal-frameworks |
已註冊舊 URL,回 uid/name/main_version/authority/publish_status/description | ✅ 欄位全對 |
| 新增 | POST /oscal-framework {name,code,main_version,authority,publish_status,description} |
OscalFrameworkCreateRequestSchema 接受 | ✅ |
| 編輯 | PUT /oscal-framework/<uid> |
✅ | ✅ |
| 刪除 | DELETE /oscal-framework/<uid> |
我補了 delete | ✅ |
→ FE 零改動可用。(仍需重啟後實點確認)
| FE 動作 | FE 端點 | v2 BE 現況 | 結果 |
|---|---|---|---|
| 框架詳情 | GET /oscal-framework/<uid> |
✅ 註冊 | ✅ |
| 版本列表 | POST /oscal-framework-versions(filters: framework_uid / is_root / parent_version_uid) |
adapter 回 version/release_date/publish_status/parent/children/is_root/parent_version_uid | ✅ 樹/欄位對 |
| 新增/編輯/刪除版本 | POST/PUT/DELETE /oscal-framework-version[/<uid>] |
✅ 註冊 + release_date 已支援 | ✅ |
| ❶ 版本詳情預覽 | 讀 version.catalog.groups[].controls[].assessments[].description |
adapter 只回 catalog={uid,id}、無內容 |
🟥 預覽空白 |
| ❷ PDF 預覽 | version.file_uid → /file/pdf-preview/<uid>,否則舊 /oscal-framework-version/download/pdf/<uid> |
adapter 回 file_uid=None、舊下載端點未註冊 |
🟥 預覽/下載壞 |
| ❸ 此頁匯入版本 | POST /oscal-framework-version/import/<type>(json blob) |
未註冊(只有新 /oscal/framework-versions/import,shape 不同) |
🟥 此頁匯入鈕壞 |
| ❹ 下載 excel/oscal/sample | /oscal-framework-version/download/{excel,oscal,sample}/<uid> |
未註冊 | 🟥 壞 |
| FE 動作 | FE 端點 | v2 BE | 結果 |
|---|---|---|---|
| 草稿列表 / parse / detail / confirm / discard | /oscal-framework-parse-jobs[...] |
✅ 全註冊舊 URL | ✅ 流程接上 |
| ❺ AO 預覽/編輯 | FE 讀寫 assessment.description(FrameworkArticleContent.vue:245,248) |
我 _tree_to_dict 輸出 name=prose, description=None;confirm _persist_catalog 讀 name |
🟥 AO 文字不顯示 + 使用者編輯丟失 |
| confirm payload | {decisions, overrides, target_version/release_date/publish_status} |
✅ 接受 | ✅(除 AO override 走 description) |
| ⚠️ parse 上傳 | multipart file + json blob {target_framework_uid, parser_type, ...} |
route 解析方式需複驗跟 FE 送法一致 | ⚠️ 待驗 |
| FE 動作 | FE 端點 | v2 BE | 結果 |
|---|---|---|---|
| catalog-tree | GET /oscal-framework-version/<uid>/catalog-tree |
adapter 回 flat groups/controls/assessments + group_uid/control_uid 連結 + has_references + publish_status | ✅ 結構對(flat,同舊) |
| 改/刪 group/control/AO | PUT/DELETE /oscal-catalog-group|control|control-assessment/<uid> |
✅ 註冊 | ✅ URL 對 |
| ❺ AO description | FE 讀寫 ao.description |
adapter _flatten 回 name=prose, description=None;update_assessment 寫 prose←name |
🟥 同畫面3 |
| ❻ group.description / control.guidance | FE 顯示/編輯這兩欄 | v2 無對應欄 → 回 None、寫忽略(已知限制) | ⚠️ 顯示空、編輯不保存 |
| 重新上傳(覆蓋) | parse + target_version_uid |
✅ 我有支援 | ✅ |
| # | 問題 | 影響畫面 | 修法(建議) | 端 |
|---|---|---|---|---|
| ❺ AO 欄位對映 | FE 讀寫 assessment.description,v2 adapter 放在 name |
2、3、4(一改三修) | adapter 把 AO 文字對映回 description(↔︎ part.prose),寫入也 description→prose | BE(一處) |
| ❶ 版本詳情 catalog 內容 | list adapter 無 catalog 內容 | 2 | FE 改成點預覽時另呼 catalog-tree(輕);或 BE list 補內容(重) |
FE 優先 |
| ❷ PDF 預覽 / file_uid | adapter file_uid=None + 舊下載端點未註冊 | 2 | parse-job 有存 file_path(=file_uid),adapter 回填 version.file_uid → 走 /file/pdf-preview;或補舊下載端點 |
BE |
| ❸ 此頁匯入 | 舊 /oscal-framework-version/import/<type> 未註冊 |
2 | 此頁匯入入口導去兩階段匯入頁(畫面3,已 live)即可,不必補舊端點 | FE |
| ❹ 下載 excel/oscal/sample | 未註冊 | 2 | 評估是否還需要;要的話補 export 端點(B5 已有 /oscal/export/<doc_type>/<uid> 可借) |
BE/FE |
| ❻ group.desc / control.guidance | v2 無欄 | 2、4 | 決定:接受空白 / 或 v2 加 part 承載 | 決策 |