File size: 1,697 Bytes
643a619 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
from fastapi import APIRouter, Depends,HTTPException
from sqlalchemy.orm import Session
from core.database import SessionLocal
from core.models.user import User
from schemas.user import UserCreate,UserLogin
from utils.security import hash_password
from utils.auth import create_access_token # adjust based on your folder structure
from passlib.hash import bcrypt
router = APIRouter(
prefix="/users", # ✅ important for proper routing like /users/signup
tags=["Users"]
)
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
print("✅ users.router loaded")
@router.post("/signup")
def create_user(user: UserCreate, db: Session = Depends(get_db)):
db_user = User(
full_name=user.full_name,
email=user.email,
password=hash_password(user.password), # ⚠️ Should hash password before storing
specialization=user.specialization
)
db.add(db_user)
db.commit()
db.refresh(db_user)
return {"message": "User created successfully", "user_id": db_user.id}
@router.post("/login")
def login(user: UserLogin, db: Session = Depends(get_db)):
db_user = db.query(User).filter(User.email == user.email).first()
if not db_user:
raise HTTPException(status_code=400, detail="Invalid email or password")
if not bcrypt.verify(user.password, db_user.password):
raise HTTPException(status_code=400, detail="Invalid email or password")
# Generate JWT token
token = create_access_token(data={"sub": db_user.email})
return {"access_token": token, "token_type": "bearer", "user_id": db_user.id, "name": db_user.full_name}
|