active: true
derived: false
groups:
- STORE
header: |
  ストレージポリシー
level: 2.11
links:
- ARCH004: gR_7wx5EpD_LA3s4JJTJmD1-WOKDjlo563zos3pn-aE=
normative: true
ref: ''
reviewed: ThkSRiJ-apEY3KYYZbV3v3M2us2GXLKdMUrievTgUXg=
text: |
  ## インターフェース

  ```python
  class StoragePolicyProtocol(Protocol):
      def should_save_as_blob(self, data: bytes) -> bool: ...
  ```

  ## 振る舞い

  ### 判定ロジック
  - **ThresholdStoragePolicy**: `len(data)` が `threshold` を超えた場合に `True` を返す。
  - **WarningOnlyPolicy**: 常に `False` を返すが、閾値を超えた場合にログ出力のみ行う（互換モード）。
  - **AlwaysBlobPolicy**: 常に `True` を返す。

  ## パラメータ詳細

  | ポリシー型 | パラメータ | デフォルト | 説明 |
  |---|---|---|---|
  | `Threshold` | `threshold` | なし | バイト単位の閾値。10MB等を推奨 |
  | `Warning` | `warning_threshold` | なし | 警告を出すサイズ閾値 |

  ## エラーハンドリング

  - ポリシー内の判定で例外が発生した場合は、安全のため `False` (DB保存) とみなし、エラーをログに記録する。

  ## エッジケース

  - **ゼロバイト**: 空のデータに対する挙動は各ポリシーの閾値設定に依存する（通常はDB保存）。
  - **閾値ちょうどのサイズ**: `len(data) > threshold` のため、閾値と等しい場合はDB保存となる。
