diff --git a/rog/views.py b/rog/views.py index 1fcb28b..294483c 100755 --- a/rog/views.py +++ b/rog/views.py @@ -1053,7 +1053,9 @@ class CheckinImageViewSet(viewsets.ModelViewSet): # parser_classes = (MultiPartParser, JSONParser) def get_queryset(self): + logger.info(f"CheckinImageViewSet: get_queryset called by user {self.request.user}") queryset = CheckinImages.objects.all() + logger.info(f"CheckinImageViewSet: returning {queryset.count()} checkin images") # dist = self.request.GET.get('dist') # if dist != None : # queryset = Incident.objects.filter(entity=dist, is_approved=True) @@ -1061,6 +1063,27 @@ class CheckinImageViewSet(viewsets.ModelViewSet): # queryset = Incident.objects.filter(is_approved=True) return queryset + def create(self, request, *args, **kwargs): + logger.info(f"CheckinImageViewSet: create called by user {request.user}") + logger.info(f"CheckinImageViewSet: request data = {request.data}") + + response = super().create(request, *args, **kwargs) + + if response.status_code == 201: + logger.info(f"CheckinImageViewSet: checkin image created successfully, ID = {response.data.get('id')}") + else: + logger.error(f"CheckinImageViewSet: failed to create checkin image, status = {response.status_code}") + + return response + + def update(self, request, *args, **kwargs): + logger.info(f"CheckinImageViewSet: update called by user {request.user} for ID {kwargs.get('pk')}") + return super().update(request, *args, **kwargs) + + def destroy(self, request, *args, **kwargs): + logger.info(f"CheckinImageViewSet: delete called by user {request.user} for ID {kwargs.get('pk')}") + return super().destroy(request, *args, **kwargs) + class RetrieveUserView(generics.RetrieveAPIView): queryset = CustomUser.objects.all() @@ -1122,14 +1145,28 @@ def UserMakeActionViewset(request): wanttogo = True if request.GET.get('wanttogo') == "true" else False like = True if request.GET.get('like') == "true" else False checkin = True if request.GET.get('checkin') == "true" else False + + logger.info(f"UserMakeActionViewset: user_id={user_id}, location_id={location_id}") + logger.info(f"UserMakeActionViewset: wanttogo={wanttogo}, like={like}, checkin={checkin}") + location = Location2025.objects.get(location_id=location_id) user = CustomUser.objects.get(id=user_id) + + logger.info(f"UserMakeActionViewset: user={user.email}, location={location.location_name}") + #action = Useractions.objects.filter(location__id=location_id, user__id=user_id) rec = Useractions.objects.filter(user=user, location=location) if(rec): + logger.info(f"UserMakeActionViewset: updating existing action record") obj = rec.update(wanttogo=wanttogo, like=like, checkin=checkin) + if checkin: + logger.info(f"UserMakeActionViewset: CHECKIN UPDATED for user {user.email} at location {location.location_name}") else: + logger.info(f"UserMakeActionViewset: creating new action record") obj, created = Useractions.objects.update_or_create(user=user, location=location, wanttogo=wanttogo, like=like, checkin=checkin) + if checkin and created: + logger.info(f"UserMakeActionViewset: NEW CHECKIN CREATED for user {user.email} at location {location.location_name}") + serializer = UseractionsSerializer(obj, many=False) return JsonResponse(serializer.data, safe=False) @@ -2594,15 +2631,15 @@ def get_zekken_numbers(request, event_code): # 通過審査画面用: GpsCheckinテーブルから過去の移行データと新規Entryテーブルの両方をサポート try: - print(f"=== get_zekken_numbers called with event_code: {event_code} ===") + logger.info(f"GET_ZEKKEN_NUMBERS: called with event_code: {event_code} by user {request.user.email if request.user.is_authenticated else 'Anonymous'}") # event_codeからNewEvent2のIDを取得 try: event_obj = NewEvent2.objects.get(event_code=event_code) event_id = event_obj.id - print(f"Found event: {event_obj.event_name} (ID: {event_id})") + logger.info(f"GET_ZEKKEN_NUMBERS: Found event: {event_obj.event_name} (ID: {event_id})") except NewEvent2.DoesNotExist: - print(f"No event found with event_code: {event_code}, trying legacy data only") + logger.warning(f"GET_ZEKKEN_NUMBERS: No event found with event_code: {event_code}, trying legacy data only") event_id = None entry_list = [] @@ -2620,7 +2657,7 @@ def get_zekken_numbers(request, event_code): ).values_list('zekken_label', flat=True).order_by('zekken_number') entry_list = list(entries) - print(f"Entry table found {len(entry_list)} records: {entry_list[:10]}") + logger.info(f"GET_ZEKKEN_NUMBERS: Entry table found {len(entry_list)} records") # GpsCheckinテーブルからも検索(過去の移行データ) gps_checkins = GpsCheckin.objects.filter( @@ -2629,7 +2666,7 @@ def get_zekken_numbers(request, event_code): ).values_list('zekken', flat=True).distinct().order_by('zekken') gps_list = list(gps_checkins) - print(f"GpsCheckin table found {len(gps_list)} records: {gps_list[:10]}") + logger.info(f"GET_ZEKKEN_NUMBERS: GpsCheckin table found {len(gps_list)} records") # 両方の結果をマージして重複を除去 all_zekken_numbers = entry_list + gps_list @@ -2791,15 +2828,15 @@ def get_checkins(request, *args, **kwargs): zekken_number = kwargs['zekken_number'] if not zekken_number: - logger.debug(f"=== Zekken_number is required.") + logger.error(f"GET_CHECKINS: zekken_number is required") return Response({"error": "zekken_number is required"}, status=400) event_code = kwargs['event_code'] if not event_code: - logger.debug(f"=== event_code is required.") + logger.error(f"GET_CHECKINS: event_code is required") return Response({"error": "event_code is required"}, status=400) - logger.debug(f"=== Searching for zekken={zekken_number}, event_code={event_code}") + logger.info(f"GET_CHECKINS: Searching for zekken={zekken_number}, event_code={event_code} by user {request.user.email if request.user.is_authenticated else 'Anonymous'}") # チーム情報を取得 entry = None @@ -2819,7 +2856,7 @@ def get_checkins(request, *args, **kwargs): try: entry = Entry.objects.select_related('team','event').get(zekken_number=zekken_number) except (Entry.DoesNotExist, ValueError): - logger.warning(f"Entry not found for zekken: {zekken_number}") + logger.warning(f"GET_CHECKINS: Entry not found for zekken: {zekken_number}") entry = None # チェックインデータの取得とCP情報の結合 @@ -2828,7 +2865,7 @@ def get_checkins(request, *args, **kwargs): event_code=event_code ).order_by('serial_number') - logger.debug(f"=== Found {checkins.count()} checkins") + logger.info(f"GET_CHECKINS: Found {checkins.count()} checkins for zekken {zekken_number}") data = [] for c in checkins: @@ -2900,6 +2937,7 @@ def get_checkins(request, *args, **kwargs): }) #logger.debug(f"data={data}") + logger.info(f"GET_CHECKINS: Returning {len(data)} checkin records for zekken {zekken_number}, event {event_code}") return Response(data) except Exception as e: @@ -2915,7 +2953,7 @@ def update_checkins(request): try: with transaction.atomic(): update_base = request.data - logger.info(f"Processing update data: {update_base}") + logger.info(f"UPDATE_CHECKINS: Processing update data for zekken {update_base.get('zekken_number')}, event {update_base.get('event_code')} by user {request.user.email if request.user.is_authenticated else 'Anonymous'}") zekken_number = update_base['zekken_number'] event_code = update_base['event_code'] @@ -2924,7 +2962,7 @@ def update_checkins(request): if 'id' in update and int(update['id']) > 0: try: checkin = GpsCheckin.objects.get(id=update['id']) - logger.info(f"Updating existing checkin: {checkin}") + logger.info(f"UPDATE_CHECKINS: Updating existing checkin ID {update['id']} - CP {update.get('cp_number')}, validation: {update.get('validation')}, points: {update.get('points')}") # 既存レコードの更新 checkin.serial_number = update['order'] @@ -2934,16 +2972,16 @@ def update_checkins(request): # checkin.update_at = timezone.now() チェックイン時刻は更新しない checkin.update_user = request.user.email if request.user.is_authenticated else None checkin.save() - logger.info(f"Updated existing checkin result: {checkin}") + logger.info(f"UPDATE_CHECKINS: Successfully updated checkin ID {checkin.id} for zekken {zekken_number}") except GpsCheckin.DoesNotExist: - logger.error(f"Checkin with id {update['id']} not found") + logger.error(f"UPDATE_CHECKINS: Checkin with id {update['id']} not found for zekken {zekken_number}") continue # エラーを無視して次のレコードの処理を継続 # 新規レコードの作成 for update in update_base['checkins']: if 'id' in update and int(update['id']) == 0: - logger.info(f"Creating new checkin: {update}") + logger.info(f"UPDATE_CHECKINS: Creating new checkin for CP {update.get('cp_number')}, validation: {update.get('validation')}, points: {update.get('points')}") try: checkin = GpsCheckin.objects.create( zekken=zekken_number, @@ -2958,10 +2996,10 @@ def update_checkins(request): create_user=request.user.email if request.user.is_authenticated else None, update_user=request.user.email if request.user.is_authenticated else None ) - logger.info(f"Created new checkin: {checkin}") + logger.info(f"UPDATE_CHECKINS: Successfully created new checkin ID {checkin.id} for zekken {zekken_number}, CP {checkin.cp_number}") except Exception as e: - logger.error(f"Error creating new checkin: {str(e)}") + logger.error(f"UPDATE_CHECKINS: Error creating new checkin for zekken {zekken_number}: {str(e)}") continue # エラーを無視して次のレコードの処理を継続 # 更新後のデータを順序付けて取得 @@ -2989,17 +3027,16 @@ def update_checkins_old(request): try: with transaction.atomic(): update_base = request.data - logger.info(f"Processing update data: {update_base}") + logger.info(f"UPDATE_CHECKINS_OLD: Processing update data for zekken {update_base.get('zekken_number')}, event {update_base.get('event_code')} by user {request.user.email if request.user.is_authenticated else 'Anonymous'}") zekken_number = update_base['zekken_number'] event_code = update_base['event_code'] for update in update_base['checkins']: if 'id' in update and int(update['id'])>0: # 既存レコードの更新 - logger.info(f"Updating existing checkin : {update}") + logger.info(f"UPDATE_CHECKINS_OLD: Updating existing checkin ID {update['id']} - CP {update.get('cp_number')}") try: checkin = GpsCheckin.objects.get(id=update['id']) - logger.info(f"Updating existing checkin: {checkin}") # 既存レコードの更新 checkin.serial_number = update['order'] @@ -3007,10 +3044,10 @@ def update_checkins_old(request): checkin.validate_location = update.get('validation', False) checkin.points = update.get('points', 0) checkin.save() - logger.info(f"Updated existing checkin result: {checkin}") + logger.info(f"UPDATE_CHECKINS_OLD: Successfully updated checkin ID {checkin.id} for zekken {zekken_number}") except GpsCheckin.DoesNotExist: - logger.error(f"Checkin with id {update['id']} not found") + logger.error(f"UPDATE_CHECKINS_OLD: Checkin with id {update['id']} not found for zekken {zekken_number}") return Response( {"error": f"Checkin with id {update['id']} not found"}, status=status.HTTP_404_NOT_FOUND @@ -3018,7 +3055,7 @@ def update_checkins_old(request): for update in update_base['checkins']: if 'id' in update and int(update['id'])==0: # 新規レコードの作成 - logger.info("Creating new checkin:{update}") + logger.info(f"UPDATE_CHECKINS_OLD: Creating new checkin for CP {update.get('cp_number')}, validation: {update.get('validation')}") try: checkin = GpsCheckin.objects.create( zekken=update_base['zekken_number'],