diff --git a/rog/views_apis/api_play.py b/rog/views_apis/api_play.py index 9267dfc..9225552 100755 --- a/rog/views_apis/api_play.py +++ b/rog/views_apis/api_play.py @@ -670,53 +670,54 @@ def checkin_from_rogapp(request): "requires_manual_review": bool(gps_coordinates.get('accuracy', 0) > 10), # 10m以上は要審査 "image_url": s3_image_url # S3画像URLを返す }) - - except Exception as e: - # より詳細なエラー情報をログに記録 - import traceback - error_details = { - "error_type": type(e).__name__, - "error_message": str(e), - "traceback": traceback.format_exc(), + + except Exception as e: + # より詳細なエラー情報をログに記録 + import traceback + error_details = { + "error_type": type(e).__name__, + "error_message": str(e), + "traceback": traceback.format_exc(), "request_data": request.data if hasattr(request, 'data') else "No data", "user_agent": user_agent if 'user_agent' in locals() else "Unknown", - "client_ip": client_ip if 'client_ip' in locals() else "Unknown" - } + "client_ip": client_ip if 'client_ip' in locals() else "Unknown" + } + + logger.error(f"[CHECKIN] ❌ DETAILED ERROR: {error_details}") + + # より具体的なエラーメッセージを返す + if "データベース" in str(e).lower() or "database" in str(e).lower(): + error_message = "データベースの構造に問題があります。アプリを再起動してください。" + elif "s3" in str(e).lower() or "boto" in str(e).lower(): + error_message = "画像アップロードに問題があります。しばらく後に再試行してください。" + elif "import" in str(e).lower() or "module" in str(e).lower(): + error_message = "サーバーモジュールの読み込みエラーです。管理者にお問い合わせください。" + else: + error_message = "サーバーエラーが発生しました。しばらく後に再試行してください。" - logger.error(f"[CHECKIN] ❌ DETAILED ERROR: {error_details}") - - # より具体的なエラーメッセージを返す - if "データベース" in str(e).lower() or "database" in str(e).lower(): - error_message = "データベースの構造に問題があります。アプリを再起動してください。" - elif "s3" in str(e).lower() or "boto" in str(e).lower(): - error_message = "画像アップロードに問題があります。しばらく後に再試行してください。" - elif "import" in str(e).lower() or "module" in str(e).lower(): - error_message = "サーバーモジュールの読み込みエラーです。管理者にお問い合わせください。" - else: - error_message = "サーバーエラーが発生しました。しばらく後に再試行してください。" - - return Response({ - "status": "ERROR", - "message": error_message, - "error_code": "CHECKIN_API_ERROR" - }, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + return Response({ + "status": "ERROR", + "message": error_message, + "error_code": "CHECKIN_API_ERROR" + }, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + """ -解説 +Goal API from rogapp - 解説 この実装では以下の処理を行っています: -1.イベントコード、チーム名、画像URL、ゴール時間のパラメータを受け取ります -2.パラメータが不足している場合はエラーを返します -3.指定されたイベントとチームの存在を確認します -4.チームがスタートしているかを確認します - - スタートしていない場合はエラーを返します -5.既にゴールしているかチェックします - - ゴール済みの場合は警告メッセージを返します -6.ゴール時間を処理します(提供されていない場合は現在時刻を使用) -7.チームのスコアを計算します -8.スコアボードを生成します(実際の生成ロジックは実装によって異なります) -9.ゴール情報を登録します -10.成功した場合、ゴール情報、スコア、スコアボードURLを含む成功メッセージを返します +1. イベントコード、チーム名、画像URL、ゴール時間のパラメータを受け取ります +2. パラメータが不足している場合はエラーを返します +3. 指定されたイベントとチームの存在を確認します +4. チームがスタートしているかを確認します + - スタートしていない場合はエラーを返します +5. 既にゴールしているかチェックします + - ゴール済みの場合は警告メッセージを返します +6. ゴール時間を処理します(提供されていない場合は現在時刻を使用) +7. チームのスコアを計算します +8. スコアボードを生成します(実際の生成ロジックは実装によって異なります) +9. ゴール情報を登録します +10. 成功した場合、ゴール情報、スコア、スコアボードURLを含む成功メッセージを返します スコアボードの生成部分は、実際のシステムの要件に合わせて詳細に実装する必要があります。 この例では、単純にPDFファイルのパスとURLを生成していますが、