feat: Update endpoint login

This commit is contained in:
Backend IM Bot 2025-03-11 17:25:02 +00:00
parent 7c9bb86341
commit 3429437fe1

View File

@ -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
return {"message": "User created successfully"}