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}