- 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
77 lines
2.7 KiB
Python
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
|
|
) |