mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 02:11:08 -05:00
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__"
|