mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 11:11:10 -05:00
Refactor API structure and add comprehensive user management features
- Restructure API v1 with improved serializers organization - Add user deletion requests and moderation queue system - Implement bulk moderation operations and permissions - Add user profile enhancements with display names and avatars - Expand ride and park API endpoints with better filtering - Add manufacturer API with detailed ride relationships - Improve authentication flows and error handling - Update frontend documentation and API specifications
This commit is contained in:
@@ -6,39 +6,43 @@ Enhanced from rogue implementation to maintain full feature parity.
|
||||
"""
|
||||
|
||||
from rest_framework import serializers
|
||||
from drf_spectacular.utils import extend_schema_field, extend_schema_serializer, OpenApiExample
|
||||
from drf_spectacular.utils import (
|
||||
extend_schema_field,
|
||||
extend_schema_serializer,
|
||||
OpenApiExample,
|
||||
)
|
||||
from apps.parks.models import Park, ParkPhoto
|
||||
|
||||
|
||||
@extend_schema_serializer(
|
||||
examples=[
|
||||
OpenApiExample(
|
||||
name='Park Photo with Cloudflare Images',
|
||||
summary='Complete park photo response',
|
||||
description='Example response showing all fields including Cloudflare Images URLs and variants',
|
||||
name="Park Photo with Cloudflare Images",
|
||||
summary="Complete park photo response",
|
||||
description="Example response showing all fields including Cloudflare Images URLs and variants",
|
||||
value={
|
||||
'id': 456,
|
||||
'image': 'https://imagedelivery.net/account-hash/def456ghi789/public',
|
||||
'image_url': 'https://imagedelivery.net/account-hash/def456ghi789/public',
|
||||
'image_variants': {
|
||||
'thumbnail': 'https://imagedelivery.net/account-hash/def456ghi789/thumbnail',
|
||||
'medium': 'https://imagedelivery.net/account-hash/def456ghi789/medium',
|
||||
'large': 'https://imagedelivery.net/account-hash/def456ghi789/large',
|
||||
'public': 'https://imagedelivery.net/account-hash/def456ghi789/public'
|
||||
"id": 456,
|
||||
"image": "https://imagedelivery.net/account-hash/def456ghi789/public",
|
||||
"image_url": "https://imagedelivery.net/account-hash/def456ghi789/public",
|
||||
"image_variants": {
|
||||
"thumbnail": "https://imagedelivery.net/account-hash/def456ghi789/thumbnail",
|
||||
"medium": "https://imagedelivery.net/account-hash/def456ghi789/medium",
|
||||
"large": "https://imagedelivery.net/account-hash/def456ghi789/large",
|
||||
"public": "https://imagedelivery.net/account-hash/def456ghi789/public",
|
||||
},
|
||||
'caption': 'Beautiful park entrance',
|
||||
'alt_text': 'Main entrance gate with decorative archway',
|
||||
'is_primary': True,
|
||||
'is_approved': True,
|
||||
'created_at': '2023-01-01T12:00:00Z',
|
||||
'updated_at': '2023-01-01T12:00:00Z',
|
||||
'date_taken': '2023-01-01T11:00:00Z',
|
||||
'uploaded_by_username': 'parkfan456',
|
||||
'file_size': 1536000,
|
||||
'dimensions': [1600, 900],
|
||||
'park_slug': 'cedar-point',
|
||||
'park_name': 'Cedar Point'
|
||||
}
|
||||
"caption": "Beautiful park entrance",
|
||||
"alt_text": "Main entrance gate with decorative archway",
|
||||
"is_primary": True,
|
||||
"is_approved": True,
|
||||
"created_at": "2023-01-01T12:00:00Z",
|
||||
"updated_at": "2023-01-01T12:00:00Z",
|
||||
"date_taken": "2023-01-01T11:00:00Z",
|
||||
"uploaded_by_username": "parkfan456",
|
||||
"file_size": 1536000,
|
||||
"dimensions": [1600, 900],
|
||||
"park_slug": "cedar-point",
|
||||
"park_name": "Cedar Point",
|
||||
},
|
||||
)
|
||||
]
|
||||
)
|
||||
@@ -76,8 +80,7 @@ class ParkPhotoOutputSerializer(serializers.ModelSerializer):
|
||||
|
||||
@extend_schema_field(
|
||||
serializers.URLField(
|
||||
help_text="Full URL to the Cloudflare Images asset",
|
||||
allow_null=True
|
||||
help_text="Full URL to the Cloudflare Images asset", allow_null=True
|
||||
)
|
||||
)
|
||||
def get_image_url(self, obj):
|
||||
@@ -89,7 +92,7 @@ class ParkPhotoOutputSerializer(serializers.ModelSerializer):
|
||||
@extend_schema_field(
|
||||
serializers.DictField(
|
||||
child=serializers.URLField(),
|
||||
help_text="Available Cloudflare Images variants with their URLs"
|
||||
help_text="Available Cloudflare Images variants with their URLs",
|
||||
)
|
||||
)
|
||||
def get_image_variants(self, obj):
|
||||
@@ -99,10 +102,10 @@ class ParkPhotoOutputSerializer(serializers.ModelSerializer):
|
||||
|
||||
# Common variants for park photos
|
||||
variants = {
|
||||
'thumbnail': f"{obj.image.url}/thumbnail",
|
||||
'medium': f"{obj.image.url}/medium",
|
||||
'large': f"{obj.image.url}/large",
|
||||
'public': f"{obj.image.url}/public"
|
||||
"thumbnail": f"{obj.image.url}/thumbnail",
|
||||
"medium": f"{obj.image.url}/medium",
|
||||
"large": f"{obj.image.url}/large",
|
||||
"public": f"{obj.image.url}/public",
|
||||
}
|
||||
return variants
|
||||
|
||||
|
||||
Reference in New Issue
Block a user