Fab Forward Dev/

DDD ドキュメント

Sales CRM 集約: ファイル管理 / Aggregate: File Management

バウンデッドコンテキスト: File Management (ファイル管理)


集約ルート

File (ファイル)

File (集約ルート)
├── fileName: string         (ファイル名、必須)
├── fileSource: enum         (link / upload)
├── fileType: FileType       (提案書/見積書/契約書/名刺/その他)
├── url: string              (外部リンク URL)
├── description: string      (説明)
├── fileSize: number         (KB、アップロード時)
├── relatedAccount: → Account  (関連取引先)
├── relatedContact: → Contact  (関連担当者)
├── relatedDeal: → Deal        (関連案件)
├── uploadedBy: → User         (アップロード者)
└── salesRep: → User           (営業担当)
プロパティ必須説明
fileNamestringファイル名
fileSourceselectlink (外部リンク) / upload (アップロード)
fileTypeFileTypeproposal / quote / contract / business_card / other
urlstring条件付fileSource=link の場合は必須。http(s) のみ許可
descriptionstringファイルの説明・備考
fileUrlstring非推奨 (後方互換性)。新規は url を使用
fileSizenumberアップロードファイルのサイズ (KB)
uploadedBy→ Userアップロード者
relatedAccount→ Account関連取引先
relatedContact→ Contact関連担当者
relatedDeal→ Deal関連案件
groupstringStaffGroups.slug
salesRep→ User営業担当者
createdBy→ User作成者 (読取専用)
updatedBy→ User最終更新者 (読取専用)
versionnumber楽観ロック用

不変条件 (Invariants):

  • fileName は必須
  • fileType は FILE_TYPE_VALUES の値のみ
  • url のバリデーション (fileSource=link の場合):
    • 空文字不可
    • 有効な URL 形式
    • javascript: プロトコル禁止 (XSS 防止)
    • http: / https: プロトコルのみ許可
  • 楽観ロック: バージョン不整合で 409 Conflict

ファイルタイプの業務的意味

FileType日本語営業プロセスでの位置
proposal提案書商談段階で提出する提案資料
quote見積書見積段階で提出する価格提示
contract契約書成約後の契約文書
business_card名刺担当者情報のデジタル保存
otherその他議事録、カタログ等

関連モデル

File ──→ Account  (任意)
File ──→ Contact  (任意)
File ──→ Deal     (任意)
File ──→ User     (uploadedBy, salesRep)

File は Account, Contact, Deal それぞれに任意で関連付け可能。 1 つのファイルが複数エンティティに同時に関連付くことも可能。