50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
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)}) |