from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from fastcrud import FastCRUD from database import get_db from models import Role, User from schemas import RoleCreate, RoleResponse from middleware import get_current_user router = APIRouter(prefix="/roles", tags=["roles"]) # 创建FastCRUD实例 role_crud = FastCRUD(Role, RoleResponse) @router.post("/", response_model=RoleResponse) async def create_role(role_data: RoleCreate, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)): """创建角色""" # 创建角色实例 db_role = Role( name=role_data.name, creator=role_data.creator ) # 使用FastCRUD创建角色 created_role = await role_crud.create(db, db_role) return created_role @router.get("/", response_model=list[RoleResponse]) async def get_roles(db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)): """获取所有角色""" roles = await role_crud.get_multi(db) return roles @router.get("/{role_id}", response_model=RoleResponse) async def get_role(role_id: int, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)): """获取单个角色""" role = await role_crud.get(db, role_id) if not role: raise HTTPException(status_code=404, detail="角色不存在") return role @router.put("/{role_id}", response_model=RoleResponse) async def update_role(role_id: int, role_data: RoleCreate, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)): """更新角色""" # 准备更新数据 update_data = role_data.dict() # 使用FastCRUD更新角色 updated_role = await role_crud.update(db, role_id, update_data) if not updated_role: raise HTTPException(status_code=404, detail="角色不存在") return updated_role @router.delete("/{role_id}") async def delete_role(role_id: int, db: AsyncSession = Depends(get_db), current_user: User = Depends(get_current_user)): """删除角色""" deleted = await role_crud.delete(db, role_id) if not deleted: raise HTTPException(status_code=404, detail="角色不存在") return {"message": "角色删除成功"}