""" 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