# backend/modules/task_management/services.py from .models import Task from rest_framework.exceptions import ValidationError from django.core.exceptions import ValidationError as DjangoValidationError import logging logger = logging.getLogger(__name__) class TaskService: @staticmethod def create_task_entry(data: dict, user=None) -> Task: """ Univerzalna metoda: prihvaća podatke i opcionalnog korisnika. """ # Poslovna pravila if data.get('status') == 'DONE' and (user and not user.is_staff): raise ValidationError({"status": "Samo admini mogu odmah označiti zadatak kao gotov."}) payload = dict(data) if user and 'assigned_to' not in payload: payload['assigned_to'] = user entry = Task(**payload) try: entry.full_clean() except DjangoValidationError as exc: logger.error(f"Neuspješna validacija zadatka: {exc}") raise ValidationError(exc.message_dict if hasattr(exc, 'message_dict') else exc.messages) entry.save() logger.info(f"Zadatak uspješno kreiran: {entry.id}") return entry @staticmethod def update_task_entry(instance, data, user): # Validacija za update (npr. samo vlasnik ili admin smije ažurirati) if not user.is_staff and instance.assigned_to != user: raise ValidationError("Nemate dozvolu za izmjenu ovog zadatka.") # Spremanje for attr, value in data.items(): setattr(instance, attr, value) try: instance.full_clean() except DjangoValidationError as exc: raise ValidationError(exc.message_dict if hasattr(exc, 'message_dict') else exc.messages) instance.save() return instance