# イベントユーザー登録システム

外部システムAPI仕様書.mdを前提に、ユーザーデータCSVから各ユーザーごとにユーザー登録、チーム登録、エントリー登録、イベント参加を行うPythonスクリプトです。

## 概要

このシステムは以下の処理を自動化します：

1. **カスタムユーザー登録 API**
   - メールアドレスをキーに既存ユーザーを取得
   - 検索がヒットしなければ、ユーザー登録
   - 検索がヒットすれば、パスワードを更新
   - event_codeに指定event_codeを設定
   - zekken_number にゼッケン番号を入力
   - team_name にチーム名を入力

2. **チーム登録、メンバー登録**
   - 部門・時間・チーム名でチーム登録
   - メンバーを1名ずつ7名まで登録
   - それぞれダミーメールアドレスと名前と生年月日でメンバー登録

3. **エントリー登録**
   - 指定されたイベントにチームを登録

4. **イベント参加**
   - 登録したエントリーでイベント参加

## CSVファイル形式

CSVファイル（`CPLIST/input/team2025.csv`）は以下の項目を持ちます：

```
部門別数,時間,部門,チーム名,メール,パスワード,電話番号,氏名１,誕生日１,氏名２,誕生日２,氏名３,誕生日３,氏名４,誕生日４,氏名５,誕生日５,氏名６,誕生日６,氏名７,誕生日７,,
```

### 項目説明

- **部門別数**: 部門の番号
- **時間**: 競技時間
- **部門**: 競技部門名
- **チーム名**: チーム名
- **メール**: 代表者メールアドレス
- **パスワード**: パスワード
- **電話番号**: 代表者電話番号
- **氏名１〜７**: チームメンバーの氏名（最大7名）
- **誕生日１〜７**: チームメンバーの生年月日（YYYY/MM/DD形式）

## 使用方法

### 1. 基本的な実行

```bash
# デフォルトイベントコード（大垣2509）で実行
./run_event_registration.sh

# 指定したイベントコードで実行
./run_event_registration.sh "大垣2509"
```

### 2. テスト実行（DRY RUN）

実際のAPI呼び出しを行わずに処理の流れを確認：

```bash
./run_event_registration.sh "大垣2509" --dry-run
```

### 3. カスタムCSVファイルを使用

```bash
./run_event_registration.sh "大垣2509" --csv-file CPLIST/input/custom_teams.csv
```

### 4. カスタムAPI URLを指定

```bash
./run_event_registration.sh "大垣2509" --base-url http://production-server:8000
```

### 5. Pythonスクリプトを直接実行

```bash
python register_event_users.py --event_code "大垣2509" --csv_file CPLIST/input/team2025.csv --dry_run
```

## Docker Composeでの実行

### 環境変数設定

```bash
export EVENT_CODE="大垣2509"
export CSV_FILE="CPLIST/input/team2025.csv"
export BASE_URL="http://web:8000"
export DRY_RUN="true"  # テスト実行の場合
```

### 実行

```bash
docker-compose -f docker-compose.event-registration.yml up --build
```

## オプション

| オプション | 説明 | デフォルト値 |
|-----------|------|-------------|
| `--event_code` | イベントコード | 必須 |
| `--csv_file` | CSVファイルパス | `CPLIST/input/team2025.csv` |
| `--base_url` | APIベースURL | `http://localhost:8000` |
| `--dry_run` | テスト実行フラグ | False |

## ログ

- 実行ログは `logs/register_event_users.log` に出力されます
- コンソールにも同時出力されます

## 処理統計

処理完了後、以下の統計情報が表示されます：

- 処理完了チーム数
- 作成ユーザー数
- 更新ユーザー数
- 登録チーム数
- 作成エントリー数
- 参加登録数
- エラー数とその詳細

## 注意事項

1. **API認証**: システムが稼働していることを確認してください
2. **CSVファイル**: 必要な項目が正しく入力されていることを確認してください
3. **重複処理**: 同じデータを複数回実行すると重複エラーが発生する可能性があります
4. **メール認証**: 新規ユーザー登録時はメール認証が必要な場合があります

## トラブルシューティング

### よくあるエラー

1. **CSVファイルが見つからない**
   ```
   エラー: CSVファイルが見つかりません: CPLIST/input/team2025.csv
   ```
   → CSVファイルのパスを確認してください

2. **API接続エラー**
   ```
   エラー: APIサーバーに接続できません
   ```
   → BASE_URLが正しいか、サーバーが稼働しているか確認してください

3. **重複ゼッケン番号エラー**
   ```
   チーム登録エラー: このゼッケン番号は既に使用されています
   ```
   → 既に登録済みのデータを再実行しようとしています

### ログの確認

```bash
# リアルタイムでログを確認
tail -f logs/register_event_users.log

# エラーのみを確認
grep ERROR logs/register_event_users.log
```

## 開発者向け情報

### ファイル構成

```
rogaining_srv/
├── register_event_users.py                    # メインスクリプト
├── run_event_registration.sh                  # 実行スクリプト
├── docker-compose.event-registration.yml      # Docker Compose設定
├── Dockerfile.event_registration              # Dockerfile
├── CPLIST/input/team2025.csv                 # CSVデータファイル
└── logs/register_event_users.log             # ログファイル
```

### API エンドポイント

使用するAPIエンドポイント：

- `POST /api/register/` - ユーザー仮登録
- `POST /api/login/` - ログイン
- `POST /api/register_team` - チーム登録
- `POST /api/teams/{team_id}/members/` - メンバー追加
- `POST /api/entry/` - エントリー登録
- `POST /api/start_from_rogapp` - イベント参加

### カスタマイズ

処理をカスタマイズする場合は、`register_event_users.py`の以下のメソッドを編集してください：

- `get_or_create_user()` - ユーザー登録ロジック
- `register_team_and_members()` - チーム登録ロジック
- `create_event_entry()` - エントリー登録ロジック
- `participate_in_event()` - イベント参加ロジック

## ライセンス

このプロジェクトはロゲイニングシステムの一部です。
