from rest_framework import serializers from rest_framework.exceptions import ValidationError as DRFValidationError from .models import Client from .services import ClientService class ClientSerializer(serializers.ModelSerializer): class Meta: model = Client fields = [ 'id', 'name', 'client_type', 'tax_id', 'email', 'phone', 'address', 'city', 'postal_code', 'created_at', 'is_active' ] read_only_fields = ['id', 'created_at', 'is_active'] def _get_request_user(self): """ Sigurno dohvaćanje korisnika iz contexta serializer-a. Request iz RequestFactory može biti WSGIRequest bez atributa 'user', zato koristimo getattr. """ request = self.context.get('request') if self.context else None return getattr(request, 'user', None) def create(self, validated_data): """ Delegate creation to service layer. """ try: user = self._get_request_user() return ClientService.create_client(validated_data, user=user) except DRFValidationError: # re-raise as-is raise except Exception as exc: # wrap non-DRF exceptions raise DRFValidationError({"detail": str(exc)}) def update(self, instance, validated_data): """ Delegate update to service layer. """ try: user = self._get_request_user() return ClientService.update_client(instance, validated_data, user=user) except DRFValidationError: raise except Exception as exc: raise DRFValidationError({"detail": str(exc)})