Skip to content

Firestore

  • [Required] Firestore固有のSDK、document schema、transaction semanticsはこのreferenceに閉じる。作業対象に該当するarchitecture、application、persistence、runtime規約を併用し、このreferenceではFirestore固有の差分だけを扱う。Firestore taskという理由だけで共通referenceを全件読む必要はない。

Boundary and Mapping

  • [Required] FirestoreDbTransactionDocumentReferenceDocumentSnapshotQuerySnapshotをFeatures側へ漏らさない。
  • [Required] [FirestoreData][FirestoreProperty]を持つ型はInfrastructureの永続化DTOとして扱い、domain modelと兼用しない。
  • [Required] document path、collection名、field名、snapshot変換はInfrastructureに閉じる。
  • [Required] Value ObjectはFirestoreへ保存する境界でprimitiveへ展開し、既存document schemaを保つ。
  • [Contextual] Firestore実装をarea別に分割する場合はInfrastructure/Persistence/{Area}/に置き、namespaceをdirectoryに合わせる。

Transaction

  • [Required] Firestore transaction callbackは競合時に再実行される前提にする。
  • [Required] callback内でメール、通知、決済、外部APIなどの外部副作用を実行しない。
  • [Contextual] 確実な外部副作用が必要ならtransaction内でOutbox documentを保存し、冪等な別処理で配送する。
  • [Contextual] Outboxのschema、claim / retry、配送保証、idempotency keyは要件または設計資料で決め、callback内ではbusiness dataとOutboxをatomicに保存する。

Date and Time

  • [Required] Firestoreから読み出した時刻はruntimeのUTC契約に従って扱い、保存前に無条件で.ToUniversalTime()を呼ばない。