65 lines
2.2 KiB
Python
65 lines
2.2 KiB
Python
# 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}")
|