From bba0422efba7aa66ba4e12c4e3322a9b734fcbbc Mon Sep 17 00:00:00 2001 From: Akira Date: Thu, 28 Aug 2025 11:59:46 +0900 Subject: [PATCH] Fix some issues --- rog/serializers.py | 6 +++- rog/urls.py | 3 ++ rog/views_apis/api_supervisor.py | 48 ++++++++++++++++++++++++++++++++ supervisor/html/index.html | 6 ++-- 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 rog/views_apis/api_supervisor.py diff --git a/rog/serializers.py b/rog/serializers.py index 112cdc4..e83cc8f 100755 --- a/rog/serializers.py +++ b/rog/serializers.py @@ -389,6 +389,9 @@ class NewCategorySerializer(serializers.ModelSerializer): class NewEvent2Serializer(serializers.ModelSerializer): # API変更要求書対応: deadline_datetime フィールド追加 deadline_datetime = serializers.DateTimeField(source='deadlineDateTime', read_only=True) + # Supervisor web app compatibility + code = serializers.CharField(source='event_name', read_only=True) + name = serializers.CharField(source='event_name', read_only=True) class Meta: model = NewEvent2 @@ -396,7 +399,8 @@ class NewEvent2Serializer(serializers.ModelSerializer): 'id', 'event_name', 'start_datetime', 'end_datetime', 'deadlineDateTime', 'deadline_datetime', 'status', 'public', 'hour_3', 'hour_5', 'class_general', 'class_family', - 'class_solo_male', 'class_solo_female' + 'class_solo_male', 'class_solo_female', + 'code', 'name' # Supervisor compatibility ] def to_representation(self, instance): diff --git a/rog/urls.py b/rog/urls.py index 3586725..74750f5 100755 --- a/rog/urls.py +++ b/rog/urls.py @@ -19,6 +19,7 @@ from .views_apis.api_bulk_upload import bulk_upload_photos, confirm_checkin_vali from .views_apis.api_admin_validation import get_event_participants_ranking, get_participant_validation_details, get_event_zekken_list from .views_apis.api_simulator import rogaining_simulator from .views_apis.api_test import test_gifuroge,practice +from .views_apis.api_supervisor import get_events_for_supervisor from .app_version_views import app_version_check, AppVersionManagementView from .multi_image_upload_views import multi_image_upload, image_list, image_detail from .gpx_route_views import gpx_test_data, available_routes @@ -39,6 +40,7 @@ from django.conf.urls.static import static router = DefaultRouter() router.register(r'newevent2', views.NewEvent2ViewSet) +router.register(r'events', views.NewEvent2ViewSet) # Alias for newevent2 router.register(prefix='location', viewset=LocationViewSet, basename='location') router.register(prefix='location_line', viewset=Location_lineViewSet, basename="location_line") @@ -141,6 +143,7 @@ urlpatterns += [ # for Supervisor Web app path('events/', views.get_events, name='get_events'), + path('events-supervisor/', get_events_for_supervisor, name='get_events_for_supervisor'), # 新規追加 path('debug/urls/', views.debug_urls, name='debug_urls'), path('zekken_numbers//', views.get_zekken_numbers, name='get_zekken_numbers'), path('team_info//', views.get_team_info, name='get_team_info'), diff --git a/rog/views_apis/api_supervisor.py b/rog/views_apis/api_supervisor.py new file mode 100644 index 0000000..bcab842 --- /dev/null +++ b/rog/views_apis/api_supervisor.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +""" +Supervisor Web App用のAPI +認証なしでアクセス可能 +""" + +from rest_framework.decorators import api_view, permission_classes +from rest_framework.permissions import AllowAny +from rest_framework.response import Response +from rest_framework import status + +from rog.models import NewEvent2 +from rog.serializers import NewEvent2Serializer +import logging + +logger = logging.getLogger(__name__) + +@api_view(['GET']) +@permission_classes([AllowAny]) +def get_events_for_supervisor(request): + """ + Supervisor用のイベント一覧取得API + 認証なし + """ + try: + events = NewEvent2.objects.all() + data = [] + + for event in events: + data.append({ + 'id': event.id, + 'code': event.event_name, + 'name': event.event_name, + 'event_name': event.event_name, + 'start_datetime': event.start_datetime, + 'end_datetime': event.end_datetime, + 'status': event.status, + 'public': event.public + }) + + return Response(data, status=status.HTTP_200_OK) + + except Exception as e: + logger.error(f"Error in get_events_for_supervisor: {str(e)}") + return Response( + {'error': 'イベント取得中にエラーが発生しました'}, + status=status.HTTP_500_INTERNAL_SERVER_ERROR + ) diff --git a/supervisor/html/index.html b/supervisor/html/index.html index b433efc..6c03918 100755 --- a/supervisor/html/index.html +++ b/supervisor/html/index.html @@ -850,7 +850,7 @@ async function loadEventCodes() { console.log('loadEventCodes called'); try { - const apiUrl = `${API_BASE_URL}/events/`; + const apiUrl = `${API_BASE_URL}/events-supervisor/`; console.log('Fetching events from URL:', apiUrl); const response = await fetch(apiUrl, { @@ -876,8 +876,8 @@ data.forEach(event => { const option = document.createElement('option'); - option.value = event.code; - option.textContent = event.name; + option.value = event.event_name; // event_nameを使用 + option.textContent = event.event_name; // event_nameを使用 select.appendChild(option); });