from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from app.crud.user import ( create_user, delete_user, get_user, get_user_by_email, get_users, update_user, ) from app.db.session import get_db from app.schemas.user import User, UserCreate, UserUpdate router = APIRouter() @router.get("/", response_model=list[User]) def read_users(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): """Get all users with pagination""" users = get_users(db, skip=skip, limit=limit) return users @router.get("/{user_id}", response_model=User) def read_user(user_id: int, db: Session = Depends(get_db)): """Get a specific user by ID""" db_user = get_user(db, user_id=user_id) if db_user is None: raise HTTPException(status_code=404, detail="User not found") return db_user @router.post("/", response_model=User, status_code=status.HTTP_201_CREATED) def create_user_endpoint(user: UserCreate, db: Session = Depends(get_db)): """Create a new user""" db_user = get_user_by_email(db, email=user.email) if db_user: raise HTTPException(status_code=400, detail="Email already registered") return create_user(db=db, user=user) @router.put("/{user_id}", response_model=User) def update_user_endpoint(user_id: int, user_update: UserUpdate, db: Session = Depends(get_db)): """Update an existing user""" db_user = update_user(db, user_id=user_id, user_update=user_update) if db_user is None: raise HTTPException(status_code=404, detail="User not found") return db_user @router.delete("/{user_id}") def delete_user_endpoint(user_id: int, db: Session = Depends(get_db)): """Delete a user""" success = delete_user(db, user_id=user_id) if not success: raise HTTPException(status_code=404, detail="User not found") return {"message": "User deleted successfully"}