from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from pydantic import BaseModel from ..database import get_db from .. import models from ..auth import hash_password, verify_password, create_access_token router = APIRouter() class UserCreate(BaseModel): username: str password: str class Token(BaseModel): access_token: str token_type: str @router.post("/register", status_code=status.HTTP_201_CREATED) def register(user_in: UserCreate, db: Session = Depends(get_db)): existing = db.query(models.User).filter(models.User.username == user_in.username).first() if existing: raise HTTPException(status_code=400, detail="Username already taken") user = models.User( username=user_in.username, password=hash_password(user_in.password), ) db.add(user) db.commit() return {"message": "User created"} @router.post("/login", response_model=Token) def login(user_in: UserCreate, db: Session = Depends(get_db)): user = db.query(models.User).filter(models.User.username == user_in.username).first() if not user or not verify_password(user_in.password, user.password): raise HTTPException(status_code=401, detail="Invalid credentials") token = create_access_token({"sub": user.username}) return {"access_token": token, "token_type": "bearer"}