# ER図

## 概要

本ドキュメントは、Ruby on Rails フレームワークのコアコンポーネント（Active Storage、Action Text、Action Mailbox）が使用するデータベースのER図を記述したものです。

## Active Storage ER図

Active Storage は、ファイル添付機能を提供するコンポーネントです。

```mermaid
erDiagram
    active_storage_blobs {
        bigint id PK "プライマリキー"
        string key UK "ストレージキー"
        string filename "ファイル名"
        string content_type "MIMEタイプ"
        text metadata "メタデータ"
        string service_name "サービス名"
        bigint byte_size "ファイルサイズ"
        string checksum "チェックサム"
        datetime created_at "作成日時"
    }

    active_storage_attachments {
        bigint id PK "プライマリキー"
        string name "添付名"
        string record_type "関連モデル型"
        bigint record_id "関連モデルID"
        bigint blob_id FK "BlobID"
        datetime created_at "作成日時"
    }

    active_storage_variant_records {
        bigint id PK "プライマリキー"
        bigint blob_id FK "BlobID"
        string variation_digest "バリエーションダイジェスト"
    }

    active_storage_blobs ||--o{ active_storage_attachments : "has many"
    active_storage_blobs ||--o{ active_storage_variant_records : "has many"
```

### 関係説明

- **active_storage_blobs** と **active_storage_attachments**: 1対多の関係。1つのBlobは複数のAttachmentから参照される可能性があります。
- **active_storage_blobs** と **active_storage_variant_records**: 1対多の関係。1つのBlobは複数のバリアント（変換バージョン）を持つことができます。
- **active_storage_attachments** と **任意のモデル**: ポリモーフィック関連。`record_type` と `record_id` で任意のモデルに関連付けられます。

## Action Text ER図

Action Text は、リッチテキストコンテンツを管理するコンポーネントです。

```mermaid
erDiagram
    action_text_rich_texts {
        bigint id PK "プライマリキー"
        string name "属性名"
        text body "リッチテキスト本文"
        string record_type "関連モデル型"
        bigint record_id "関連モデルID"
        datetime created_at "作成日時"
        datetime updated_at "更新日時"
    }

    active_storage_attachments {
        bigint id PK "プライマリキー"
        string name "添付名"
        string record_type "関連モデル型"
        bigint record_id "関連モデルID"
        bigint blob_id FK "BlobID"
        datetime created_at "作成日時"
    }

    action_text_rich_texts ||--o{ active_storage_attachments : "embeds (polymorphic)"
```

### 関係説明

- **action_text_rich_texts** と **active_storage_attachments**: ポリモーフィック関連。リッチテキスト内に埋め込まれた画像やファイルは、Active Storage を通じて管理されます。`record_type = "ActionText::RichText"` として関連付けられます。
- **action_text_rich_texts** と **任意のモデル**: ポリモーフィック関連。`record_type` と `record_id` で任意のモデルに関連付けられます。

## Action Mailbox ER図

Action Mailbox は、受信メール処理機能を提供するコンポーネントです。

```mermaid
erDiagram
    action_mailbox_inbound_emails {
        bigint id PK "プライマリキー"
        integer status "処理ステータス"
        string message_id "メールMessage-ID"
        string message_checksum "メールチェックサム"
        datetime created_at "作成日時"
        datetime updated_at "更新日時"
    }

    active_storage_attachments {
        bigint id PK "プライマリキー"
        string name "添付名"
        string record_type "関連モデル型"
        bigint record_id "関連モデルID"
        bigint blob_id FK "BlobID"
        datetime created_at "作成日時"
    }

    action_mailbox_inbound_emails ||--o| active_storage_attachments : "raw_email (polymorphic)"
```

### 関係説明

- **action_mailbox_inbound_emails** と **active_storage_attachments**: ポリモーフィック関連（1対1）。受信メールの生データ（raw email）は Active Storage を通じて保存されます。`record_type = "ActionMailbox::InboundEmail"`, `name = "raw_email"` として関連付けられます。

## 全体ER図

すべてのコンポーネントを含む統合ER図です。

```mermaid
erDiagram
    active_storage_blobs {
        bigint id PK "プライマリキー"
        string key UK "ストレージキー"
        string filename "ファイル名"
        string content_type "MIMEタイプ"
        text metadata "メタデータ"
        string service_name "サービス名"
        bigint byte_size "ファイルサイズ"
        string checksum "チェックサム"
        datetime created_at "作成日時"
    }

    active_storage_attachments {
        bigint id PK "プライマリキー"
        string name "添付名"
        string record_type "関連モデル型"
        bigint record_id "関連モデルID"
        bigint blob_id FK "BlobID"
        datetime created_at "作成日時"
    }

    active_storage_variant_records {
        bigint id PK "プライマリキー"
        bigint blob_id FK "BlobID"
        string variation_digest "バリエーションダイジェスト"
    }

    action_text_rich_texts {
        bigint id PK "プライマリキー"
        string name "属性名"
        text body "リッチテキスト本文"
        string record_type "関連モデル型"
        bigint record_id "関連モデルID"
        datetime created_at "作成日時"
        datetime updated_at "更新日時"
    }

    action_mailbox_inbound_emails {
        bigint id PK "プライマリキー"
        integer status "処理ステータス"
        string message_id "メールMessage-ID"
        string message_checksum "メールチェックサム"
        datetime created_at "作成日時"
        datetime updated_at "更新日時"
    }

    ANY_MODEL {
        bigint id PK "任意のモデル"
    }

    active_storage_blobs ||--o{ active_storage_attachments : "has many"
    active_storage_blobs ||--o{ active_storage_variant_records : "has many"
    ANY_MODEL ||--o{ active_storage_attachments : "polymorphic"
    ANY_MODEL ||--o{ action_text_rich_texts : "polymorphic"
    action_text_rich_texts ||--o{ active_storage_attachments : "embeds"
    action_mailbox_inbound_emails ||--o| active_storage_attachments : "raw_email"
```

## ステータス値の説明

### action_mailbox_inbound_emails.status

```mermaid
stateDiagram-v2
    [*] --> pending: 受信
    pending --> processing: 処理開始
    processing --> delivered: 処理完了
    processing --> failed: エラー発生
    processing --> bounced: バウンス
    delivered --> [*]
    failed --> [*]
    bounced --> [*]
```

| 値 | 状態 | 説明 |
|---|---|---|
| 0 | pending | 処理待ち |
| 1 | processing | 処理中 |
| 2 | delivered | 配信完了 |
| 3 | failed | 失敗 |
| 4 | bounced | バウンス |
