242 lines
7.8 KiB
Markdown
242 lines
7.8 KiB
Markdown
# ロゲイニング大会管理システム 機能設計書
|
||
|
||
## 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 監視機能
|
||
- **システム監視**: サービス稼働状況
|
||
- **リアルタイム監視**: 競技中のチーム状況
|
||
|
||
このシステムは、ロゲイニング大会の全運営フローを網羅し、参加者・運営者双方の利便性を高める包括的なソリューションとして設計されています。
|