85 lines
2.9 KiB
Python
85 lines
2.9 KiB
Python
"""
|
|
User 路由
|
|
"""
|
|
from typing import List
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from tortoise.exceptions import DoesNotExist, IntegrityError
|
|
|
|
from app.models.user import User
|
|
from app.schemas.user import UserCreate, UserUpdate, UserResponse
|
|
from app.services.user_service import UserService
|
|
from app.api.dependencies import get_db
|
|
|
|
router = APIRouter()
|
|
|
|
@router.get("/", response_model=List[UserResponse], summary="获取用户列表")
|
|
async def read_users(
|
|
skip: int = 0,
|
|
limit: int = 100,
|
|
db=Depends(get_db)
|
|
):
|
|
"""获取用户列表"""
|
|
users = await UserService.get_all_users(skip, limit)
|
|
return users
|
|
|
|
@router.post("/", response_model=UserResponse, status_code=status.HTTP_201_CREATED, summary="创建用户")
|
|
async def create_user(user_data: UserCreate, db=Depends(get_db)):
|
|
"""创建新用户"""
|
|
# 检查用户名是否已存在
|
|
existing_user = await UserService.get_user_by_username(user_data.username)
|
|
if existing_user:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=f"用户名 '{user_data.username}' 已存在"
|
|
)
|
|
|
|
# 检查邮箱是否已存在
|
|
existing_email = await UserService.get_user_by_email(user_data.email)
|
|
if existing_email:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=f"邮箱 '{user_data.email}' 已存在"
|
|
)
|
|
|
|
# 创建用户
|
|
try:
|
|
user = await UserService.create_user(user_data)
|
|
return user
|
|
except IntegrityError:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail="创建用户失败"
|
|
)
|
|
|
|
@router.get("/{user_id}", response_model=UserResponse, summary="获取用户详情")
|
|
async def read_user(user_id: int, db=Depends(get_db)):
|
|
"""根据ID获取用户"""
|
|
user = await UserService.get_user_by_id(user_id)
|
|
if not user:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail=f"用户 ID {user_id} 不存在"
|
|
)
|
|
return user
|
|
|
|
@router.put("/{user_id}", response_model=UserResponse, summary="更新用户")
|
|
async def update_user(user_id: int, user_update: UserUpdate, db=Depends(get_db)):
|
|
"""更新用户信息"""
|
|
user = await UserService.update_user(user_id, user_update)
|
|
if not user:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail=f"用户 ID {user_id} 不存在"
|
|
)
|
|
return user
|
|
|
|
@router.delete("/{user_id}", status_code=status.HTTP_204_NO_CONTENT, summary="删除用户")
|
|
async def delete_user(user_id: int, db=Depends(get_db)):
|
|
"""删除用户"""
|
|
deleted = await UserService.delete_user(user_id)
|
|
if not deleted:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail=f"用户 ID {user_id} 不存在"
|
|
)
|
|
return None |