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 )