# backend/modules/task_management/views.py import logging from rest_framework import viewsets, permissions from rest_framework.exceptions import ValidationError from .models import Task from .serializers import TaskSerializer from .services import TaskService # Postavljanje loggera za modul logger = logging.getLogger(__name__) class TaskViewSet(viewsets.ModelViewSet): """ ViewSet koji koristi TaskService za rukovanje operacijama. """ serializer_class = TaskSerializer permission_classes = [permissions.IsAuthenticated] def get_queryset(self): qs = Task.objects.filter(is_active=True).select_related( 'assigned_to', 'vehicle', 'work_order', 'work_order__vehicle' ) vehicle_id = self.request.query_params.get('vehicle') if vehicle_id: qs = qs.filter(vehicle_id=vehicle_id) return qs def perform_create(self, serializer): """ Umjesto direktnog serializer.save(), pozivamo servis. Proslijeđujemo validirane podatke (dict) i korisnika. """ try: entry = TaskService.create_task_entry( data=serializer.validated_data, user=self.request.user) serializer.instance = entry except ValidationError as e: # Ponovno podižemo iznimku kako bi DRF ispravno vratio 400 Bad Request logger.warning(f"Validacijska greška pri kreiranju zadatka od strane {self.request.user}: {e}") raise e def perform_update(self, serializer): """ Servis obavlja biznis logiku (validaciju/modifikaciju), a serializer.save() finalizira zapis. """ # Servis sada samo modificira instancu u memoriji TaskService.update_task_entry( instance=serializer.instance, data=serializer.validated_data, user=self.request.user ) # Sada DRF sigurno sprema izmijenjenu instancu serializer.save() def perform_destroy(self, instance): """ Umjesto fizičkog brisanja, radimo soft-delete ako je potrebno. """ instance.is_active = False instance.save() logger.info(f"Zapis zadatka {instance.id} je deaktiviran od strane {self.request.user}")