Spaces:
Running
Running
| from fastapi import Header, Request, APIRouter, Depends, HTTPException, BackgroundTasks | |
| from sqlalchemy.orm import Session | |
| from app.schemas.user_schema import UserCreate | |
| from app.services.user_service import create_user | |
| from app.db.session import get_db | |
| from app.services.email_service import send_verification_email | |
| from app.security.turnstile import verify_turnstile_token | |
| from app.core.auth_dependancy import get_current_user | |
| from app.models.user_model import User | |
| from app.services.user_service import delete_user_account | |
| router = APIRouter(prefix="/users", tags=["Users"]) | |
| async def register( | |
| request: Request, | |
| user: UserCreate, | |
| background_tasks: BackgroundTasks, | |
| cf_turnstile_response: str = Header(None, alias="cf-turnstile-response"), | |
| db: Session = Depends(get_db) | |
| ): | |
| client_ip = request.client.host | |
| await verify_turnstile_token(cf_turnstile_response, client_ip) | |
| try: | |
| new_user, raw_token = create_user( | |
| db, | |
| email=user.email, | |
| username=user.username, | |
| password=user.password | |
| ) | |
| except ValueError as e: | |
| if str(e) == "email_exists": | |
| raise HTTPException(status_code=400, detail="email/user already exists") | |
| if str(e) == "username_exists": | |
| raise HTTPException(status_code=400, detail="Username is already taken") | |
| raise HTTPException(status_code=400, detail=str(e)) | |
| if raw_token: | |
| background_tasks.add_task(send_verification_email, new_user.email, raw_token) | |
| return { | |
| "message": "User Created Successfully! Please check your email to verify.", | |
| "user_id": new_user.id | |
| } | |
| def delete_account( | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user) | |
| ): | |
| try: | |
| delete_user_account(db, current_user.id) | |
| return {"message": "Account successfully deleted"} | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) |