Fix some APIs
This commit is contained in:
@ -1,5 +1,6 @@
|
||||
# 既存のインポート部分に追加
|
||||
from datetime import datetime, timezone
|
||||
from datetime import datetime
|
||||
from django.utils import timezone
|
||||
# from sqlalchemy import Transaction # 削除 - SQLAlchemy 2.0では利用不可
|
||||
from rest_framework.decorators import api_view
|
||||
from rest_framework.response import Response
|
||||
@ -80,7 +81,7 @@ def remove_checkin_from_rogapp(request):
|
||||
# チームの存在確認
|
||||
entry = Entry.objects.filter(
|
||||
event=event,
|
||||
team_name=team_name
|
||||
team__team_name=team_name
|
||||
).first()
|
||||
|
||||
if not entry:
|
||||
@ -90,16 +91,17 @@ def remove_checkin_from_rogapp(request):
|
||||
"message": "指定されたチームが見つかりません"
|
||||
}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
logger.info(f"[REMOVE_CHECKIN] ✅ Team found - ID: {request_id}, team_name: '{team_name}', zekken: {entry.zekken_number}, entry_id: {entry.id}")
|
||||
logger.info(f"[REMOVE_CHECKIN] ✅ Team found - ID: {request_id}, team_name: '{team_name}', zekken: {entry.team.zekken_number}, entry_id: {entry.id}")
|
||||
|
||||
# 対象のチェックポイント記録を検索
|
||||
checkpoint = GpsLog.objects.filter(
|
||||
entry=entry,
|
||||
zekken_number=entry.team.zekken_number,
|
||||
event_code=event_code,
|
||||
cp_number=cp_number
|
||||
).first()
|
||||
|
||||
if not checkpoint:
|
||||
logger.warning(f"[REMOVE_CHECKIN] ⚠️ Checkpoint not found - ID: {request_id}, team_name: '{team_name}', zekken: {entry.zekken_number}, cp_number: {cp_number}, Client IP: {client_ip}")
|
||||
logger.warning(f"[REMOVE_CHECKIN] ⚠️ Checkpoint not found - ID: {request_id}, team_name: '{team_name}', zekken: {entry.team.zekken_number}, cp_number: {cp_number}, Client IP: {client_ip}")
|
||||
return Response({
|
||||
"status": "ERROR",
|
||||
"message": "指定されたチェックポイント記録が見つかりません"
|
||||
@ -125,7 +127,7 @@ def remove_checkin_from_rogapp(request):
|
||||
|
||||
checkpoint.delete()
|
||||
|
||||
logger.success(f"[REMOVE_CHECKIN] 🎉 Successfully removed checkpoint - ID: {request_id}, team_name: '{team_name}', zekken: {entry.zekken_number}, cp_number: {cp_number}, checkpoint_id: {checkpoint_id}, had_image: {bool(image_address)}, Client IP: {client_ip}")
|
||||
logger.success(f"[REMOVE_CHECKIN] 🎉 Successfully removed checkpoint - ID: {request_id}, team_name: '{team_name}', zekken: {entry.team.zekken_number}, cp_number: {cp_number}, checkpoint_id: {checkpoint_id}, had_image: {bool(image_address)}, Client IP: {client_ip}")
|
||||
|
||||
return Response({
|
||||
"status": "OK",
|
||||
@ -220,7 +222,8 @@ def start_checkin(request):
|
||||
|
||||
# 既にスタート済みかチェック(GpsLogでSTARTレコードを確認)
|
||||
existing_start = GpsLog.objects.filter(
|
||||
entry=entry,
|
||||
zekken_number=zekken_number,
|
||||
event_code=event_code,
|
||||
cp_number="START",
|
||||
serial_number=0
|
||||
).first()
|
||||
@ -238,7 +241,8 @@ def start_checkin(request):
|
||||
with transaction.atomic():
|
||||
# スタート情報をGpsLogとして登録
|
||||
start_info = GpsLog.objects.create(
|
||||
entry=entry,
|
||||
zekken_number=zekken_number,
|
||||
event_code=event_code,
|
||||
cp_number="START",
|
||||
serial_number=0,
|
||||
latitude=0.0,
|
||||
@ -343,7 +347,8 @@ def add_checkin(request):
|
||||
|
||||
# チームがスタートしているか確認(オプション)
|
||||
start_record = GpsLog.objects.filter(
|
||||
entry=entry,
|
||||
zekken_number=zekken_number,
|
||||
event_code=event_code,
|
||||
cp_number="START",
|
||||
serial_number=0
|
||||
).first()
|
||||
@ -352,7 +357,8 @@ def add_checkin(request):
|
||||
# スタート情報がない場合は自動的にスタートさせる
|
||||
# 注意: 管理画面からの操作なので、自動スタートを許可
|
||||
GpsLog.objects.create(
|
||||
entry=entry,
|
||||
zekken_number=zekken_number,
|
||||
event_code=event_code,
|
||||
cp_number="START",
|
||||
serial_number=0,
|
||||
latitude=0.0,
|
||||
@ -383,7 +389,8 @@ def add_checkin(request):
|
||||
for cp_number in cp_list:
|
||||
# 既に同じCPを登録済みかチェック
|
||||
existing_checkpoint = GpsLog.objects.filter(
|
||||
entry=entry,
|
||||
zekken_number=zekken_number,
|
||||
event_code=event_code,
|
||||
cp_number=cp_number
|
||||
).first()
|
||||
|
||||
@ -404,7 +411,8 @@ def add_checkin(request):
|
||||
|
||||
# チェックポイント登録
|
||||
checkpoint = GpsLog.objects.create(
|
||||
entry=entry,
|
||||
zekken_number=zekken_number,
|
||||
event_code=event_code,
|
||||
cp_number=cp_number,
|
||||
checkin_time=timezone.now(),
|
||||
is_service_checked=event_cp.is_service_cp if event_cp else False
|
||||
@ -892,7 +900,10 @@ def goal_checkin(request):
|
||||
def calculate_team_score(entry):
|
||||
"""チームのスコアを計算する補助関数"""
|
||||
# チームが通過したチェックポイントを取得
|
||||
checkpoints = GpsLog.objects.filter(entry=entry)
|
||||
checkpoints = GpsLog.objects.filter(
|
||||
zekken_number=entry.team.zekken_number,
|
||||
event_code=entry.event.event_code
|
||||
)
|
||||
|
||||
total_score = 0
|
||||
|
||||
@ -1103,7 +1114,7 @@ def get_checkin_list(request):
|
||||
# チームの存在確認
|
||||
entry = Entry.objects.filter(
|
||||
event=event,
|
||||
zekken_number=zekken_number
|
||||
team__zekken_number=zekken_number
|
||||
).first()
|
||||
|
||||
if not entry:
|
||||
@ -1115,7 +1126,8 @@ def get_checkin_list(request):
|
||||
|
||||
# チェックイン記録を取得
|
||||
checkpoints = GpsLog.objects.filter(
|
||||
entry=entry
|
||||
zekken_number=entry.team.zekken_number,
|
||||
event_code=event_code
|
||||
).order_by('checkin_time')
|
||||
|
||||
# スタート情報を取得
|
||||
|
||||
Reference in New Issue
Block a user