mirror of
https://github.com/fastapi-practices/fastapi-best-architecture.git
synced 2026-09-23 13:33:08 +00:00
The level field is deprecated but remained (#134)
This commit is contained in:
@@ -7,7 +7,6 @@ from fastapi.security import OAuth2PasswordRequestForm
|
||||
from fastapi_limiter.depends import RateLimiter
|
||||
from starlette.background import BackgroundTasks
|
||||
|
||||
from backend.app.common.casbin_rbac import DependsRBAC
|
||||
from backend.app.common.jwt import DependsJwtAuth
|
||||
from backend.app.common.response.response_schema import response_base
|
||||
from backend.app.schemas.token import GetLoginToken, GetSwaggerToken, GetNewToken
|
||||
|
||||
@@ -22,6 +22,7 @@ async def get_dept(pk: int):
|
||||
|
||||
@router.get('', summary='获取所有部门展示树', dependencies=[DependsRBAC])
|
||||
async def get_all_depts(
|
||||
level: Annotated[int | None, Query()] = None,
|
||||
name: Annotated[str | None, Query()] = None,
|
||||
leader: Annotated[str | None, Query()] = None,
|
||||
phone: Annotated[str | None, Query()] = None,
|
||||
|
||||
@@ -124,6 +124,7 @@ def register_exception(app: FastAPI):
|
||||
|
||||
else:
|
||||
import traceback
|
||||
|
||||
log.error(f'未知异常: {exc}')
|
||||
log.error(traceback.format_exc())
|
||||
return JSONResponse(
|
||||
|
||||
@@ -12,7 +12,6 @@ from pydantic import ValidationError
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from backend.app.common.exception.errors import AuthorizationError, TokenError
|
||||
from backend.app.common.log import log
|
||||
from backend.app.common.redis import redis_client
|
||||
from backend.app.core.conf import settings
|
||||
from backend.app.crud.crud_user import UserDao
|
||||
|
||||
@@ -36,12 +36,13 @@ class CRUDDept(CRUDBase[Dept, CreateDept, UpdateDept]):
|
||||
dept = await db.execute(se)
|
||||
return dept.scalars().all()
|
||||
|
||||
async def create(self, db: AsyncSession, obj_in: dict) -> None:
|
||||
async def create(self, db: AsyncSession, obj_in: dict, user_id: int) -> None:
|
||||
obj_in.update({'create_user': user_id})
|
||||
obj = self.model(**obj_in)
|
||||
db.add(obj)
|
||||
|
||||
async def update(self, db: AsyncSession, dept_id: int, obj_in: dict) -> int:
|
||||
return await self.update_(db, dept_id, obj_in)
|
||||
async def update(self, db: AsyncSession, dept_id: int, obj_in: dict, user_id: int) -> int:
|
||||
return await self.update_(db, dept_id, obj_in, user_id=user_id)
|
||||
|
||||
async def delete(self, db: AsyncSession, dept_id: int) -> int:
|
||||
return await self.delete_(db, dept_id, del_flag=1)
|
||||
@@ -54,7 +55,9 @@ class CRUDDept(CRUDBase[Dept, CreateDept, UpdateDept]):
|
||||
return user_relation.users
|
||||
|
||||
async def get_children(self, db: AsyncSession, dept_id: int) -> Any:
|
||||
result = await db.execute(select(self.model).where(self.model.id == dept_id))
|
||||
result = await db.execute(
|
||||
select(self.model).options(selectinload(self.model.children)).where(self.model.id == dept_id)
|
||||
)
|
||||
dept = result.scalars().first()
|
||||
return dept.children
|
||||
|
||||
|
||||
@@ -38,12 +38,13 @@ class CRUDMenu(CRUDBase[Menu, CreateMenu, UpdateMenu]):
|
||||
menu = await db.execute(se)
|
||||
return menu.scalars().all()
|
||||
|
||||
async def create(self, db, obj_in: dict) -> None:
|
||||
async def create(self, db, obj_in: dict, user_id: int) -> None:
|
||||
obj_in.update({'create_user': user_id})
|
||||
obj = self.model(**obj_in)
|
||||
db.add(obj)
|
||||
|
||||
async def update(self, db, menu_id: int, obj_in: dict) -> int:
|
||||
return await self.update_(db, menu_id, obj_in)
|
||||
async def update(self, db, menu_id: int, obj_in: dict, user_id: int) -> int:
|
||||
return await self.update_(db, menu_id, obj_in, user_id)
|
||||
|
||||
async def delete(self, db, menu_id: int) -> int:
|
||||
return await self.delete_(db, menu_id)
|
||||
|
||||
@@ -47,10 +47,7 @@ class JwtAuthMiddleware(AuthenticationBackend):
|
||||
raise _AuthenticationError(code=exc.code, msg=exc.detail, headers=exc.headers)
|
||||
except Exception as e:
|
||||
log.exception(e)
|
||||
raise _AuthenticationError(
|
||||
code=getattr(e, 'code', 500),
|
||||
msg=getattr(e, 'msg', 'Internal Server Error')
|
||||
)
|
||||
raise _AuthenticationError(code=getattr(e, 'code', 500), msg=getattr(e, 'msg', 'Internal Server Error'))
|
||||
|
||||
# 请注意,此返回使用非标准模式,所以在认证通过时,将丢失某些标准特性
|
||||
# 标准返回模式请查看:https://www.starlette.io/authentication/
|
||||
|
||||
@@ -100,7 +100,7 @@ class OperaLogMiddleware:
|
||||
|
||||
async def execute_request(self, request: Request, send: Send) -> tuple:
|
||||
# 预置响应信息
|
||||
code: int = 200
|
||||
code: str = '200'
|
||||
msg: str = 'Success'
|
||||
status: bool = True
|
||||
err: Any = None
|
||||
|
||||
@@ -45,7 +45,6 @@ class UpdateDept(DeptBase):
|
||||
|
||||
class GetAllDept(DeptBase):
|
||||
id: int
|
||||
level: int
|
||||
del_flag: bool
|
||||
create_user: int
|
||||
update_user: int = None
|
||||
|
||||
@@ -33,9 +33,12 @@ class DeptService:
|
||||
dept = await DeptDao.get_by_name(db, obj.name)
|
||||
if dept:
|
||||
raise errors.ForbiddenError(msg='部门名称已存在')
|
||||
if obj.parent_id:
|
||||
parent_dept = await DeptDao.get(db, obj.parent_id)
|
||||
if not parent_dept:
|
||||
raise errors.NotFoundError(msg='父级部门不存在')
|
||||
new_obj = obj.dict()
|
||||
new_obj.update({'level': obj.parent_id + 1 if obj.parent_id else 1, 'create_user': user_id})
|
||||
await DeptDao.create(db, new_obj)
|
||||
await DeptDao.create(db, new_obj, user_id)
|
||||
|
||||
@staticmethod
|
||||
async def update(*, pk: int, obj: UpdateDept, user_id: int):
|
||||
@@ -46,9 +49,12 @@ class DeptService:
|
||||
if dept.name != obj.name:
|
||||
if await DeptDao.get_by_name(db, obj.name):
|
||||
raise errors.ForbiddenError(msg='部门名称已存在')
|
||||
if obj.parent_id:
|
||||
parent_dept = await DeptDao.get(db, obj.parent_id)
|
||||
if not parent_dept:
|
||||
raise errors.NotFoundError(msg='父级部门不存在')
|
||||
new_obj = obj.dict()
|
||||
new_obj.update({'level': obj.parent_id + 1 if obj.parent_id else 1, 'update_user': user_id})
|
||||
count = await DeptDao.update(db, pk, new_obj)
|
||||
count = await DeptDao.update(db, pk, new_obj, user_id)
|
||||
return count
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -41,9 +41,12 @@ class MenuService:
|
||||
menu = await MenuDao.get_by_name(db, obj.name)
|
||||
if menu:
|
||||
raise errors.ForbiddenError(msg='菜单名称已存在')
|
||||
if obj.parent_id:
|
||||
parent_menu = await MenuDao.get(db, obj.parent_id)
|
||||
if not parent_menu:
|
||||
raise errors.NotFoundError(msg='父级菜单不存在')
|
||||
new_obj = obj.dict()
|
||||
new_obj.update({'level': obj.parent_id + 1 if obj.parent_id else 1, 'create_user': user_id})
|
||||
await MenuDao.create(db, new_obj)
|
||||
await MenuDao.create(db, new_obj, user_id)
|
||||
|
||||
@staticmethod
|
||||
async def update(*, pk: int, obj: UpdateMenu, user_id: int):
|
||||
@@ -54,9 +57,12 @@ class MenuService:
|
||||
if menu.name != obj.name:
|
||||
if await MenuDao.get_by_name(db, obj.name):
|
||||
raise errors.ForbiddenError(msg='菜单名称已存在')
|
||||
if obj.parent_id:
|
||||
parent_menu = await MenuDao.get(db, obj.parent_id)
|
||||
if not parent_menu:
|
||||
raise errors.NotFoundError(msg='父级菜单不存在')
|
||||
new_obj = obj.dict()
|
||||
new_obj.update({'level': obj.parent_id + 1 if obj.parent_id else 1, 'update_user': user_id})
|
||||
count = await MenuDao.update(db, pk, new_obj)
|
||||
count = await MenuDao.update(db, pk, new_obj, user_id)
|
||||
return count
|
||||
|
||||
@staticmethod
|
||||
|
||||
Reference in New Issue
Block a user