Planning/backend/core/serializers.py
Louis Mazin 09ff6dd430 init
2026-10-02 15:54:40 +02:00

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)