Louis Mazin d424689e12 big maj
2026-09-24 19:35:37 +02:00

92 lines
2.6 KiB
Python

from rest_framework import serializers
from .models import Event
from users.serializers import UserSerializer
class EventSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
linked_user = UserSerializer(read_only=True)
class Meta:
model = Event
fields = [
'id',
'user',
'linked_user',
'start_date',
'end_date',
'start_time',
'end_time',
'color',
'name',
'description',
'visibility',
'created_at',
'updated_at',
]
read_only_fields = [
'id',
'user',
'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 = [
'linked_user',
'start_date',
'end_date',
'start_time',
'end_time',
'color',
'name',
'description',
'visibility',
]
def validate(self, attrs):
values = {
field: attrs.get(field, getattr(self.instance, field, None))
for field in ('start_date', 'end_date', 'start_time', 'end_time')
}
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
def create(self, validated_data):
request = self.context.get('request')
if request is None or not request.user.is_authenticated:
raise serializers.ValidationError({
'user': 'Un utilisateur authentifié est requis.'
})
validated_data['user'] = request.user
return Event.objects.create(**validated_data)
class EventUpdateSerializer(EventCreateSerializer):
class Meta:
model = Event
fields = [
'linked_user',
'start_date',
'end_date',
'start_time',
'end_time',
'color',
'name',
'description',
'visibility',
]