Salesforce および外部システム連携をテーマにしたリポジトリです。予約システム(NestJS / Next.js)と Salesforce を双方向に連携させ、要件定義 → 設計 → 実装 → テスト → 実機検証まで一貫して完遂した証跡を、厳選して示します。
Experience Site 上の予約投影リスト。キャンセル対象の予約を強調表示しています。
サイトからキャンセルを受け付けると処理状態が QUEUED → SUCCEEDED と遷移し、予約ステータスが CANCELLED に更新されます。
キャンセル受付(処理状態: QUEUED)
処理完了(処理状態: SUCCEEDED、予約ステータス更新済み)
キャンセル結果が反映された booking システム側の管理コンソールです。
- ✅ 双方向連携 — 予約の投影(booking → SF)とキャンセル・コマンド(SF → booking)
- ✅ 実機検証 — ブラウザ実機 5 項目 + 自動化検証 8 項目 全件合格(障害誘発 → 手動リカバリを含む)
- ✅ セキュリティ — JWT Bearer 認証・冪等コマンド・行レベル共有(Sharing Set)・CRUD/FLS
- ✅ ドキュメント駆動 — 要件定義/基本設計/詳細設計 3 段階 24 文書 + 検証カバレッジ台帳
flowchart LR
subgraph BS["booking-system(別リポジトリ)"]
FE["Next.js UI"] --> BE["NestJS API"] --> DB[("PostgreSQL")]
end
subgraph SF["Salesforce"]
SITE["Experience Site(LWC)"]
APEX["Apex REST / Queueable"]
OBJ[("Booking__c / Booking_Command__c")]
end
BE -- "① 予約投影(ECA・JWT Bearer)" --> APEX
APEX --> OBJ
SITE --> OBJ
SITE -- "② キャンセル・コマンド(Named Credential)" --> BE
| # | シナリオ | 経路 | 検証結果 |
|---|---|---|---|
| ① | 予約投影 booking → SF | NestJS → ECA(JWT Bearer)→ Apex REST | 正本変更が Booking__c に反映・SYNCED |
| ② | キャンセル・コマンド SF → booking | Site LWC → Queueable → NC → Guard 認証+5 重検証 → version+1 | SUCCEEDED・両側 CANCELLED/v1/SYNCED |
| ③ | 障害と復旧 | トンネル切断 → HTTP 530×3 → FAILED → RESET DML + 再 enqueue(同一 commandId) | SUCCEEDED・冪等(副作用 1 回)実証 |
| 区分 | 結果 |
|---|---|
| 自動化検証 | 8 項目全件合格(MV-04〜06・08〜11 相当) |
| ブラウザ実機 | 5 項目全件合格(MV-01/02/03・07・08) |
| 単体テスト | Apex 36/36(booking 系 4 クラス・集計カバー率 88.55%)・Backend Jest 273/273・Frontend Jest 94/94 |
| 障害リカバリ | コマンド FAILED 誘発 → 手動リトライ → SUCCEEDED(冪等実証) |
| 種別 | ファイル | 役割 |
|---|---|---|
| Apex | BookingProjectionRest.cls | IF-01 受信(冪等・バージョンゲート・upsert) |
| Apex | BookingProjectionDmlHelper.cls | 投影 DML(明示 system context) |
| Apex | BookingCommandQueueable.cls | IF-02 コマンド実行+結果書戻 |
| Apex | BookingSiteController.cls | Site LWC バックエンド(一覧/キャンセル/ポーリング) |
| Test | BookingProjectionRestTest・BookingSiteControllerTest・BookingCommandQueueableTest | 上記 4 クラスの単体テスト |
| LWC | bookingProjectionList | 予約投影リスト(3 秒ポーリング・終態表示) |
| オブジェクト | Booking__c / Booking_Command__c | 投影正本スナップショット(バージョン単調性 VR 含む) / コマンド |
| セキュリティ | Booking_Projection_Sharing.sharingSet / PermissionSet ×3 | 行レベル共有(Account 単位)・Site/統合ユーザー権限 |
| 連携設定 | Named Credential・External Credential・ECA | IF-02 送信入口・静的 Bearer・IF-01 JWT Bearer(Api, RefreshToken) |
| チェーン | リソース |
|---|---|
| LWC | showcaseContactList・showcaseContactCreate・ShowcaseContactController.cls(+Test×2)・ContactCreated チャネル(LMS 同期更新) |
| Aura | BulkCreateContactQuickAction → BulkCreateComponent → BulkCreateComponentChild・ContactDataController.cls(+Test・keyset ページング/サーバー側信頼境界)・EventService(Apex 統一出口+表内イベントバス)・quickActions ×2 |
| リポジトリ | 主要リソース |
|---|---|
| Cho-Geer/booking-backend | integrations モジュール(Guard・コマンド・投影送信)・integration.guard.ts・連携 migration p02(契約)・p03(マッピング) |
| Cho-Geer/booking-frontend | SalesforceWorkbenchEntry.tsx(3 状態ゲート)・AdminPage.tsx |
要件定義(8 件)
- 01_要件一覧(ビジネス背景・スコープ)
- 02_非機能要件一覧・03_業務一覧・04_業務フロー
- 05_業務ルール一覧・06_用語集・07_システム化範囲・08_ToBe業務モデルと現状課題
基本設計(12 件)
- system-architecture(全体構成)・interface-design(IF-01/02 契約・タイムアウト・認証・ペイロード)
- function-design・function-list・screen-items・screens
- erd・common-design(権限・PII 方針)・nonfunctional-design・code-list・data-migration・reports
詳細設計(4 件)+ 台帳
- module-design・table-definitions・unit-test-spec・batch-design
- 台帳:coverage-matrix-summary.xlsx(成果物 × 検証の対応台帳・17 シート)
- 01_要件一覧 — ビジネス背景とスコープ
- interface-design.md — IF-01/02 契約(認証・タイムアウト・ペイロード)
- BookingProjectionRest.cls — 受信側実装(冪等・バージョンゲート)
- integration-commands.service.ts — 送信側 Guard 認証+5 重検証とリトライ
- coverage-matrix-summary.xlsx — 成果物 × 検証の全容
Zixi Tao — Salesforce/外部システム連携領域(設計・実装・テスト・障害対応)
本リポジトリのデプロイ: sf project deploy start -o <org-alias>
関連リポジトリ:booking-backend・booking-frontend(起動手順は各リポジトリ README 参照)




