Add movie detail API and enhance draft admin/participant UI

- Introduced `/api/movie/<id>/detail` endpoint returning TMDB data for a movie.
- Moved draft detail fetching logic into `common/utils.js` for reuse.
- Updated Draft Admin panel:
  - Added phase navigation buttons with bootstrap icons.
  - Improved layout with refresh and status controls.
- Updated Draft Participant panel:
  - Added movie pool display with links to movie details.
- Added bootstrap-icons stylesheet and corresponding SCSS styles for new UI.
This commit is contained in:
2025-08-08 15:12:40 -05:00
parent 9b6b3391e6
commit 24700071ed
8 changed files with 186 additions and 101 deletions

View File

@@ -1,9 +1,18 @@
from rest_framework.routers import DefaultRouter
from .views import UserViewSet, MovieViewSet, DraftSessionViewSet
from .views import UserViewSet, MovieViewSet, DraftSessionViewSet, movie_detail
from django.urls import path
router = DefaultRouter()
router.register(r'users', UserViewSet, basename='user')
router.register(r'movies', MovieViewSet, basename='movie')
router.register(r'draft', DraftSessionViewSet, basename='draft')
urlpatterns = router.urls
urlpatterns = [
*router.urls,
path(
"movie/<int:movie_id>/detail",
movie_detail,
name="movie-detail"
),
]

View File

@@ -4,6 +4,9 @@ from django.contrib.auth import get_user_model
from boxofficefantasy.models import Movie
from draft.models import DraftSession, DraftPick
from django.shortcuts import get_object_or_404
from rest_framework.response import Response
from boxofficefantasy.integrations.tmdb import get_tmdb_movie_by_imdb
from rest_framework.decorators import api_view
from django.db.models import Prefetch
@@ -57,4 +60,34 @@ class DraftSessionViewSet(viewsets.ReadOnlyModelViewSet):
"movies",
Prefetch("draft_picks", queryset=DraftPick.objects.select_related("winner", "movie")),
)
)
)
@api_view(["GET"])
def movie_detail(request, movie_id):
"""
GET /api/movie/{movie_id}/detail
Returns TMDB movie details
and the movie is in that session.
"""
# Lookup DraftSession by hashid or pk
# draft_session = get_object_or_404(DraftSession, hashid=draft_session_id)
# # Ensure requesting user is a participant
# if request.user not in draft_session.participants.all():
# return Response({"detail": "Not authorized for this draft session."},
# status=status.HTTP_403_FORBIDDEN)
# # Get movie in this session
movie = get_object_or_404(Movie, pk=movie_id)
# Call TMDB integration
tmdb_data = get_tmdb_movie_by_imdb(movie.imdb_id)
if not tmdb_data:
return Response({"detail": "Movie details not found."},
status=404)
return Response({
"id": movie.id,
"title": movie.title,
"tmdb": tmdb_data
})