mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-27 08:47:03 -05:00
feat: Add blog, media, and support apps, implement ride credits and image API, and remove toplist feature.
This commit is contained in:
@@ -18,6 +18,7 @@ from apps.accounts.models import (
|
||||
NotificationPreference,
|
||||
)
|
||||
from apps.lists.models import UserList
|
||||
from apps.rides.models.credits import RideCredit
|
||||
from apps.core.choices.serializers import RichChoiceFieldSerializer
|
||||
|
||||
UserModel = get_user_model()
|
||||
@@ -66,6 +67,8 @@ class UserProfileSerializer(serializers.ModelSerializer):
|
||||
|
||||
avatar_url = serializers.SerializerMethodField()
|
||||
avatar_variants = serializers.SerializerMethodField()
|
||||
total_credits = serializers.SerializerMethodField()
|
||||
unique_parks = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = UserProfile
|
||||
@@ -87,8 +90,19 @@ class UserProfileSerializer(serializers.ModelSerializer):
|
||||
"water_ride_credits",
|
||||
"unit_system",
|
||||
"location",
|
||||
"total_credits",
|
||||
"unique_parks",
|
||||
]
|
||||
read_only_fields = ["profile_id", "avatar_url", "avatar_variants"]
|
||||
read_only_fields = ["profile_id", "avatar_url", "avatar_variants", "total_credits", "unique_parks"]
|
||||
|
||||
def get_total_credits(self, obj):
|
||||
"""Get the total number of ride credits."""
|
||||
return RideCredit.objects.filter(user=obj.user).count()
|
||||
|
||||
def get_unique_parks(self, obj):
|
||||
"""Get the number of unique parks visited."""
|
||||
# This assumes RideCredit -> Ride -> Park relationship
|
||||
return RideCredit.objects.filter(user=obj.user).values("ride__park").distinct().count()
|
||||
|
||||
def get_avatar_url(self, obj):
|
||||
"""Get the avatar URL with fallback to default letter-based avatar."""
|
||||
@@ -167,6 +181,25 @@ class CompleteUserSerializer(serializers.ModelSerializer):
|
||||
read_only_fields = ["user_id", "date_joined", "role"]
|
||||
|
||||
|
||||
class PublicUserSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
Public user serializer for viewing other users' profiles.
|
||||
Only exposes public information.
|
||||
"""
|
||||
profile = UserProfileSerializer(read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = [
|
||||
"user_id",
|
||||
"username",
|
||||
"date_joined",
|
||||
"role",
|
||||
"profile",
|
||||
]
|
||||
read_only_fields = fields
|
||||
|
||||
|
||||
# === USER SETTINGS SERIALIZERS ===
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user