Portal/rsconcept/backend/apps/prompt/serializers/data_access.py
2025-07-13 17:58:32 +03:00

40 lines
1.5 KiB
Python

''' Serializers for prompt template data access. '''
from rest_framework import serializers
from shared import messages as msg
from ..models import PromptTemplate
class PromptTemplateSerializer(serializers.ModelSerializer):
'''Serializer for PromptTemplate, enforcing permissions and ownership logic.'''
class Meta:
''' serializer metadata. '''
model = PromptTemplate
fields = ['id', 'owner', 'is_shared', 'label', 'description', 'text']
read_only_fields = ['id', 'owner']
def validate_label(self, value):
user = self.context['request'].user
if PromptTemplate.objects.filter(owner=user, label=value).exists():
raise serializers.ValidationError(msg.promptLabelTaken(value))
return value
def validate_is_shared(self, value):
user = self.context['request'].user
if value and not (user.is_superuser or user.is_staff):
raise serializers.ValidationError(msg.promptSharedPermissionDenied())
return value
def create(self, validated_data):
validated_data['owner'] = self.context['request'].user
return super().create(validated_data)
def update(self, instance, validated_data):
user = self.context['request'].user
if 'is_shared' in validated_data:
if validated_data['is_shared'] and not (user.is_superuser or user.is_staff):
raise serializers.ValidationError(msg.promptSharedPermissionDenied())
return super().update(instance, validated_data)