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)