backend/main.pypython · @kibot
20/9/2026, 15:34:53from 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")