Planning/backend/planning/serializers.py
Louis Mazin 6a18a3caff clean
2026-10-02 17:10:37 +02:00

59 lines
2.4 KiB
Python

from rest_framework import serializers
from .models import AvailabilityRequest, ScheduleEntry
class ScheduleEntrySerializer(serializers.ModelSerializer):
status_label = serializers.CharField(source='get_status_display', read_only=True)
class Meta:
model = ScheduleEntry
fields = '__all__'
read_only_fields = ['created_at', 'updated_at']
def validate(self, attrs):
start_date = attrs.get('start_date', getattr(self.instance, 'start_date', None))
end_date = attrs.get('end_date', getattr(self.instance, 'end_date', None))
start_time = attrs.get('start_time', getattr(self.instance, 'start_time', None))
end_time = attrs.get('end_time', getattr(self.instance, 'end_time', None))
if start_date and end_date and end_date < start_date:
raise serializers.ValidationError({'end_date': 'La date de fin doit être après la date de début.'})
if start_time and end_time and end_time <= start_time:
raise serializers.ValidationError({'end_time': "L'heure de fin doit être après l'heure de début."})
return attrs
class AvailabilityRequestCreateSerializer(serializers.ModelSerializer):
class Meta:
model = AvailabilityRequest
fields = ['guest_name', 'message']
def validate_guest_name(self, value):
value = value.strip()
if len(value) < 2:
raise serializers.ValidationError('Indique ton prénom ou ton nom.')
return value
class AvailabilityRequestPublicSerializer(serializers.ModelSerializer):
status_label = serializers.CharField(source='get_status_display', read_only=True)
class Meta:
model = AvailabilityRequest
fields = [
'public_token', 'guest_name', 'message', 'status', 'status_label',
'duration_minutes', 'available_until', 'response_message',
'requested_at', 'responded_at',
]
class AvailabilityRequestAdminSerializer(AvailabilityRequestPublicSerializer):
class Meta(AvailabilityRequestPublicSerializer.Meta):
fields = ['id'] + AvailabilityRequestPublicSerializer.Meta.fields
class AvailabilityResponseSerializer(serializers.Serializer):
status = serializers.ChoiceField(choices=['accepted', 'refused'])
duration_minutes = serializers.IntegerField(required=False, allow_null=True, min_value=1, max_value=1440)
response_message = serializers.CharField(required=False, allow_blank=True, max_length=500)