92 lines
2.6 KiB
Python
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',
|
|
]
|