Hindimovieslink !!exclusive!! May 2026
-- 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" );
# ------------------------------------------------- # 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) hindimovieslink
def upsert_rating(db: Session, user_id: int, movie_id: int, payload: schemas.RatingIn): rating = ( db.query(models.UserRating) .filter_by(user_id=user_id, movie_id=movie_id) .first() ) if rating: rating.rating = payload.rating rating.review_text = payload.review_text else: rating = models.UserRating( user_id=user_id, movie_id=movie_id, rating=payload.rating, review_text=payload.review_text, ) db.add(rating) -- OTT Links (one movie can have many
class MovieDetail(MovieOut): description: Optional[str] genre: List[str] = [] director: Optional[str] cast: List[str] = [] links: List[LinkOut] = [] name TEXT NOT NULL
CREATE TABLE movie_links ( id BIGSERIAL PRIMARY KEY, movie_id BIGINT REFERENCES movies(id) ON DELETE CASCADE, platform_id BIGINT REFERENCES platforms(id), url TEXT NOT NULL, price_usd NUMERIC(5,2), price_local NUMERIC(5,2), currency TEXT, is_free BOOLEAN DEFAULT FALSE, last_checked TIMESTAMP, UNIQUE(movie_id, platform_id) );
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()