Files
boxofficefantasy/api/serializers.py
Anthony Correa 5e08fdc9a2 Add user state updates and bidding error handling in draft consumers
- Implement user state tracking and broadcasting on connect/disconnect and phase changes
- Add bid start and place rejection handling with error messages to frontend and backend
- Enhance movie serializer with TMDB integration and update relevant frontend components
2025-08-24 17:16:22 -05:00

77 lines
2.7 KiB
Python

from rest_framework import serializers
from django.contrib.auth import get_user_model
from boxofficefantasy.models import Movie, Season
from draft.models import DraftSession, DraftSessionSettings, DraftPick
from boxofficefantasy.integrations.tmdb import get_tmdb_movie_by_imdb
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
full_name = serializers.SerializerMethodField()
class Meta:
model = User
fields = ("username", "first_name", "last_name", "email", "full_name")
def get_full_name(self, obj):
return f"{obj.first_name} {obj.last_name}".strip()
class MovieSerializer(serializers.ModelSerializer):
tmdb_data = serializers.SerializerMethodField()
def get_tmdb_data(self, obj):
if hasattr(obj, 'imdb_id') and obj.imdb_id:
tmdb_movie = get_tmdb_movie_by_imdb(obj.imdb_id)
if tmdb_movie:
poster_url = None
if tmdb_movie.get('poster_path'):
poster_url = f"{tmdb_movie['poster_path']}"
return {
'id': tmdb_movie.get('id'),
'title': tmdb_movie.get('title'),
'overview': tmdb_movie.get('overview'),
'poster_url': tmdb_movie['poster_url'],
'release_date': tmdb_movie.get('release_date'),
}
return None
class Meta:
model = Movie
# fields = ("id", "imdb_id", "title", "year", "poster_url")
fields = ("id", "title", "tmdb_data")
class DraftSessionSettingsSerializer(serializers.ModelSerializer):
class Meta:
model = DraftSessionSettings
fields = ("starting_budget",) # add any others you have
class DraftPickSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
movie = MovieSerializer(read_only=True)
class Meta:
model = DraftPick
fields = ("id", "movie", "winner", "bid_amount")
class DraftSessionSerializer(serializers.ModelSerializer):
participants = UserSerializer(many=True, read_only=True)
movies = MovieSerializer(many=True, read_only=True)
settings = DraftSessionSettingsSerializer(read_only=True)
draft_picks = DraftPickSerializer(many=True, read_only=True)
def hashid(self, obj):
return f"{obj.hashid}".strip()
class Meta:
model = DraftSession
# include whatever else you want (phase, season info, hashed_id, etc.)
fields = (
"id",
"hashid",
"season", # will use __str__ unless you customize
"participants",
"movies",
"settings",
"draft_picks",
# optionally include server time for client clock sync
)