45 lines
2.3 KiB
Python
45 lines
2.3 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):
|
|
sd = attrs.get("start_date", getattr(self.instance, "start_date", None))
|
|
ed = attrs.get("end_date", getattr(self.instance, "end_date", None))
|
|
st = attrs.get("start_time", getattr(self.instance, "start_time", None))
|
|
et = attrs.get("end_time", getattr(self.instance, "end_time", None))
|
|
if sd and ed and ed < sd:
|
|
raise serializers.ValidationError({"end_date": "La date de fin doit être après la date de début."})
|
|
if st and et and et <= st:
|
|
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)
|