feat: add assign_users_to_task function to assign users to tasks on creation

This commit is contained in:
Chneemann 2025-04-02 04:09:29 +02:00
parent 34b7909f7e
commit 7c9cff0802

View file

@ -8,6 +8,8 @@ from .caching import get_cached_task_by_id
from django.core.cache import cache from django.core.cache import cache
from .choices import TaskStatus from .choices import TaskStatus
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from user_app.models import User
from rest_framework.exceptions import APIException
class TaskViewSet(viewsets.ModelViewSet): class TaskViewSet(viewsets.ModelViewSet):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
@ -24,11 +26,15 @@ class TaskViewSet(viewsets.ModelViewSet):
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 serializer.is_valid(): if not serializer.is_valid():
task = serializer.save() return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
cache.delete(f"task_{task.id}")
return Response(serializer.data, status=status.HTTP_201_CREATED) task = serializer.save()
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) self._assign_users_to_task(request.data.get('assigned', []), task)
self._create_subtasks(request.data.get('subtasks', []), task)
cache.delete(f"task_{task.id}")
return Response(serializer.data, status=status.HTTP_201_CREATED)
def destroy(self, request, pk=None): def destroy(self, request, pk=None):
try: try:
@ -39,6 +45,17 @@ class TaskViewSet(viewsets.ModelViewSet):
except Task.DoesNotExist: except Task.DoesNotExist:
return Response({'error': 'Task not found.'}, status=status.HTTP_404_NOT_FOUND) return Response({'error': 'Task not found.'}, status=status.HTTP_404_NOT_FOUND)
def _assign_users_to_task(self, user_ids, task):
users = User.objects.filter(id__in=user_ids)
missing_users = set(user_ids) - set(users.values_list('id', flat=True))
if missing_users:
raise APIException(f"Users not found: {', '.join(missing_users)}")
AssignedTask.objects.bulk_create(
[AssignedTask(user_id=user, task=task) for user in users]
)
@action(detail=True, methods=['patch']) @action(detail=True, methods=['patch'])
def update_status(self, request, pk=None): def update_status(self, request, pk=None):
task = self.get_object() task = self.get_object()
@ -69,3 +86,13 @@ class AssignedTaskViewSet(viewsets.ModelViewSet):
queryset = AssignedTask.objects.all() queryset = AssignedTask.objects.all()
serializer_class = AssignedTaskSerializer serializer_class = AssignedTaskSerializer
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
assigned_task = serializer.save()
cache.delete(f"task_{assigned_task.task.id}")
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)