mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 07:11:08 -05:00
- Implemented PrimeProgress component with support for labels, helper text, and various styles (size, variant, color). - Created PrimeSelect component with dropdown functionality, custom templates, and validation states. - Developed PrimeSkeleton component for loading placeholders with different shapes and animations. - Updated index.ts to export new components for easy import. - Enhanced PrimeVueTest.vue to include tests for new components and their functionalities. - Introduced a custom ThrillWiki theme for PrimeVue with tailored color schemes and component styles. - Added ambient type declarations for various components to improve TypeScript support.
87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
from rest_framework import serializers
|
|
from drf_spectacular.utils import extend_schema_field
|
|
from apps.accounts.models import UserProfile, TopList, TopListItem
|
|
from apps.accounts.serializers import UserSerializer # existing shared user serializer
|
|
|
|
|
|
class UserProfileCreateInputSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = UserProfile
|
|
fields = "__all__"
|
|
|
|
|
|
class UserProfileUpdateInputSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = UserProfile
|
|
fields = "__all__"
|
|
extra_kwargs = {"user": {"read_only": True}}
|
|
|
|
|
|
class UserProfileOutputSerializer(serializers.ModelSerializer):
|
|
user = UserSerializer(read_only=True)
|
|
avatar_url = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = UserProfile
|
|
fields = "__all__"
|
|
|
|
@extend_schema_field(serializers.URLField(allow_null=True))
|
|
def get_avatar_url(self, obj) -> str | None:
|
|
"""Get user avatar URL"""
|
|
# Safely try to return an avatar url if present
|
|
avatar = getattr(obj, "avatar", None)
|
|
if avatar:
|
|
return getattr(avatar, "url", None)
|
|
user_profile = getattr(obj, "user", None)
|
|
if user_profile and getattr(user_profile, "profile", None):
|
|
avatar = getattr(user_profile.profile, "avatar", None)
|
|
if avatar:
|
|
return getattr(avatar, "url", None)
|
|
return None
|
|
|
|
|
|
class TopListItemCreateInputSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TopListItem
|
|
fields = "__all__"
|
|
|
|
|
|
class TopListItemUpdateInputSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TopListItem
|
|
fields = "__all__"
|
|
# allow updates, adjust as needed
|
|
extra_kwargs = {"top_list": {"read_only": False}}
|
|
|
|
|
|
class TopListItemOutputSerializer(serializers.ModelSerializer):
|
|
# Remove the ride field since it doesn't exist on the model
|
|
# The model likely uses a generic foreign key or different field name
|
|
|
|
class Meta:
|
|
model = TopListItem
|
|
fields = "__all__"
|
|
|
|
|
|
class TopListCreateInputSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TopList
|
|
fields = "__all__"
|
|
|
|
|
|
class TopListUpdateInputSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TopList
|
|
fields = "__all__"
|
|
# user is set by view's perform_create
|
|
extra_kwargs = {"user": {"read_only": True}}
|
|
|
|
|
|
class TopListOutputSerializer(serializers.ModelSerializer):
|
|
user = UserSerializer(read_only=True)
|
|
items = TopListItemOutputSerializer(many=True, read_only=True)
|
|
|
|
class Meta:
|
|
model = TopList
|
|
fields = "__all__"
|