CallIT 後端 Django 嚴格遵守的目錄分層:api → schema → service → repository → model,目的是降低耦合、便於測試。
| 層 | 職責 | 範例工作 |
|---|---|---|
api/ |
請求接收、Routing、Response 封裝 | URL 對應 view、status code 包裝 |
schema/ |
用 Pydantic 或 Django Ninja 定義 schema,請求參數校驗 + 響應結構化 | 防 XSS、防注入、欄位型別檢查 |
service/ |
核心業務邏輯:權限校驗、狀態流轉 | APPLYING → PROCESSING 規則、角色判定 |
repository/ |
封裝所有 DB CRUD,隔離 ORM | 查/寫 Request 表、跨資料庫查詢 |
model/ |
Django ORM 實體模型定義 | Request、AuditLog table 定義 |
api ←→ schema ←→ service ←→ repository ←→ model ←→ DB
依賴方向是單向的(上層依賴下層,不反向):api 認得 schema/service,但 service 不認得 api。
service.transition_state(request_id, new_state) 集中所有規則service.check_role(user, "IT") 給 api 與 background task 共用service.create_on_behalf(...)