import csv import io from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from .models import Player, User from tournaments.models import Tournament, Registration from .serializers import PlayerSerializer, PlayerImportDataSerializer class PlayerListView(APIView): """Listet alle Spieler auf.""" def get(self, request): players = Player.objects.all() serializer = PlayerSerializer(players, many=True) return Response(serializer.data) class PlayerImportView(APIView): """ Importiert Spieler aus Moodle-CSV. Erwartet ein POST mit JSON: { "csv_data": "...", "tournament_id": 1 } """ def post(self, request): serializer = PlayerImportDataSerializer(data=request.data) if not serializer.is_valid(): return Response(serializer.errors, status=400) csv_string = serializer.validated_data['csv_data'] tournament_id = serializer.validated_data['tournament_id'] # Ziel-Turnier finden try: tournament = Tournament.objects.get(id=tournament_id) except Tournament.DoesNotExist: return Response({"error": "Turnier nicht gefunden"}, status=404) created_count = 0 existing_count = 0 # CSV parsen (Moodle nutzt Semikolon als Separator) csv_file = io.StringIO(csv_string) reader = csv.reader(csv_file, delimiter=';') next(reader, None) # Überspringe Header-Zeile for row in reader: if len(row) < 5: continue last_name = row[0].strip() first_name = row[1].strip() email = row[2].strip() # city = row[3] (optional) club = row[4].strip() # Die Moodle-Gruppe/Klasse als "Verein" if not first_name or not last_name: continue # 1. Spieler anlegen oder aktualisieren player, created = Player.objects.update_or_create( defaults={'club': club}, first_name=first_name, last_name=last_name ) if created: created_count += 1 else: existing_count += 1 # 2. Spieler ins Turnier registrieren (Registration anlegen) Registration.objects.get_or_create( tournament=tournament, player=player ) # Optional: Falls ein Login-Wunsch besteht und keine User existiert: if email and not User.objects.filter(username=email).exists(): User.objects.create_user( username=email, email=email, password='schach1234' # Default-Passwort für Moodle-Imports ) return Response({ "message": "Import abgeschlossen", "created_players": created_count, "updated_players": existing_count }, status=201)