Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, Depends, HTTPException | |
| from sqlalchemy.orm import Session | |
| from database import get_db | |
| from models import User, UserCreate, UserUpdate, UserResponse, PasswordReset | |
| from auth import hash_password, get_current_admin | |
| router = APIRouter(prefix="/admin", tags=["admin"]) | |
| def list_users( | |
| db: Session = Depends(get_db), | |
| _: User = Depends(get_current_admin), | |
| ): | |
| return db.query(User).order_by(User.created_at).all() | |
| def create_user( | |
| user_in: UserCreate, | |
| db: Session = Depends(get_db), | |
| _: User = Depends(get_current_admin), | |
| ): | |
| if db.query(User).filter(User.username == user_in.username).first(): | |
| raise HTTPException(status_code=400, detail="Username already exists.") | |
| if user_in.email and db.query(User).filter(User.email == user_in.email).first(): | |
| raise HTTPException(status_code=400, detail="Email already in use.") | |
| user = User( | |
| username=user_in.username, | |
| full_name=user_in.full_name, | |
| email=user_in.email, | |
| hashed_password=hash_password(user_in.password), | |
| is_admin=user_in.is_admin, | |
| is_active=True, | |
| ) | |
| db.add(user) | |
| db.commit() | |
| db.refresh(user) | |
| return user | |
| def update_user( | |
| user_id: int, | |
| user_in: UserUpdate, | |
| db: Session = Depends(get_db), | |
| current: User = Depends(get_current_admin), | |
| ): | |
| user = db.query(User).filter(User.id == user_id).first() | |
| if not user: | |
| raise HTTPException(status_code=404, detail="User not found.") | |
| for field, value in user_in.model_dump(exclude_unset=True).items(): | |
| setattr(user, field, value) | |
| db.commit() | |
| db.refresh(user) | |
| return user | |
| def reset_password( | |
| user_id: int, | |
| body: PasswordReset, | |
| db: Session = Depends(get_db), | |
| _: User = Depends(get_current_admin), | |
| ): | |
| user = db.query(User).filter(User.id == user_id).first() | |
| if not user: | |
| raise HTTPException(status_code=404, detail="User not found.") | |
| if not body.new_password or len(body.new_password) < 6: | |
| raise HTTPException(status_code=400, detail="Password must be at least 6 characters.") | |
| user.hashed_password = hash_password(body.new_password) | |
| db.commit() | |
| db.refresh(user) | |
| return user | |
| def delete_user( | |
| user_id: int, | |
| db: Session = Depends(get_db), | |
| current: User = Depends(get_current_admin), | |
| ): | |
| if user_id == current.id: | |
| raise HTTPException(status_code=400, detail="You cannot delete your own account.") | |
| user = db.query(User).filter(User.id == user_id).first() | |
| if not user: | |
| raise HTTPException(status_code=404, detail="User not found.") | |
| db.delete(user) | |
| db.commit() | |