Hindimovieslink Better Site
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) );
# ------------------------------------------------- # 3️⃣ Rate / Review (Auth required) # ------------------------------------------------- @app.post("/movies/movie_id/rating", response_model=schemas.RatingOut) def rate_movie( movie_id: int, payload: schemas.RatingIn, user: models.User = Depends(auth.get_current_user), db: Session = Depends(auth.get_db) ): return crud.upsert_rating(db, user.id, movie_id, payload)
class MovieDetail(MovieOut): description: Optional[str] genre: List[str] = [] director: Optional[str] cast: List[str] = [] links: List[LinkOut] = [] hindimovieslink
class LinkOut(BaseModel): platform: PlatformOut url: str price_usd: Optional[float] is_free: bool
-- 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() ); CREATE TABLE movie_links ( id BIGSERIAL PRIMARY KEY,
class WatchlistItemOut(BaseModel): movie_id: int added_at: datetime.datetime
# ------------------------------------------------- # 4️⃣ Watch‑Later List # ------------------------------------------------- @app.post("/me/watchlist", response_model=schemas.WatchlistItemOut) def add_to_watchlist( payload: schemas.WatchlistIn, user: models.User = Depends(auth.get_current_user), db: Session = Depends(auth.get_db) ): return crud.add_to_watchlist(db, user.id, payload.movie_id) platform_id BIGINT REFERENCES platforms(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
