simple-rbac/routes/users.py
2025-01-22 15:02:07 +08:00

56 lines
2.0 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List, Optional
from schemas.auth import TokenPayload
from schemas.user import UserCreate, UserUpdate, UserResponse, UserRole
from routes.depends import get_current_user,get_current_admin
import services.user as user_service
from services.db import get_db_session_dep
router = APIRouter(tags=["users"])
@router.get("/", response_model=List[UserResponse])
async def get_users_list(
page: int = 1,
limit: int = 100,
role: Optional[str] = None,
current_user_token: TokenPayload = Depends(get_current_user),
session: AsyncSession = Depends(get_db_session_dep)
):
skip = (page - 1) * limit
users = await user_service.get_users_list(session, skip=skip, limit=limit)
if role:
users = [user for user in users if user.role == role]
return users
@router.post("/", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
async def create_user(
user_data: UserCreate,
current_user_token: TokenPayload = Depends(get_current_admin),
session: AsyncSession = Depends(get_db_session_dep)
):
return await user_service.create_user(session, user_data)
@router.put("/{user_id}", response_model=UserResponse)
async def update_user(
user_id: int,
user_data: UserUpdate,
current_user_token: TokenPayload = Depends(get_current_admin),
session: AsyncSession = Depends(get_db_session_dep)
):
return await user_service.update_user(session, user_id, user_data)
@router.delete("/{user_id}", status_code=status.HTTP_204_NO_CONTENT)
async def delete_user(
user_id: int,
current_user_token: TokenPayload = Depends(get_current_admin),
session: AsyncSession = Depends(get_db_session_dep)
):
success = await user_service.delete_user(session, user_id)
if not success:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="User not found"
)