66 lines
3.0 KiB
Python
66 lines
3.0 KiB
Python
|
|
from rest_framework import serializers
|
||
|
|
from .models import FeaturedService
|
||
|
|
|
||
|
|
|
||
|
|
class FeaturedServiceSerializer(serializers.ModelSerializer):
|
||
|
|
"""Serializer for FeaturedService model."""
|
||
|
|
|
||
|
|
category_display = serializers.CharField(source='get_category_display', read_only=True)
|
||
|
|
status_display = serializers.CharField(source='get_publish_status_display', read_only=True)
|
||
|
|
moderator_status_display = serializers.CharField(source='get_moderator_status_display', read_only=True)
|
||
|
|
ai_status_display = serializers.CharField(source='get_ai_status_display', read_only=True)
|
||
|
|
submitter_username = serializers.CharField(source='submitter.username', read_only=True)
|
||
|
|
region_name = serializers.CharField(source='region.name', read_only=True)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = FeaturedService
|
||
|
|
fields = ('id', 'name', 'description', 'region', 'region_name', 'category', 'category_display',
|
||
|
|
'address', 'contact', 'image', 'submitter', 'submitter_username',
|
||
|
|
'moderator_status', 'moderator_status_display', 'moderator_reviewer',
|
||
|
|
'moderator_reviewed_at', 'moderator_rejection_reason',
|
||
|
|
'ai_status', 'ai_status_display', 'ai_reviewed_at', 'ai_rejection_reason',
|
||
|
|
'publish_status', 'status_display', 'published_at', 'created_at', 'updated_at')
|
||
|
|
read_only_fields = ('id', 'submitter', 'moderator_reviewer', 'moderator_reviewed_at',
|
||
|
|
'ai_reviewed_at', 'published_at', 'created_at', 'updated_at')
|
||
|
|
|
||
|
|
|
||
|
|
class FeaturedServiceCreateSerializer(serializers.ModelSerializer):
|
||
|
|
"""Serializer for creating featured services."""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = FeaturedService
|
||
|
|
fields = ('name', 'description', 'region', 'category', 'address', 'contact', 'image')
|
||
|
|
|
||
|
|
def create(self, validated_data):
|
||
|
|
validated_data['submitter'] = self.context['request'].user
|
||
|
|
return super().create(validated_data)
|
||
|
|
|
||
|
|
|
||
|
|
class FeaturedServiceUpdateSerializer(serializers.ModelSerializer):
|
||
|
|
"""Serializer for updating featured services."""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = FeaturedService
|
||
|
|
fields = ('name', 'description', 'category', 'address', 'contact', 'image')
|
||
|
|
|
||
|
|
|
||
|
|
class FeaturedServiceReviewSerializer(serializers.Serializer):
|
||
|
|
"""Serializer for service review actions."""
|
||
|
|
|
||
|
|
action = serializers.ChoiceField(choices=['approve', 'reject'])
|
||
|
|
reason = serializers.CharField(required=False, allow_blank=True)
|
||
|
|
|
||
|
|
|
||
|
|
class FeaturedServiceListSerializer(serializers.ModelSerializer):
|
||
|
|
"""Simplified serializer for service list."""
|
||
|
|
|
||
|
|
category_display = serializers.CharField(source='get_category_display', read_only=True)
|
||
|
|
submitter_username = serializers.CharField(source='submitter.username', read_only=True)
|
||
|
|
region_name = serializers.CharField(source='region.name', read_only=True)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = FeaturedService
|
||
|
|
fields = ('id', 'name', 'category', 'category_display', 'image',
|
||
|
|
'submitter', 'submitter_username', 'region', 'region_name',
|
||
|
|
'publish_status', 'created_at')
|
||
|
|
read_only_fields = ('id', 'created_at')
|