fix: task creation by automatically setting the creator field to the authenticated user

This commit is contained in:
Chneemann 2025-04-11 12:08:48 +02:00
parent 1f3f16a1f3
commit 7c96da524b
2 changed files with 21 additions and 8 deletions

View file

@ -26,4 +26,8 @@ class TaskSerializer(serializers.ModelSerializer):
read_only_fields = ['id', 'creator', 'created_at'] read_only_fields = ['id', 'creator', 'created_at']
renderer_classes = [CamelCaseJSONRenderer] renderer_classes = [CamelCaseJSONRenderer]
parser_classes = [CamelCaseJSONParser] parser_classes = [CamelCaseJSONParser]
def create(self, validated_data):
validated_data['creator'] = self.context['request'].user
return super().create(validated_data)

View file

@ -17,31 +17,40 @@ class TaskViewSet(viewsets.ModelViewSet):
def retrieve(self, request, pk=None): def retrieve(self, request, pk=None):
task = get_cached_task_by_id(pk) task = get_cached_task_by_id(pk)
serializer = self.get_serializer(task)
if not task: if not task:
return Response({'error': 'Task not found.'}, status=status.HTTP_404_NOT_FOUND) return Response({'error': 'Task not found.'}, status=status.HTTP_404_NOT_FOUND)
serializer = self.get_serializer(task)
return Response(serializer.data) return Response(serializer.data)
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data) serializer = self.get_serializer(data=request.data)
if not serializer.is_valid(): if not serializer.is_valid():
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
task = serializer.save() try:
assign_users_to_task(request.data.get('assignees', []), task) task = serializer.save()
except Exception as e:
return Response({"error": f"Task creation failed: {str(e)}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
assignees_data = request.data.get('assignees', [])
if assignees_data:
assign_users_to_task(assignees_data, task)
subtasks_data = request.data.get("subtasks", []) subtasks_data = request.data.get("subtasks", [])
if subtasks_data: if subtasks_data:
create_subtasks(subtasks_data, task) create_subtasks(subtasks_data, task)
cache.delete(f"task_{task.id}") cache.delete(f"task_{task.id}")
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
def update(self, request, *args, **kwargs): def update(self, request, *args, **kwargs):
task = self.get_object() task = self.get_object()
serializer = self.get_serializer(task, data=request.data, partial=True) serializer = self.get_serializer(task, data=request.data, partial=True)
if not serializer.is_valid(): if not serializer.is_valid():
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)