# 画面設計書 37-通知解除完了画面

## 概要

本ドキュメントは、Fizzyアプリケーションにおける通知解除完了画面の設計仕様を記述したものです。

### 本画面の処理概要

通知解除完了画面は、メール通知の配信停止が完了したことをユーザーに通知する画面です。解除完了のメッセージと、設定を変更するためのリンクを表示します。

**業務上の目的・背景**：通知解除の処理が完了したことをユーザーに明確に伝え、安心感を提供することが重要です。また、気が変わった場合に備えて、通知設定画面への導線を提供し、再度通知を有効にできるようにします。

**画面へのアクセス方法**：通知解除画面でフォームを送信した後、自動的にリダイレクトされます。

**主要な操作・処理内容**：
1. 解除完了メッセージの確認
2. 通知設定画面へのリンク
3. ホーム画面へ戻る

**画面遷移**：
- 遷移元：通知解除画面（POST後のリダイレクト）
- 遷移先：ホーム画面、通知設定画面

**権限による表示制御**：トークンにより認証されるため、ログイン不要です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 61 | 通知配信停止 | 主機能 | 通知解除完了を表示 |

## 画面種別

完了

## URL/ルーティング

- **パス**: `/notifications/unsubscribe`
- **HTTPメソッド**: GET
- **コントローラ**: `Notifications::UnsubscribesController#show`

## 入出力項目

| 項目名 | 項目ID | 入出力 | データ型 | 必須 | 最大長 | 説明 |
|--------|--------|--------|----------|------|--------|------|
| アクセストークン | access_token | 入力 | String | 必須 | - | メール解除用トークン |

## 表示項目

| 項目名 | 説明 | データ取得元 |
|--------|------|-------------|
| 完了タイトル | 「You're unsubscribed」 | - |
| 完了メッセージ | 「Thanks, {名前}! Fizzy won't send you any more email notifications...」 | @user.first_name |
| 通知設定リンク | Notification Settingsへのリンク | - |
| 戻るリンク | Back to Fizzyリンク | - |

## イベント仕様

### 1-通知設定画面へ遷移

通知設定画面へ遷移して設定を再度有効にする。

- **トリガー**: 「Notification Settings」リンクをクリック
- **遷移先**: `/notifications/settings`

### 2-ホーム画面へ戻る

ホーム画面に戻る。

- **トリガー**: 「Back to Fizzy」リンクをクリック
- **遷移先**: `/`（root_path）

## データベース更新仕様

### 操作別データベース影響一覧

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| 画面表示 | users | SELECT | トークンからユーザーを取得 |

### テーブル別更新項目詳細

この画面ではデータベースの更新は行いません。

## メッセージ仕様

| 種別 | メッセージID | メッセージ内容 | 表示条件 |
|------|------------|---------------|---------|
| 完了 | unsubscribed | You're unsubscribed | 画面表示時 |
| 情報 | thanks_message | Thanks, {名前}! Fizzy won't send you any more email notifications. If you change your mind, you can turn them back on in Notification Settings. | 画面表示時 |

## 例外処理

| 例外 | 発生条件 | 処理内容 |
|-----|---------|---------|
| 無効なトークン | トークンが存在しないまたは期限切れ | ホーム画面にリダイレクト（アラート付き） |

## 備考

- ログイン不要でアクセス可能
- パネルスタイル（panel, shadow, center）で中央配置
- アイコン（arrow-left）付きの戻るリンク

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

ユーザーモデルのfirst_nameメソッドを理解します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | named.rb | `app/models/user/named.rb` | User::Namedモジュール、first_nameメソッド |

**読解のコツ**: `first_name`はnameから空白で分割して最初の要素を返します。

#### Step 2: エントリーポイントを理解する

コントローラのshowアクションを確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | unsubscribes_controller.rb | `app/controllers/notifications/unsubscribes_controller.rb` | showアクションの実装 |

**主要処理フロー**:
1. **5行目**: `before_action :set_user` でトークンからユーザーを取得
2. **15-16行目**: showアクションは空（ビューのみをレンダリング）

#### Step 3: ビューレイヤーを理解する

完了画面のテンプレート構造を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | show.html.erb | `app/views/notifications/unsubscribes/show.html.erb` | 完了メッセージとリンク |

**主要処理フロー**:
- **2行目**: 完了タイトル「You're unsubscribed」を表示
- **3行目**: 感謝メッセージとユーザー名、通知設定リンクを表示
- **5-8行目**: ホームへ戻るリンク

### プログラム呼び出し階層図

```
Notifications::UnsubscribesController#show
    │
    ├─ allow_unauthenticated_access (認証スキップ)
    │
    ├─ set_user
    │      │
    │      ├─ User.find_by_token_for(:unsubscribe, params[:access_token])
    │      │
    │      └─ トークン無効 → redirect_to root_path, alert: "Invalid unsubscribe link"
    │
    └─ render show.html.erb
           │
           ├─ @user.first_name で名前表示
           │
           ├─ link_to notifications_settings_path
           │
           └─ link_to root_path
```

### データフロー図

```
[入力]                    [処理]                         [出力]

パラメータ               UnsubscribesController#show
  access_token ─────────▶ トークン検証
                              │
                        ┌─────┴─────┐
                       有効        無効
                        │           │
                        ▼           ▼
                   @user取得    redirect root_path
                        │          (alert)
                        ▼
                   show.html.erb
                        │
                   ┌────┼────┐
                   │         │
              完了メッセージ  リンク
                   │         │
                   └────┬────┘
                        │
                        ▼
                   画面表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| unsubscribes_controller.rb | `app/controllers/notifications/unsubscribes_controller.rb` | コントローラ | 通知解除処理 |
| show.html.erb | `app/views/notifications/unsubscribes/show.html.erb` | テンプレート | 完了画面 |
| named.rb | `app/models/user/named.rb` | コンサーン | first_nameメソッド |
| routes.rb | `config/routes.rb` | 設定 | ルーティング定義（109行目） |
