52 lines
1.5 KiB
Python
52 lines
1.5 KiB
Python
# app/api/v1/admin/users.py
|
|
"""
|
|
User management endpoints for admin.
|
|
"""
|
|
|
|
import logging
|
|
from typing import List
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.api.deps import get_current_admin_user
|
|
from app.core.database import get_db
|
|
from app.services.admin_service import admin_service
|
|
from models.schema.auth import UserResponse
|
|
from models.database.user import User
|
|
|
|
router = APIRouter(prefix="/users")
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@router.get("", response_model=List[UserResponse])
|
|
def get_all_users(
|
|
skip: int = Query(0, ge=0),
|
|
limit: int = Query(100, ge=1, le=1000),
|
|
db: Session = Depends(get_db),
|
|
current_admin: User = Depends(get_current_admin_user),
|
|
):
|
|
"""Get all users (Admin only)."""
|
|
users = admin_service.get_all_users(db=db, skip=skip, limit=limit)
|
|
return [UserResponse.model_validate(user) for user in users]
|
|
|
|
|
|
@router.put("/{user_id}/status")
|
|
def toggle_user_status(
|
|
user_id: int,
|
|
db: Session = Depends(get_db),
|
|
current_admin: User = Depends(get_current_admin_user),
|
|
):
|
|
"""Toggle user active status (Admin only)."""
|
|
user, message = admin_service.toggle_user_status(db, user_id, current_admin.id)
|
|
return {"message": message}
|
|
|
|
|
|
@router.get("/stats")
|
|
def get_user_statistics(
|
|
db: Session = Depends(get_db),
|
|
current_admin: User = Depends(get_current_admin_user),
|
|
):
|
|
"""Get user statistics for admin dashboard (Admin only)."""
|
|
return admin_service.get_user_statistics(db)
|