41 lines
1.7 KiB
Python
41 lines
1.7 KiB
Python
import logging
|
|
from rest_framework import viewsets, permissions
|
|
from rest_framework.exceptions import ValidationError
|
|
from .models import Client
|
|
from .serializers import ClientSerializer
|
|
from .services import ClientService
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ClientViewSet(viewsets.ModelViewSet):
|
|
queryset = Client.objects.filter(is_active=True)
|
|
serializer_class = ClientSerializer
|
|
permission_classes = [permissions.IsAuthenticated]
|
|
|
|
def perform_create(self, serializer):
|
|
try:
|
|
instance = serializer.save()
|
|
serializer.instance = instance
|
|
except ValidationError as e:
|
|
logger.warning(f"Validation error creating client by {self.request.user}: {e}")
|
|
raise e
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error creating client: {e}", exc_info=True)
|
|
raise ValidationError({"detail": "Došlo je do greške pri stvaranju klijenta."})
|
|
|
|
def perform_update(self, serializer):
|
|
try:
|
|
instance = serializer.save()
|
|
serializer.instance = instance
|
|
except ValidationError as e:
|
|
logger.warning(f"Validation error updating client by {self.request.user}: {e}")
|
|
raise e
|
|
except Exception as e:
|
|
logger.error(f"Unexpected error updating client: {e}", exc_info=True)
|
|
raise ValidationError({"detail": "Došlo je do greške pri ažuriranju klijenta."})
|
|
|
|
def perform_destroy(self, instance):
|
|
# Delegate deletion (soft-delete) to service layer
|
|
ClientService.delete_client(instance, user=self.request.user)
|
|
logger.info(f"Client {instance.id} soft-deleted by {self.request.user}") |