Spotix-API / backend /app /api /user_routes.py
Anish
[UI/UX] Added Account deletion, with some new features too.
a16341c
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"])
@router.post("/register")
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
}
@router.delete("/delete")
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))