diff --git a/app/api/endpoints/login.py b/app/api/endpoints/login.py index d4e0471..21a2893 100644 --- a/app/api/endpoints/login.py +++ b/app/api/endpoints/login.py @@ -1,26 +1,51 @@ -from fastapi import APIRouter, Depends, HTTPException, status -from sqlalchemy.orm import Session from typing import Optional +from fastapi import APIRouter, Depends, HTTPException, status +from pydantic import BaseModel, EmailStr, validator from models import User -from schemas import UserCreate -from database import get_db -from utils import hash_password +from database import SessionLocal, engine +from passlib.context import CryptContext router = APIRouter() -@router.post("/signup", response_model=UserCreate, status_code=status.HTTP_201_CREATED) -async def create_user(user: UserCreate, db: Session = Depends(get_db)): +# Password hashing +pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") + +# User model for sign up +class UserCreate(BaseModel): + username: str + email: EmailStr + password: str + + @validator('username') + def username_alphanumeric(cls, v): + assert v.isalnum(), 'Username must be alphanumeric' + return v + +# Helper function to get database session +def get_db(): + db = SessionLocal() + try: + yield db + finally: + db.close() + +@router.post("/signup", status_code=status.HTTP_201_CREATED) +async def signup(user: UserCreate, db: SessionLocal = Depends(get_db)): """ Create a new user account """ + # Check if user already exists existing_user = db.query(User).filter(User.email == user.email).first() if existing_user: raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Email already registered") - hashed_password = hash_password(user.password) - new_user = User(email=user.email, password=hashed_password) + # Hash the password + hashed_password = pwd_context.hash(user.password) + + # Create the new user + new_user = User(username=user.username, email=user.email, hashed_password=hashed_password) db.add(new_user) db.commit() db.refresh(new_user) - return new_user \ No newline at end of file + return {"message": "User created successfully"} \ No newline at end of file