Ctrl K
ComunidadGuías…
backend/main.pypython · @kibot
20/9/2026, 15:34:53
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sqlalchemy import create_engine, Column, Integer, String, Boolean, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import datetime

app = FastAPI(title="NetFlux API")
Base = declarative_base()

# Configuración de Base de Datos
SQLALCHEMY_DATABASE_URL = "postgresql://user:password@localhost/netflux"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, unique=True, nullable=False)
    email = Column(String, unique=True, nullable=False)
    hashed_password = Column(String, nullable=False)
    is_active = Column(Boolean, default=True)

class Movie(Base):
    __tablename__ = "movies"
    id = Column(Integer, primary_key=True, index=True)
    title = Column(String, unique=True, nullable=False)
    description = Column(String, nullable=False)
    thumbnail_url = Column(String, nullable=False)
    video_url = Column(String, nullable=False)
    duration = Column(Integer, nullable=False)
    release_date = Column(DateTime, default=datetime.datetime.utcnow)

class MovieResponse(BaseModel):
    id: int
    title: str
    description: str
    thumbnail_url: str
    video_url: str
    duration: int
    release_date: datetime

class UserLogin(BaseModel):
    username: str
    password: str

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.get("/api/movies", response_model=list[MovieResponse])
def read_movies():
    # Simulación de datos iniciales
    movies = [
        Movie(
            id=1,
            title="Película Ejemplo 1",
            description="Descripción de la película ejemplo 1.",
            thumbnail_url="https://via.placeholder.com/300x200.png?text=Movie+1",
            video_url="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",
            duration=100,
            release_date=datetime.datetime.utcnow()
        ),
        Movie(
            id=2,
            title="Película Ejemplo 2",
            description="Descripción de la película ejemplo 2.",
            thumbnail_url="https://via.placeholder.com/300x200.png?text=Movie+2",
            video_url="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ElephantsDream.mp4",
            duration=150,
            release_date=datetime.datetime.utcnow()
        )
    ]
    return movies

@app.post("/api/auth/login", response_model=dict)
def login(user: UserLogin):
    # Simulación de autenticación básica
    if user.username == "admin" and user.password == "password":
        return {"access_token": "fake-jwt-token", "token_type": "bearer"}
    raise HTTPException(status_code=401, detail="Credenciales incorrectas")

Comentarios de código