# ロゲイニング大会管理システム 機能設計書

## 1. システム概要

本システムは、ロゲイニング大会の参加者登録からゴール時のスコアボード印刷まで、大会運営に必要な全機能を提供するWebアプリケーションです。

## 2. 機能一覧

### 2.1 認証・ユーザー管理機能

#### 2.1.1 ユーザー登録
- **機能概要**: 新規参加者の登録
- **API エンドポイント**: `/api/auth/register/`
- **主要機能**:
  - メールアドレスによる一意識別
  - パスワード設定
  - 基本情報登録（名前、性別、生年月日）
  - メール認証による本登録

#### 2.1.2 ログイン/ログアウト
- **機能概要**: システムへの認証
- **API エンドポイント**: `/api/auth/login/`, `/api/auth/logout/`
- **主要機能**:
  - トークンベース認証
  - セッション管理

#### 2.1.3 パスワード管理
- **機能概要**: パスワードの変更・リセット
- **API エンドポイント**: `/api/auth/change-password/`, `/api/auth/password-reset/`

### 2.2 イベント管理機能

#### 2.2.1 イベント作成・管理
- **機能概要**: 大会の基本情報管理
- **データモデル**: `NewEvent2`
- **主要機能**:
  - イベント名、開催期間の設定
  - 参加締切日時の設定
  - 公開/非公開設定
  - イベントコードによる識別

#### 2.2.2 カテゴリ管理
- **機能概要**: 競技クラスの管理
- **データモデル**: `NewCategory`
- **API エンドポイント**: `/api/categories/`
- **主要機能**:
  - カテゴリ名（例：3時間、5時間、ファミリー）
  - 制限時間設定
  - 参加人数制限
  - 性別・年齢制限
  - ゼッケン番号の自動発番

### 2.3 チーム・参加者管理機能

#### 2.3.1 チーム作成・管理
- **機能概要**: 参加チームの管理
- **データモデル**: `Team`
- **API エンドポイント**: `/api/teams/`
- **主要機能**:
  - チーム名設定
  - チームオーナー機能
  - カテゴリ選択
  - メンバー招待機能

#### 2.3.2 メンバー管理
- **機能概要**: チームメンバーの管理
- **データモデル**: `Member`
- **API エンドポイント**: `/api/teams/{team_id}/members/`
- **主要機能**:
  - メンバー追加・削除
  - 仮メンバー機能（メールアドレス未登録者）
  - メンバー招待メール送信

#### 2.3.3 エントリー管理
- **機能概要**: 大会参加申し込み
- **データモデル**: `Entry`
- **API エンドポイント**: `/api/entries/`
- **主要機能**:
  - 参加日選択
  - ゼッケン番号自動割り当て
  - 参加条件検証（年齢、性別、人数制限）
  - 外部システム連携（岐阜ロゲシステム）

### 2.4 大会運営機能

#### 2.4.1 チェックポイント管理
- **機能概要**: コース上のチェックポイント管理
- **データモデル**: `Location`
- **API エンドポイント**: `/api/locations/`
- **主要機能**:
  - 地理座標による位置管理
  - ポイント値設定
  - カテゴリ別表示制御

#### 2.4.2 競技中管理
- **API エンドポイント群**:
  - `/api/start_from_rogapp/` - スタート記録
  - `/api/checkin_from_rogapp/` - チェックイン記録
  - `/api/goal_from_rogapp/` - ゴール記録

#### 2.4.3 リアルタイムモニタリング
- **機能概要**: 競技中の状況把握
- **API エンドポイント**: 
  - `/api/realtimeMonitor/` - 全チーム監視
  - `/api/realtimeMonitor_zekken_narrow/` - 特定チーム詳細監視
- **主要機能**:
  - GPS位置情報表示
  - チーム状態監視（未スタート、競技中、ゴール済）
  - ルート表示
  - GeoJSON形式データ提供

### 2.5 ランキング・結果表示機能

#### 2.5.1 ランキング表示
- **機能概要**: カテゴリ別ランキング表示
- **API エンドポイント**: 
  - `/api/rankings/{event_code}/{category_name}/`
  - `/api/rankings/top3/{event_code}/`
- **主要機能**:
  - スコア順ランキング
  - TOP3ランキング表示
  - 失格チーム表示

### 2.6 スコアボード・印刷機能

#### 2.6.1 スコアボード生成
- **機能概要**: ゴール時のスコアボード自動生成
- **実装場所**: `MobServer_gifuroge.rb`
- **主要機能**:
  - Excelテンプレートからスコアボード生成
  - PDF変換
  - S3へのアップロード
  - 印刷システムとの連携

#### 2.6.2 自動印刷システム
- **機能概要**: スコアボードの自動印刷
- **実装場所**: `rogaining_autoprint/`
- **主要機能**:
  - S3監視による自動印刷
  - 印刷ジョブ状態管理
  - 再印刷機能

### 2.7 データ管理機能

#### 2.7.1 CSV一括登録
- **機能概要**: 参加者データの一括インポート
- **実装場所**: Django Admin + `EntryCSVProcessor`
- **主要機能**:
  - チーム・メンバー一括登録
  - データ検証
  - 招待メール自動送信

#### 2.7.2 ウェイポイント・GPS管理
- **機能概要**: 位置情報データの管理
- **データモデル**: `GpsLog`, `UserTracks`
- **API エンドポイント**: 
  - `/api/get_waypoint_datas_from_rogapp/`
  - `/api/get_route/`

### 2.8 地図・地理情報機能

#### 2.8.1 地図表示
- **機能概要**: インタラクティブ地図による情報表示
- **API エンドポイント**: 
  - `/api/LocationInBound/` - 範囲内地点検索
  - `/api/ExtentForLocations/` - 地図範囲取得

#### 2.8.2 ルート表示
- **機能概要**: 参加者の移動ルート可視化
- **API エンドポイント**: `/api/top_users_routes/`
- **主要機能**:
  - GeoJSON形式でのルート配信
  - 上位チームのルート表示
  - チェックポイント通過状況表示

## 3. 外部システム連携

### 3.1 岐阜ロゲシステム連携
- **機能**: チーム登録、更新の同期
- **API**: 
  - `/gifuroge/register_team`
  - `/gifuroge/update_team_name`

### 3.2 AWS S3連携
- **機能**: ファイルストレージ
- **用途**: 
  - スコアボード保存
  - 画像ファイル保存

## 4. データモデル概要

### 4.1 主要エンティティ
- **CustomUser**: ユーザー情報
- **NewEvent2**: イベント情報
- **NewCategory**: カテゴリ情報
- **Team**: チーム情報
- **Member**: メンバー情報
- **Entry**: エントリー情報
- **Location**: チェックポイント情報
- **GpsLog**: GPS記録

### 4.2 データ関連
- User ← (1:N) → Team ← (1:N) → Member
- Team ← (1:N) → Entry → (N:1) → Event
- Entry → (N:1) → Category
- Location ← (1:N) → GpsLog

## 5. セキュリティ機能

### 5.1 認証・認可
- **トークンベース認証**: Knox認証使用
- **権限制御**: チームオーナー、メンバー権限
- **API権限**: 読み取り専用・認証必須の分離

### 5.2 データ保護
- **パスワードハッシュ化**: Django標準機能使用
- **CSRF保護**: Django CSRF機能
- **入力検証**: シリアライザーによる検証

## 6. パフォーマンス最適化

### 6.1 データベース最適化
- **インデックス**: 地理空間データ用GiSTインデックス
- **クエリ最適化**: select_related, prefetch_related使用

### 6.2 API最適化
- **ページネーション**: 大量データの分割配信
- **キャッシュ**: 適切なHTTPキャッシュヘッダー

## 7. 運用機能

### 7.1 ログ機能
- **アクセスログ**: API使用状況記録
- **エラーログ**: システムエラー記録
- **業務ログ**: 重要操作の記録

### 7.2 監視機能
- **システム監視**: サービス稼働状況
- **リアルタイム監視**: 競技中のチーム状況

このシステムは、ロゲイニング大会の全運営フローを網羅し、参加者・運営者双方の利便性を高める包括的なソリューションとして設計されています。
