from django.db import transaction from rest_framework import serializers from core.apps.tasks.models.comment import Comment from core.apps.tasks.models.task import Task class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = [ 'id', 'message', 'file', 'type', 'created_by' ] def get_created_by(self, obj): request = self.context.get('request') return { "id": obj.created_by.id, "first_name": obj.created_by.first_name, "last_name": obj.created_by.last_name, "avatar": request.build_absolute_uri(obj.created_by.avatar.url) if obj.created_by.avatar else None } class CommentCreateSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = [ 'id', 'message', 'file', 'type', 'task' ] def validate(self, data): task = Task.objects.filter(id=data['task']).first() if not task: raise serializers.ValidationError("Task not found") data['task'] = task return data def create(self, validated_data): with transaction.atomic(): task = validated_data.pop('task') comment = Comment.objects.create(task=task, created_by=self.context['request'].user, **validated_data) return comment