2026-09-25 17:50:02 +02:00

55 lines
2.0 KiB
Python

from rest_framework import serializers
from .models import Event
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = [
'id', 'created_by', 'start_date', 'end_date',
'start_time', 'end_time', 'color', 'name',
'description', 'is_public', 'created_at', 'updated_at',
]
read_only_fields = ['id', 'created_by', 'created_at', 'updated_at']
class EventCreateSerializer(serializers.ModelSerializer):
color = serializers.RegexField(
r'^#[0-9a-fA-F]{6}$', required=False,
allow_null=True, allow_blank=True,
)
class Meta:
model = Event
fields = [
'start_date', 'end_date', 'start_time', 'end_time',
'color', 'name', 'description', 'is_public',
]
def validate(self, attrs):
request = self.context.get('request')
if not getattr(getattr(request, 'user', None), 'is_admin', False):
# En création comme en PATCH, les événements non-admin restent privés.
attrs['is_public'] = False
values = {
field: attrs.get(field, getattr(self.instance, field, None))
for field in ('start_date', 'end_date', 'start_time', 'end_time')
}
if values['start_date'] is None or values['end_date'] is None:
raise serializers.ValidationError('Les dates de début et de fin sont requises.')
if values['end_date'] < values['start_date']:
raise serializers.ValidationError({'end_date': 'La fin doit suivre le début.'})
if (
values['start_date'] == values['end_date']
and values['start_time'] is not None
and values['end_time'] is not None
and values['end_time'] <= values['start_time']
):
raise serializers.ValidationError({'end_time': 'La fin doit suivre le début.'})
return attrs
class EventUpdateSerializer(EventCreateSerializer):
pass