Hindimovieslink — |verified|

class Config: orm_mode = True

-- 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" );

# Re‑calculate aggregate agg = ( db.query( func.avg(models.UserRating.rating).label('avg'), func.count(models.UserRating.id).label('cnt') ) .filter(models.UserRating.movie_id == movie_id) .one() ) db.query(models.Movie).filter_by(id=movie_id).update( "rating_user_avg": agg.avg, "rating_user_cnt": agg.cnt ) db.commit() return "average": agg.avg, "count": agg.cnt | Source | Access Method | Frequency | Example fields | |--------|----------------|-----------|----------------| | Official OTT APIs (Netflix, Amazon Prime, Disney+, SonyLIV, ZEE5) | Partner API / OAuth (most give catalogue feeds) | Daily | title, imdb_id, price, url, region | | JustWatch / Reelgood (licensed aggregator) | Paid JSON API (covers 60+ platforms) | Hourly | platform, price, is_free | | YouTube Movies | YouTube Data API (search for movie trailer + “full movie”) – filter by movie/film content‑type hindimovieslink

-- Movies CREATE TABLE movies ( id BIGSERIAL PRIMARY KEY, title TEXT NOT NULL, year INT, description TEXT, poster_url TEXT, imdb_id TEXT UNIQUE, runtime_minutes INT, language TEXT, genre TEXT[], director TEXT, cast TEXT[], rating_imdb NUMERIC(2,1), rating_user_avg NUMERIC(2,1) DEFAULT 0, rating_user_cnt INT DEFAULT 0, created_at TIMESTAMP DEFAULT now() );

class RatingIn(BaseModel): rating: int # 1‑5 review_text: Optional[str] = None class Config: orm_mode = True -- OTT Links

# ------------------------------------------------- # 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

-- User Ratings CREATE TABLE user_ratings ( id BIGSERIAL PRIMARY KEY, user_id BIGINT REFERENCES users(id) ON DELETE CASCADE, movie_id BIGINT REFERENCES movies(id) ON DELETE CASCADE, rating SMALLINT CHECK (rating BETWEEN 1 AND 5), review_text TEXT, created_at TIMESTAMP DEFAULT now(), UNIQUE(user_id, movie_id) ); name TEXT NOT NULL

class WatchlistIn(BaseModel): movie_id: int