This commit is contained in:
48
backend/modules/task_management/services.py
Normal file
48
backend/modules/task_management/services.py
Normal file
@@ -0,0 +1,48 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user