feat: Allow registered users to sign up guests via new + GAST button

This commit is contained in:
Richard
2026-08-01 12:37:56 +02:00
parent b0e727e4a5
commit d9280c3078
6 changed files with 86 additions and 58 deletions
+6 -7
View File
@@ -341,7 +341,7 @@ class ShiftSignupView(views.APIView):
signup = ShiftSignup.objects.create(shift=shift, user=user)
return Response({'message': 'Erfolgreich für Schicht eingetragen.', 'signup_id': signup.id}, status=status.HTTP_201_CREATED)
# Guest flow for visitors
# Guest flow for visitors or registered users adding a guest
else:
if not guest_name:
return Response({'error': 'Bitte gib einen Namen an.'}, status=status.HTTP_400_BAD_REQUEST)
@@ -350,24 +350,23 @@ class ShiftSignupView(views.APIView):
if not is_manager and shift.required_skills.exists():
required_names = ", ".join([s.name for s in shift.required_skills.all()])
return Response({
'error': f'Gäste können keine Fähigkeiten haben. Diese Schicht erfordert: {required_names}. Bitte registriere ein Konto mit den passenden Fähigkeiten.'
'error': f'Gäste können keine Fähigkeiten haben. Diese Schicht erfordert: {required_names}. Ein Gast kann nur durch den Veranstaltungs-Manager/Admin eingetragen werden.'
}, status=status.HTTP_400_BAD_REQUEST)
if not request.session.session_key:
request.session.create()
session_key = request.session.session_key
request.session['guest_name'] = guest_name
if ShiftSignup.objects.filter(shift=shift, guest_session_key=session_key).exists():
return Response({'error': 'Du bist mit deiner Gast-Sitzung bereits für diese Schicht eingetragen.'}, status=status.HTTP_400_BAD_REQUEST)
import uuid
guest_session_key = f"user_{user.id}_guest_{uuid.uuid4().hex[:6]}" if user else session_key
signup = ShiftSignup.objects.create(
shift=shift,
guest_name=guest_name,
guest_session_key=session_key
guest_session_key=guest_session_key
)
return Response({
'message': f'Gast "{guest_name}" erfolgreich eingetragen!',
'message': f'Gast "{guest_name}" wurde erfolgreich eingetragen!',
'signup_id': signup.id
}, status=status.HTTP_201_CREATED)