binge / app /main.py
triflix's picture
Upload 13 files
3bb5d2e verified
from fastapi import FastAPI, Request, Query
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
from pathlib import Path
from .models import Movie
from .data import movie_data
app = FastAPI(title="Binge")
# Create static directory if it doesn't exist
static_dir = Path("static")
static_dir.mkdir(exist_ok=True)
(static_dir / "css").mkdir(exist_ok=True)
# Mount static files
app.mount("/static", StaticFiles(directory=str(static_dir)), name="static")
# Templates
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def home(request: Request, search: str | None = Query(None)):
if search:
filtered_movies = [
movie for movie in movie_data
if search.lower() in movie.title.lower() or
(movie.description and search.lower() in movie.description.lower())
]
else:
filtered_movies = movie_data
return templates.TemplateResponse(
"index.html",
{"request": request, "movies": filtered_movies, "search": search}
)
@app.get("/movie/{movie_id}")
async def movie_detail(request: Request, movie_id: int):
if 0 <= movie_id < len(movie_data):
return templates.TemplateResponse(
"movie.html",
{"request": request, "movie": movie_data[movie_id]}
)
return {"error": "Movie not found"}