from fastapi import APIRouter, Depends, HTTPException, status from fastapi.security import OAuth2PasswordRequestForm from sqlalchemy.orm import Session from app.core.database import get_db from app.core.security import hash_password, verify_password, create_access_token from app.models import User from app.schemas import UserCreate, UserOut, Token router = APIRouter(prefix="/auth", tags=["auth"]) @router.post("/register", response_model=UserOut, status_code=201) def register(data: UserCreate, db: Session = Depends(get_db)): if db.query(User).filter(User.username == data.username).first(): raise HTTPException(400, "Brugernavnet er allerede i brug") if db.query(User).filter(User.email == data.email).first(): raise HTTPException(400, "E-mailen er allerede i brug") user = User( username=data.username, email=data.email, password_hash=hash_password(data.password), ) db.add(user) db.commit() db.refresh(user) return user @router.post("/login", response_model=Token) def login(form: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)): user = db.query(User).filter(User.username == form.username).first() if not user or not verify_password(form.password, user.password_hash): raise HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Forkert brugernavn eller kodeord", ) token = create_access_token({"sub": user.id}) return {"access_token": token}