diff options
Diffstat (limited to 'app/auth/register.py')
| -rw-r--r-- | app/auth/register.py | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/app/auth/register.py b/app/auth/register.py index e69de29..f1c3ec3 100644 --- a/app/auth/register.py +++ b/app/auth/register.py @@ -0,0 +1,32 @@ +from app.models.auth import User +from argon2 import PasswordHasher +from fastapi import APIRouter, Depends, HTTPException, status +from sqlalchemy.ext.asyncio import AsyncSession +from sqlalchemy.future import select + +from app.schemas.auth import RegisterSchema +from app.utils.db import get_db + +router = APIRouter() +ph = PasswordHasher() + + +@router.post("/register") +async def register(user: RegisterSchema, db: AsyncSession = Depends(get_db)): + result = await db.execute( + select(User).where( + (User.username == user.username) | (User.email == user.email) + ) + ) + existing = result.scalar_one_or_none() + if existing: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Username or email already exists", + ) + + hashed = ph.hash(user.password) + new_user = User(username=user.username, email=user.email, password_hash=hashed) + db.add(new_user) + await db.commit() + return {"message": "User registered successfully"} |
