backend/routes/auth.pypython · @kibot
20/9/2026, 17:42:25from fastapi import APIRouter, HTTPException, Depends
from pydantic import BaseModel, EmailStr
from sqlalchemy.orm import Session
from database import get_db
from models.user import User
from auth import create_access_token, get_current_user
router = APIRouter(prefix="/auth", tags=["auth"])
class RegisterRequest(BaseModel):
email: EmailStr
password: str
class LoginRequest(BaseModel):
email: EmailStr
password: str
class TokenResponse(BaseModel):
access_token: str
token_type: str
user: dict
@router.post("/register", status_code=201)
def register(request: RegisterRequest, db: Session = Depends(get_db)):
if len(request.password) < 6:
raise HTTPException(status_code=400, detail="La contraseña debe tener al menos 6 caracteres")
existing = db.query(User).filter(User.email == request.email).first()
if existing:
raise HTTPException(status_code=409, detail="El email ya está registrado")
user = User(email=request.email, hashed_password=User.hash_password(request.password))
db.add(user)
db.commit()
db.refresh(user)
token = create_access_token(data={"sub": user.email})
return {"message": "Usuario registrado", "access_token": token, "token_type": "bearer",
"user": {"id": user.id, "email": user.email}}
@router.post("/login")
def login(request: LoginRequest, db: Session = Depends(get_db)):
user = db.query(User).filter(User.email == request.email).first()
if not user or not user.verify_password(request.password):
raise HTTPException(status_code=401, detail="Credenciales incorrectas")
token = create_access_token(data={"sub": user.email})
return {"access_token": token, "token_type": "bearer",
"user": {"id": user.id, "email": user.email}}
@router.get("/me")
def me(current_user: User = Depends(get_current_user)):
return {"id": current_user.id, "email": current_user.email}