This commit is contained in:
73
backend/core/users/serializers.py
Normal file
73
backend/core/users/serializers.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from rest_framework import serializers
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from .models import CustomUser
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
assigned_vehicle = serializers.SerializerMethodField()
|
||||
assigned_crane = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = CustomUser
|
||||
fields = ['id', 'email', 'first_name', 'last_name', 'is_serviser', 'is_kupac', 'is_team_member', 'telefon', 'oib', 'occupation', 'residence', 'work_position', 'client_profile', 'assigned_vehicle', 'assigned_crane']
|
||||
read_only_fields = ['id', 'email']
|
||||
extra_kwargs = {
|
||||
'first_name': {'required': True, 'allow_blank': False}
|
||||
}
|
||||
|
||||
def _get_assigned_asset(self, obj):
|
||||
try:
|
||||
return obj.assigned_vehicles
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
|
||||
def _serialize_asset(self, vehicle):
|
||||
if not vehicle:
|
||||
return None
|
||||
return {
|
||||
'id': vehicle.id,
|
||||
'asset_type': vehicle.asset_type,
|
||||
'registration_number': vehicle.registration_number,
|
||||
'make': vehicle.make,
|
||||
'model': vehicle.model,
|
||||
'current_mileage': vehicle.current_mileage,
|
||||
'service_interval_km': vehicle.service_interval_km,
|
||||
}
|
||||
|
||||
def get_assigned_vehicle(self, obj):
|
||||
return self._serialize_asset(self._get_assigned_asset(obj))
|
||||
|
||||
def get_assigned_crane(self, obj):
|
||||
return self._serialize_asset(self._get_assigned_asset(obj))
|
||||
|
||||
def validate(self, data):
|
||||
"""
|
||||
Provodi poslovnu logiku na razini serializer-a.
|
||||
"""
|
||||
is_kupac = data.get('is_kupac')
|
||||
client_profile = data.get('client_profile')
|
||||
|
||||
# Logika: Ako je kupac, mora imati profil
|
||||
if is_kupac and not client_profile:
|
||||
raise serializers.ValidationError({
|
||||
"client_profile": "Korisnik označen kao kupac mora imati dodijeljen klijentski profil."
|
||||
})
|
||||
|
||||
# Logika: Ako ima profil, trebao bi biti kupac (opcionalno, ali preporučeno)
|
||||
if client_profile and not is_kupac:
|
||||
raise serializers.ValidationError({
|
||||
"is_kupac": "Korisnik s dodijeljenim klijentskim profilom mora biti označen kao kupac."
|
||||
})
|
||||
|
||||
return data
|
||||
|
||||
|
||||
class TeamMemberSerializer(serializers.ModelSerializer):
|
||||
full_name = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = CustomUser
|
||||
fields = ['id', 'email', 'full_name', 'is_team_member']
|
||||
read_only_fields = fields
|
||||
|
||||
def get_full_name(self, obj):
|
||||
return obj.get_full_name() or obj.email
|
||||
Reference in New Issue
Block a user