# member-platform 文件入口(新架構) ## 閱讀順序 1. [docs/ARCHITECTURE.md](./ARCHITECTURE.md) 2. [docs/DB_SCHEMA.md](./DB_SCHEMA.md) 3. [docs/BACKEND_TASKPLAN.md](./BACKEND_TASKPLAN.md) 4. [docs/FRONTEND_TASKPLAN.md](./FRONTEND_TASKPLAN.md) 5. [docs/FRONTEND_HANDOFF.md](./FRONTEND_HANDOFF.md) 6. [docs/INTERNAL_API_HANDOFF.md](./INTERNAL_API_HANDOFF.md) 7. [docs/LOCAL_DEV_RUNBOOK.md](./LOCAL_DEV_RUNBOOK.md) 8. [docs/VPS_DEPLOY_RUNBOOK.md](./VPS_DEPLOY_RUNBOOK.md) ## 交辦順序(建議) 1. 先看 [ARCHITECTURE.md](./ARCHITECTURE.md) 鎖定資料模型與權限模型。 2. 再看 [DB_SCHEMA.md](./DB_SCHEMA.md) 對齊 table/欄位/關聯。 3. 後端依 [BACKEND_TASKPLAN.md](./BACKEND_TASKPLAN.md) 執行 schema/API/Keycloak 同步調整。 4. 前端依 [FRONTEND_TASKPLAN.md](./FRONTEND_TASKPLAN.md) + [FRONTEND_HANDOFF.md](./FRONTEND_HANDOFF.md) 開工。 5. 其他系統串接時看 [INTERNAL_API_HANDOFF.md](./INTERNAL_API_HANDOFF.md)。 ## 目前狀態 - 架構定版:`Company -> Site`、`System -> Role`。 - 權限定版:`Role` 只能指派給 `Site`(透過 `site_roles`)。 - 成員授權定版:`User` 不直接綁 `Role`,僅透過 `user_sites` 取得 Site 角色。 - IdP 定版:Keycloak 為唯一 IdP。 - 系統定版:`System`/`Role` 由 Keycloak 管理,member 後台僅同步與顯示。 - API 白名單:保留 `api_clients`。 - 後端:新 schema 與 admin/internal API 已切到 role-site 模型。 - 前端:管理頁已切到新模型(公司/站台/系統/角色/會員/API Clients)。 ## 單一真實來源 - DB SQL:[backend/scripts/init_schema.sql](../backend/scripts/init_schema.sql) ## Repo 結構(已拆分) - 整合層(本 repo):`member-platform`(docs / 部署 / 整合) - 後端子模組:[backend](../backend)(submodule: `../member-backend`) - 前端子模組:[frontend](../frontend)(submodule: `../member-frontend`) ## 開發工作目錄(防呆) - 只在 `member-platform` 內開發與提交。 - 後端只改 `member-platform/backend`。 - 前端只改 `member-platform/frontend`。 - 根目錄外的 `member-backend` / `member-frontend` 若有另一份 clone,視為非主要工作副本,避免混用。 ## 提交順序(固定) 1. 先在 `member-platform/backend` 或 `member-platform/frontend` 各自 commit / push。 2. 再回 `member-platform` 根目錄,提交子模組版本指標變更(submodule pointer)並 push。 3. 部署端只需要更新 `member-platform`,再執行 `git submodule update --init --recursive`。 ## 文件邊界 - 本輪只保留可開發、可交辦、可驗收文件。 - 最終規格白皮書延後到專案完成後再產出。