member_center/README.md
2026-04-23 00:30:09 +09:00

80 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 會員平台Member Center
此專案為多網站共用的會員登入中心與電子報訂閱管理平台。文件統一放在 `docs/`
## 目標MVP
- 多個網站共用的會員登入中心SSO
- OAuth2 + OIDC 登入API 與 Redirect 兩種方式)
- 電子報訂閱管理(含未註冊訂閱)
- 未註冊訂閱者可自行取消訂閱
- 未註冊訂閱者未來註冊可沿用訂閱資料
## 既定條件
- OAuth2 + OIDC
- 會員中心只負責 Email/訂閱管理,發送系統另建
- 訂閱採 double opt-in
- 各站各自設計 UI主要走 API少數狀況使用 redirect
- 會員資料跨站共享(邏輯隔離)
- 訂閱事件同步採 event/queue
- DBPostgreSQL
- 開發C# .NET Core + MVC + OpenIddict
## 範圍(第一階段)
- 多租戶(站點)概念與基本設定
- 會員與訂閱者 Email 身分識別
- OAuth2/OIDC 授權Authorization Code + PKCE
- 訂閱/取消訂閱流程(含未註冊)
- 基本管理後台(核心 CRUD
## 非目標(暫不處理)
- 第三方社群登入
- MFA
- 行銷自動化或行為追蹤
- 金流/付費會員
## 文件
- `docs/DESIGN.md`:系統設計總覽、核心模組、資料模型與流程原則
- `docs/UI.md`UI 路由規劃與 Use Cases 對應
- `docs/USE_CASES.md`:需求用例(角色、情境、驗收)
- `docs/FLOWS.md`:主要業務流程(註冊、登入、訂閱、退訂、管理)
- `docs/OPENAPI.md`API 規格說明與補充規則
- `docs/openapi.yaml`OpenAPI 3.1 正式規格檔
- `docs/SCHEMA.sql`:資料庫 schemaPostgreSQL
- `docs/SEED.sql`:初始化/測試資料
- `docs/MESSMAIL.md`:租戶站台介接指引(訂閱/退訂/發信)
- `docs/TECH_STACK.md`:技術棧與選型
- `docs/INSTALL.md`:安裝、初始化與維運指令
- `docs/MEMBER_UPGRADE_PLAN.md`會員中心下一階段升級規劃設定畫面、SMTP、Email 驗證、忘記密碼、角色分級)
- `docs/TEST_SITE.md`手動整合測試站說明API login、redirect login、會員 API happy path
## 專案結構
```text
member_center/
├── src/
│ ├── MemberCenter.Api/ # REST APIOAuth/OIDC、訂閱、管理 API
│ ├── MemberCenter.Web/ # MVC Web UIclient-first 會員介面 + Areas/Admin 管理介面)
│ ├── MemberCenter.TestSite/ # 手動整合測試站API / redirect login happy path
│ ├── MemberCenter.Installer/ # 安裝與初始化 CLImigrate/init/admin
│ ├── MemberCenter.Application/ # 應用層介面與 DTO
│ ├── MemberCenter.Infrastructure/# EF Core、Identity、OpenIddict、服務實作
│ └── MemberCenter.Domain/ # 領域實體與常數
├── docs/ # 專案文件
├── .vscode/ # 本機開發啟動與工作設定
├── MemberCenter.sln # Solution
└── README.md
```
## 待確認事項
- OAuth2 scopes 與最小 claimsemail/profile
- 事件系統選擇Kafka/RabbitMQ/SNS+SQS
- 取消訂閱的 UI 形式(純一鍵或提供偏好)
- GDPR/CCPA 資料匯出與刪除是否納入第一期
## 目前 UI / Auth 狀態
- `MemberCenter.Web` 採單一登入入口client 與 admin 共用同一套帳號。
- `admin` role 使用者在 client 主介面中可看到 `Admin` 功能群組。
- `/admin/*` 已移至 `Areas/Admin`,未登入或非 admin 存取時一律回 `404`
- 本地註冊維持 `UserName = Email`,新帳號預設為未認證但可登入。
- 已支援 Google external login / register 與同 email auto-link。
- 註冊或 external login 建立帳號後,若已存在同 email 訂閱資料,會自動補 `newsletter_subscriptions.user_id`、寫入 audit log並發送 `subscription.linked_to_user` 事件。