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', ]