mass_mail_engine/docs/INSTALL.md
warrenchen 7647a8cb3b feat: Add initial database migration for SendEngine with new tables and relationships
- Created migration file for rebaseline of the database schema.
- Added tables: auth_clients, tenants, auth_client_keys, webhook_nonces, events_inbox, lists, campaigns, subscriptions, send_jobs, delivery_summary, and send_batches.
- Defined relationships and constraints between tables.
- Updated DbContext and model snapshot to reflect new entities and their configurations.
- Removed deprecated ListMember entity and its references.
- Introduced Dockerfile for building and running the SendEngine application.
- Enhanced installer program to support tenant creation and webhook client management with Member Center integration.
2026-02-19 17:21:06 +09:00

2.9 KiB
Raw Blame History

Install

  • 需求:.NET SDK 8.x, PostgreSQL
  • 設定:複製 .env.example.env
  • Migration
    • 預設由 API 啟動時自動執行(Db__AutoMigrate=true
    • 需要關閉時請設定 Db__AutoMigrate=false
    • 手動執行可用 dotnet run --project src/SendEngine.Installer -- migrate
  • Webhook Auth 初始化(不使用 SQL 檔,改用 Installer
    • 若僅需先建立 tenant 基本資料:
    • dotnet run --project src/SendEngine.Installer -- ensure-tenant --tenant-id <tenant_uuid> [--tenant-name <name>]
    • 使用 Installer 建立 webhook clientid 自動隨機產生):
    • dotnet run --project src/SendEngine.Installer -- add-webhook-client --tenant-id <tenant_uuid> [--tenant-name <name>] --client-id <client_id> --name <display_name> --scopes <scope1,scope2>
    • 例如:dotnet run --project src/SendEngine.Installer -- add-webhook-client --tenant-id 11111111-1111-1111-1111-111111111111 --tenant-name "Tenant A" --client-id member-center-webhook --name "Member Center Webhook" --scopes newsletter:events.write
    • 若 tenant 不存在Installer 會先自動建立 tenants 基本資料,避免 webhook 出現 tenant_not_found
    • 建立成功後Member Center webhook header X-Client-Id 請帶回傳的 id
    • 若要自動同步到 Member Center POST /integrations/send-engine/webhook-clients/upsert(保留原手動流程):
    • dotnet run --project src/SendEngine.Installer -- add-webhook-client --tenant-id <tenant_uuid> --client-id <client_id> --name <display_name> --scopes <scope1,scope2> --upsert-member-center --mc-base-url <member_center_base_url> --mc-client-id <oauth_client_id> --mc-client-secret <oauth_client_secret> --mc-scope newsletter:events.write.global
    • 可選參數:
    • --mc-token-path(預設 /oauth/token
    • --mc-upsert-path(預設 /integrations/send-engine/webhook-clients/upsert
    • --mc-token-url / --mc-upsert-url(使用完整 URL 時可覆蓋 path 組合)
    • Webhook 驗證規則為 tenant 綁定:auth_clients.tenant_id 必須等於 payload tenant_id
    • 不支援 X-Client-Id fallback
    • 預設拒絕 tenant_id = NULL 的通用 clientWebhook__AllowNullTenantClient=false
  • Member Center 回寫授權(建議):
    • MemberCenter__BaseUrl(建議)
    • MemberCenter__DisableSubscriptionPath(預設 /subscriptions/disable
    • MemberCenter__TokenPath(預設 /oauth/token
    • MemberCenter__ClientId
    • MemberCenter__ClientSecret
    • MemberCenter__Scope=newsletter:events.write
    • MemberCenter__DisableSubscriptionUrlMemberCenter__TokenUrl 可用完整 URL 覆蓋fallback
    • MemberCenter__ApiToken 僅作暫時 fallback非首選
  • 本機測試輔助(臨時):
    • TestFriendly__Enabled=true 時:
    • webhook 收到未知 tenant 會自動建立 tenant
    • /webhooks/ses 不做任何 DB 存取(僅用於測試流程打通)
    • 正式環境建議維持 false