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 typing import Optional
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel, EmailStr, validator
from models import User from models import User
from schemas import UserCreate from database import SessionLocal, engine
from database import get_db from passlib.context import CryptContext
from utils import hash_password
router = APIRouter() router = APIRouter()
@router.post("/signup", response_model=UserCreate, status_code=status.HTTP_201_CREATED) # Password hashing
async def create_user(user: UserCreate, db: Session = Depends(get_db)): 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 Create a new user account
""" """
# Check if user already exists
existing_user = db.query(User).filter(User.email == user.email).first() existing_user = db.query(User).filter(User.email == user.email).first()
if existing_user: if existing_user:
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Email already registered") raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Email already registered")
hashed_password = hash_password(user.password) # Hash the password
new_user = User(email=user.email, password=hashed_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.add(new_user)
db.commit() db.commit()
db.refresh(new_user) db.refresh(new_user)
return new_user return {"message": "User created successfully"}