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:
13
api/urls.py
13
api/urls.py
@@ -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"
|
||||
),
|
||||
]
|
||||
35
api/views.py
35
api/views.py
@@ -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
|
||||
})
|
||||
Reference in New Issue
Block a user