feat: add assign_users_to_task function to assign users to tasks on creation
This commit is contained in:
parent
34b7909f7e
commit
7c9cff0802
1 changed files with 33 additions and 6 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue