from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from app.database import get_db from app.models.user import User from app.models.user_profile import UserProfile from app.schemas.user import UserCreate, UserResponse from app.security import hash_password router = APIRouter(prefix="/auth", tags=["auth"]) @router.post("/register", response_model=UserResponse, status_code=status.HTTP_201_CREATED) def register(data: UserCreate, db: Session = Depends(get_db)): existing = db.query(User).filter( (User.email == data.email) | (User.username == data.username) ).first() if existing: raise HTTPException( status_code=status.HTTP_409_CONFLICT, detail={"message": "Email or username already registered"}, ) user = User( email=data.email, username=data.username, password=hash_password(data.password), ) db.add(user) db.flush() try: profile = UserProfile( user_id=user.id, full_name=data.full_name, phone=data.phone, timezone=data.timezone, ) db.add(profile) db.commit() except: db.rollback() raise db.refresh(user) return user