class RatingOut(BaseModel): average: float count: int
-- 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() ); hindimovieslink
-- 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" ); title TEXT NOT NULL
CREATE EXTENSION IF NOT EXISTS pg_trgm; CREATE INDEX idx_movies_title_trgm ON movies USING gin (title gin_trgm_ops); from fastapi import FastAPI, Depends, HTTPException, Query from pydantic import BaseModel from typing import List, Optional from sqlalchemy.orm import Session import models, crud, schemas, auth imdb_id TEXT UNIQUE
# ------------------------------------------------- # 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)