# バッチ設計書 3-greeting-every-second

## 概要

本ドキュメントはMedusaフレームワークのgreeting-every-secondジョブについて、その設計内容を記述したバッチ設計書です。greeting-every-secondはFeature Flagと連動するテスト用スケジュールジョブであり、Feature Flag機能の統合テストのためのフィクスチャとして実装されています。

### 本バッチの処理概要

greeting-every-secondは、MedusaフレームワークのFeature Flag機能とスケジュールジョブの統合をテストするためのフィクスチャ（テスト用実装）です。`custom_ff`というFeature Flagが有効な場合のみ実行され、1秒ごとに1回だけ実行されます。

**業務上の目的・背景**：本ジョブはFeature Flag機能とJobLoaderの統合をテストするために作成されたフィクスチャです。`defineFileConfig`を使用してファイル単位での有効/無効切り替えを実現する方法を示しています。これにより、開発者は特定の機能フラグに応じてジョブの有効化/無効化を制御する方法を学ぶことができます。実際の業務処理は行わず、Jest mockを使用してテストハンドラの呼び出しを検証します。

**バッチの実行タイミング**：cron式`* * * * * *`により毎秒トリガーされますが、`numberOfExecutions: 1`の設定により1回のみ実行されます。さらに、`custom_ff` Feature Flagが無効の場合はジョブ自体が登録されません。

**主要な処理内容**：
1. Feature Flagチェック（`custom_ff`が有効か）
2. ジョブが有効な場合のみJobLoaderに登録
3. cronスケジュールに基づいてハンドラ実行
4. testJobHandler（Jest mock）を呼び出し

**前後の処理との関連**：JobLoaderによってワークフローとして登録されますが、`defineFileConfig`の`isDisabled`条件により、Feature Flagが無効の場合は登録自体がスキップされます。統合テスト（integration-tests/http）で使用されます。

**影響範囲**：テスト用フィクスチャのため、本番環境への影響はありません。Jest mockの呼び出しのみを行い、データベースや外部システムへの影響はありません。

## バッチ種別

テスト用フィクスチャ / Feature Flag統合テスト

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 毎秒（1回のみ） |
| 実行時刻 | 毎秒（`* * * * * *`） |
| 実行曜日 | 毎日 |
| 実行日 | 毎日 |
| トリガー | cron |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| Feature Flag有効 | `custom_ff` Feature Flagが有効であること |
| JobLoaderによる登録 | アプリケーション起動時にジョブが登録されていること |
| numberOfExecutions未達 | 実行回数が1回未満であること |

### 実行可否判定

- `defineFileConfig`の`isDisabled`が`!FeatureFlag.isFeatureEnabled("custom_ff")`を返す
- Feature Flagが無効の場合、ジョブ自体が登録されない
- `numberOfExecutions: 1`により、最大1回まで実行

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| container | MedusaContainer | Yes | - | Medusaの依存性注入コンテナ（ハンドラ引数） |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| なし | - | 入力データなし |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| Jest mock | 関数呼び出し | testJobHandler()の呼び出し |

### 出力ファイル仕様

ファイル出力なし

## 処理フロー

### 処理シーケンス

```
1. アプリケーション起動時
   └─ Feature Flag "custom_ff" チェック
2. Feature Flag有効の場合
   └─ JobLoaderがジョブを登録
3. cronトリガー（毎秒）
   └─ numberOfExecutionsチェック
4. ハンドラ実行
   └─ testJobHandler() mock呼び出し
5. 処理完了
   └─ numberOfExecutionsカウント更新（1回で終了）
```

### フローチャート

```mermaid
flowchart TD
    A[アプリケーション起動] --> B{custom_ff有効?}
    B -->|No| C[ジョブ登録スキップ]
    B -->|Yes| D[ジョブ登録]
    D --> E[cronトリガー]
    E --> F{実行回数チェック}
    F -->|1回未満| G[greetingJob実行]
    F -->|1回以上| H[スキップ]
    G --> I[testJobHandler呼び出し]
    I --> J[完了]
    H --> J
    C --> K[終了]
```

## データベース操作仕様

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

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| なし | - | - | データベース操作なし |

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | - | - | エラー発生なし（mock呼び出しのみ） |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | N/A |
| リトライ対象エラー | N/A |

### 障害時対応

テスト用フィクスチャのため、障害時の特別な対応は不要です。

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | なし |
| コミットタイミング | N/A |
| ロールバック条件 | N/A |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1回（numberOfExecutions） |
| 目標処理時間 | 即時 |
| メモリ使用量上限 | 最小 |

## 排他制御

排他制御は不要です。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| - | - | ログ出力なし（mock呼び出しのみ） |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| - | - | - |

テスト用フィクスチャのため、監視・アラートは不要です。

## 備考

- 本ジョブはテスト用フィクスチャであり、`integration-tests/http/__fixtures__/feature-flag/src/jobs/`に配置されています
- `testJobHandler`はJest mockとしてexportされており、テストコードから呼び出し検証が可能です
- `defineFileConfig`を使用したFeature Flag連動の実装例として参照してください
- config設定:
  - `name`: "greeting-every-second"
  - `schedule`: "* * * * * *"（毎秒）
  - `numberOfExecutions`: 1（最大1回実行）
- defineFileConfig設定:
  - `isDisabled`: `() => !FeatureFlag.isFeatureEnabled("custom_ff")`
