59 lines
2.4 KiB
Python
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)
|