# Backend Architecture Spec ## 目標 定義 `mktapi.ose.tw` 的後端分層、責任邊界與核心資料模型,讓 FastAPI 成為穩定產品 API 層。 ## 分層架構 ### Domain Layer - 核心概念與聚合邊界 - 不直接依賴 Directus 原始 schema ### Application Layer - use case / command / query - 權限驗證、狀態流轉、流程編排 ### Repository Layer - Directus-backed repositories(內容型資料) - Native repositories(系統型高頻資料) ### API Layer - Admin API - Editor API - Runtime API ## Directus / FastAPI 邊界 ### Directus 保留 - Identity / Access - CMS / schema / content - revision/audit 能力(內容層版本追蹤) ### FastAPI 接手 - 實驗與發布業務規則 - editor 協作流程 - runtime assignment 與 payload - 事件收集與整合 ## 寫入責任(CUD) - Frontend/SDK 的業務寫入一律先進 FastAPI。 - 內容型 `C/U/D`:FastAPI 驗證後透過 Directus repository 寫入 Directus(保留 revision)。 - 高頻系統型寫入:FastAPI 直接寫 native repository(不依賴 Directus revision)。 - 禁止在前端直接對 Directus 做新業務寫入。 ## 核心資料模型(DATA_MODEL) - Site - Experiment - Variant - VariantChange - ExperimentRelease - Goal - SdkConfig - Assignment - AuditLog - SystemLog ### 模型欄位約束(這輪) - `Experiment.experiment_key`:系統生成(`EX+timestamp`) - `Variant.variant_key`:系統生成(`VA+timestamp`) - `Variant` 不含使用者可編輯 `status` 與 `is_control` - `VariantChange` 不含 `enabled` ## 設計原則 - API DTO、Domain Model、Persistence Schema 分開管理 - 不將 Directus raw item 直接當對外契約 - 嚴格限制跨層耦合 ## 參照文件 - [API_CONTRACT_MASTER.md](/Users/chirs/Documents/workspace/marketing/mkt.ose.tw/docs/backend/API_CONTRACT_MASTER.md) - [DATA_OWNERSHIP_MATRIX.md](/Users/chirs/Documents/workspace/marketing/mkt.ose.tw/docs/backend/DATA_OWNERSHIP_MATRIX.md) - [RUNTIME_SDK_SPEC.md](/Users/chirs/Documents/workspace/marketing/mkt.ose.tw/docs/backend/RUNTIME_SDK_SPEC.md)