File size: 1,461 Bytes
3bb5d2e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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"}