Hindimovieslink //free\\ Online

# ------------------------------------------------- # 5️⃣ Notification subscription (price‑drop) # ------------------------------------------------- @app.post("/me/alerts", response_model=schemas.AlertOut) def create_price_alert( payload: schemas.AlertIn, user: models.User = Depends(auth.get_current_user), db: Session = Depends(auth.get_db) ): return crud.create_price_alert(db, user.id, payload) class MovieOut(BaseModel): id: int title: str year: Optional[int] poster_url: Optional[str] rating_imdb: Optional[float]

-- OTT Links (one movie can have many platforms) CREATE TABLE platforms ( id BIGSERIAL PRIMARY KEY, name TEXT NOT NULL, logo_url TEXT, affiliate_template TEXT -- e.g. "https://partner.com/checkout?movie=imdb_id" ); hindimovieslink

# ------------------------------------------------- # 1️⃣ Search Movies # ------------------------------------------------- @app.get("/search", response_model=List[schemas.MovieOut]) def search_movies( q: str = Query(..., description="Search term"), genre: Optional[str] = None, year: Optional[int] = None, limit: int = 20, db: Session = Depends(auth.get_db) ): """ Full‑text / trigram fuzzy search on title + optional filters. """ return crud.search_movies(db, q, genre, year, limit) user: models.User = Depends(auth.get_current_user)

class PlatformOut(BaseModel): name: str logo_url: Optional[str] name TEXT NOT NULL

# ------------------------------------------------- # 2️⃣ Get Movie Details + Links # ------------------------------------------------- @app.get("/movies/movie_id", response_model=schemas.MovieDetail) def get_movie(movie_id: int, db: Session = Depends(auth.get_db)): movie = crud.get_movie_with_links(db, movie_id) if not movie: raise HTTPException(status_code=404, detail="Movie not found") return movie

def search_movies(db: Session, q: str, genre: str = None, year: int = None, limit: int = 20): stmt = db.query(models.Movie).filter( models.Movie.title.ilike(f"%q%") | func.similarity(models.Movie.title, q) > 0.3 ) if genre: stmt = stmt.filter(models.Movie.genre.contains([genre])) if year: stmt = stmt.filter(models.Movie.year == year) return stmt.limit(limit).all()