update APIs
This commit is contained in:
161
サーバーAPI変更要求書20250904.md
Normal file
161
サーバーAPI変更要求書20250904.md
Normal file
@ -0,0 +1,161 @@
|
||||
# サーバーAPI変更要求書20250904.md
|
||||
|
||||
## 概要
|
||||
アプリの状態管理において、競技開始状態とゴール状態の保存・復元に関する問題を解決するため、以下のサーバーAPI修正・追加が必要です。
|
||||
|
||||
## 問題点の分析
|
||||
|
||||
### 1. 競技状態管理の不足
|
||||
現在のアプリでは以下4つの重要な状態を管理していますが、サーバー側で対応する状態管理機能が不足している可能性があります:
|
||||
|
||||
- `isInRog` (ロゲイニング中=スタートしたらTrue)
|
||||
- `rogainingCounted` (ロゲイニングチェックイン履歴あり=一度でもスタート・ゴール以外でチェックインしたら True)
|
||||
- `ready_for_goal` (ゴール準備完了=スタートから遠くに移動した際にTrueになる)
|
||||
- `isAtGoal` (ゴール状態=ゴールしたらTrue)
|
||||
|
||||
### 2. チェックイン状態の不整合
|
||||
チェックポイント詳細画面でスタート処理完了後も「未」のまま表示される問題が発生しています。
|
||||
|
||||
## 必要なAPI修正・追加要求
|
||||
|
||||
### 1. 競技状態取得API
|
||||
**エンドポイント**: `GET /api/competition_status/`
|
||||
**パラメータ**:
|
||||
- `event_code`: イベントコード
|
||||
- `zekken_number`: ゼッケン番号
|
||||
|
||||
**レスポンス**:
|
||||
```json
|
||||
{
|
||||
"status": "OK",
|
||||
"data": {
|
||||
"is_in_rog": true,
|
||||
"rogaining_counted": false,
|
||||
"ready_for_goal": false,
|
||||
"is_at_goal": false,
|
||||
"start_time": "2025-09-04T09:00:00+09:00",
|
||||
"goal_time": null,
|
||||
"last_checkin_time": "2025-09-04T09:30:00+09:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 競技状態更新API
|
||||
**エンドポイント**: `POST /api/competition_status/update/`
|
||||
**パラメータ**:
|
||||
```json
|
||||
{
|
||||
"event_code": "EVENT2025",
|
||||
"zekken_number": "001",
|
||||
"is_in_rog": true,
|
||||
"rogaining_counted": false,
|
||||
"ready_for_goal": false,
|
||||
"is_at_goal": false
|
||||
}
|
||||
```
|
||||
|
||||
**レスポンス**:
|
||||
```json
|
||||
{
|
||||
"status": "OK",
|
||||
"message": "Competition status updated successfully",
|
||||
"updated_at": "2025-09-04T10:00:00+09:00"
|
||||
}
|
||||
```
|
||||
|
||||
### 3. スタート処理API拡張
|
||||
**エンドポイント**: `POST /api/start_rogaining/`
|
||||
**既存機能に以下を追加**:
|
||||
- 競技状態の確実な更新(is_in_rog = true)
|
||||
- 開始時刻の記録
|
||||
- レスポンスで更新後の競技状態を返す
|
||||
|
||||
**レスポンス拡張**:
|
||||
```json
|
||||
{
|
||||
"status": "OK",
|
||||
"message": "Rogaining started successfully",
|
||||
"competition_status": {
|
||||
"is_in_rog": true,
|
||||
"rogaining_counted": false,
|
||||
"ready_for_goal": false,
|
||||
"is_at_goal": false,
|
||||
"start_time": "2025-09-04T09:00:00+09:00"
|
||||
},
|
||||
"checkin_record": {
|
||||
"id": 123,
|
||||
"cp_number": -2,
|
||||
"checkin_time": "2025-09-04T09:00:00+09:00"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. ゴール処理API拡張
|
||||
**エンドポイント**: `POST /api/goal_rogaining/`
|
||||
**既存機能に以下を追加**:
|
||||
- 競技状態の確実な更新(is_at_goal = true)
|
||||
- ゴール時刻の記録
|
||||
- 最終得点の計算
|
||||
|
||||
### 5. チェックイン処理API拡張
|
||||
**エンドポイント**: `POST /api/checkin/`
|
||||
**既存機能に以下を追加**:
|
||||
- スタート・ゴール以外のチェックイン時に rogaining_counted = true に設定
|
||||
- ready_for_goal フラグの管理(GPS位置情報に基づく)
|
||||
|
||||
### 6. チェックポイント状態取得API
|
||||
**エンドポイント**: `GET /api/checkpoint_status/`
|
||||
**パラメータ**:
|
||||
- `event_code`: イベントコード
|
||||
- `zekken_number`: ゼッケン番号
|
||||
- `cp_number`: チェックポイント番号
|
||||
|
||||
**レスポンス**:
|
||||
```json
|
||||
{
|
||||
"status": "OK",
|
||||
"data": {
|
||||
"cp_number": -2,
|
||||
"is_checked_in": true,
|
||||
"checkin_time": "2025-09-04T09:00:00+09:00",
|
||||
"status": "競技中", // "未", "競技中", "競技終了"
|
||||
"points_earned": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 実装上の注意点
|
||||
|
||||
### 1. 状態の整合性保証
|
||||
- 競技状態の変更は必ずトランザクション内で実行
|
||||
- 状態変更時は必ず関連する全てのテーブルを更新
|
||||
|
||||
### 2. エラーハンドリング
|
||||
- ネットワーク切断時でも状態が失われないような設計
|
||||
- 重複チェックイン防止機能の実装
|
||||
|
||||
### 3. パフォーマンス考慮
|
||||
- 状態取得APIは高頻度でアクセスされるため、適切なキャッシュ機能を実装
|
||||
- レスポンス時間は500ms以内を目標
|
||||
|
||||
### 4. ログ記録
|
||||
- 競技状態の変更履歴を詳細にログ記録
|
||||
- デバッグ用のタイムスタンプ情報を含める
|
||||
|
||||
## タイムライン
|
||||
- **緊急度**: 高
|
||||
- **実装期限**: 2025年9月10日
|
||||
- **テスト期間**: 2025年9月11日〜13日
|
||||
- **本番適用**: 2025年9月14日
|
||||
|
||||
## 備考
|
||||
これらの修正により、アプリ側で以下の問題が解決されます:
|
||||
|
||||
1. ✅ 競技中にアプリを終了・再開しても正しい状態が復元される
|
||||
2. ✅ スタート処理完了後、チェックポイント詳細画面で「競技中」と表示される
|
||||
3. ✅ 4つの重要な状態(isInRog, rogainingCounted, ready_for_goal, isAtGoal)が確実に保存・復元される
|
||||
4. ✅ サーバー・クライアント間の状態整合性が保たれる
|
||||
|
||||
---
|
||||
作成日: 2025年9月4日
|
||||
作成者: システム開発チーム
|
||||
Reference in New Issue
Block a user