本卡屬 FR-107(母卡 CM-1843),第 .1 棒:暫存批次與安全地基。這是子需求卡,實際工作在底下的子任務卡。
使用者要能「開一個籃子、把一堆證據檔丟進去」,這個籃子叫暫存批次——一批還沒分類、還沒掛任何任務的檔。這一棒把籃子本身做出來:兩張新資料表(批次、批次裡的檔)、四支 API(建批次/上傳/列表/刪檔)、一個前端上傳頁。
同時補一個上線門檻級的安全洞:系統存所有上傳檔的那張表 upload_files 現在沒有租戶欄位、沒有擁有者、沒有 RLS(資料列層級權限,讓資料庫自己擋跨租戶讀取)。以前這張表靠「掛它的表」(例如任務證據表,那張有 RLS)間接保護;但暫存區的檔還沒掛任何東西,這層保護不存在——任何人拿到檔案編號就能讀別家公司的證據。這一棒的第一張卡就是補這個。
另外加一個防呆:系統還沒設定「檔案要存到哪」的時候,上傳要明確報錯(回 412 並說「請先到系統設定完成儲存設定」),而不是偷偷寫到 /tmp 然後重開機就不見。
這一棒是整案的地基——後面每一棒都吃它的產出(批次表、批次 API、儲存位置)。而且 upload_files 補 RLS 是「准不准上線」的硬門檻,必須先做完才有資格把這張表當暫存區用。
upload_files 補租戶/擁有者/RLS + 回填既有資料IEvidenceStorage port 定義 + 宿主存檔 adapter + 防呆 + 權限守門兩個不同租戶的帳號各上傳一批,A 帳號打 B 的批次 API 拿到 403;DEV 查 upload_files 新列都有 tenant_id;DEV 清掉儲存設定再上傳,畫面看到明確錯誤(不是成功)。
無前置,整案從這裡開工。下游:.2 吃本棒的 IEvidenceStorage port 與批次表。
docs/features/FR-107-2609-evidence-classification-v2/design.md(HTML 版 design.html)discussion.md~/Projects/Jedicogy/module/jedi-python-package/jedi-evidence-classification/、.../jedi-file-upload/