From 576160129a6a174ec398fa9b22185d8ea2133e3f Mon Sep 17 00:00:00 2001 From: Wu Clan Date: Sat, 20 Jan 2024 19:58:19 +0800 Subject: [PATCH] Update interface coding style (#275) --- backend/app/api/v1/api.py | 10 +++---- backend/app/api/v1/casbin.py | 21 +++++-------- backend/app/api/v1/dept.py | 12 ++++---- backend/app/api/v1/dict_data.py | 8 ++--- backend/app/api/v1/dict_type.py | 6 ++-- backend/app/api/v1/log/login_log.py | 2 +- backend/app/api/v1/log/opera_log.py | 2 +- backend/app/api/v1/menu.py | 11 ++++--- backend/app/api/v1/mixed/config.py | 2 +- backend/app/api/v1/role.py | 20 +++++++------ backend/app/api/v1/task.py | 4 +-- backend/app/api/v1/user.py | 30 ++++++++++--------- .../app/common/response/response_schema.py | 9 ++---- backend/app/crud/crud_casbin.py | 6 ++-- backend/app/services/api_service.py | 2 +- backend/app/services/casbin_service.py | 11 +++++-- backend/app/services/role_service.py | 4 +-- backend/app/services/task_service.py | 2 +- 18 files changed, 81 insertions(+), 81 deletions(-) diff --git a/backend/app/api/v1/api.py b/backend/app/api/v1/api.py index 825e0eb6..bfb972be 100644 --- a/backend/app/api/v1/api.py +++ b/backend/app/api/v1/api.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from typing import Annotated -from fastapi import APIRouter, Depends, Query +from fastapi import APIRouter, Depends, Path, Query from backend.app.common.jwt import DependsJwtAuth from backend.app.common.pagination import DependsPagination, paging_data @@ -18,12 +18,12 @@ router = APIRouter() @router.get('/all', summary='获取所有接口', dependencies=[DependsJwtAuth]) async def get_all_apis() -> ResponseModel: - data = await ApiService.get_all() + data = await ApiService.get_api_list() return await response_base.success(data=data) @router.get('/{pk}', summary='获取接口详情', dependencies=[DependsJwtAuth]) -async def get_api(pk: int) -> ResponseModel: +async def get_api(pk: Annotated[int, Path(...)]) -> ResponseModel: api = await ApiService.get(pk=pk) return await response_base.success(data=api) @@ -36,7 +36,7 @@ async def get_api(pk: int) -> ResponseModel: DependsPagination, ], ) -async def get_api_list( +async def get_pagination_apis( db: CurrentSession, name: Annotated[str | None, Query()] = None, method: Annotated[str | None, Query()] = None, @@ -68,7 +68,7 @@ async def create_api(obj: CreateApiParam) -> ResponseModel: DependsRBAC, ], ) -async def update_api(pk: int, obj: UpdateApiParam) -> ResponseModel: +async def update_api(pk: Annotated[int, Path(...)], obj: UpdateApiParam) -> ResponseModel: count = await ApiService.update(pk=pk, obj=obj) if count > 0: return await response_base.success() diff --git a/backend/app/api/v1/casbin.py b/backend/app/api/v1/casbin.py index d86761ee..60f44e49 100644 --- a/backend/app/api/v1/casbin.py +++ b/backend/app/api/v1/casbin.py @@ -1,8 +1,9 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- from typing import Annotated +from uuid import UUID -from fastapi import APIRouter, Depends, Path, Query +from fastapi import APIRouter, Depends, Query from backend.app.common.jwt import DependsJwtAuth from backend.app.common.pagination import DependsPagination, paging_data @@ -32,7 +33,7 @@ router = APIRouter() DependsPagination, ], ) -async def get_all_casbin( +async def get_pagination_casbin( db: CurrentSession, ptype: Annotated[str | None, Query(description='规则类型, p / g')] = None, sub: Annotated[str | None, Query(description='用户 uuid / 角色')] = None, @@ -42,15 +43,9 @@ async def get_all_casbin( return await response_base.success(data=page_data) -@router.get('/policy', summary='获取所有P权限规则', dependencies=[DependsJwtAuth]) -async def get_all_policies() -> ResponseModel: - policies = await CasbinService.get_policy_list() - return await response_base.success(data=policies) - - -@router.get('/policy/{role}/all', summary='获取指定角色的所有P权限规则', dependencies=[DependsJwtAuth]) -async def get_role_policies(role: Annotated[str, Path(description='角色ID')]) -> ResponseModel: - policies = await CasbinService.get_policy_list_by_role(role=role) +@router.get('/policies', summary='获取所有P权限规则', dependencies=[DependsJwtAuth]) +async def get_all_policies(role: Annotated[int | None, Query(description='角色ID')] = None) -> ResponseModel: + policies = await CasbinService.get_policy_list(role=role) return await response_base.success(data=policies) @@ -156,7 +151,7 @@ async def delete_all_policies(sub: DeleteAllPoliciesParam) -> ResponseModel: return await response_base.fail() -@router.get('/group', summary='获取所有G权限规则', dependencies=[DependsJwtAuth]) +@router.get('/groups', summary='获取所有G权限规则', dependencies=[DependsJwtAuth]) async def get_all_groups() -> ResponseModel: data = await CasbinService.get_group_list() return await response_base.success(data=data) @@ -231,7 +226,7 @@ async def delete_groups(gs: list[DeleteUserRoleParam]) -> ResponseModel: DependsRBAC, ], ) -async def delete_all_groups(uuid: str) -> ResponseModel: +async def delete_all_groups(uuid: Annotated[UUID, Query(...)]) -> ResponseModel: count = await CasbinService.delete_all_groups(uuid=uuid) if count > 0: return await response_base.success() diff --git a/backend/app/api/v1/dept.py b/backend/app/api/v1/dept.py index 55bf33d1..c8163d6f 100644 --- a/backend/app/api/v1/dept.py +++ b/backend/app/api/v1/dept.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from typing import Annotated -from fastapi import APIRouter, Depends, Query +from fastapi import APIRouter, Depends, Path, Query from backend.app.common.jwt import DependsJwtAuth from backend.app.common.permission import RequestPermission @@ -16,14 +16,14 @@ router = APIRouter() @router.get('/{pk}', summary='获取部门详情', dependencies=[DependsJwtAuth]) -async def get_dept(pk: int) -> ResponseModel: +async def get_dept(pk: Annotated[int, Path(...)]) -> ResponseModel: dept = await DeptService.get(pk=pk) data = GetDeptListDetails(**await select_as_dict(dept)) return await response_base.success(data=data) @router.get('', summary='获取所有部门展示树', dependencies=[DependsJwtAuth]) -async def get_all_depts( +async def get_all_depts_tree( name: Annotated[str | None, Query()] = None, leader: Annotated[str | None, Query()] = None, phone: Annotated[str | None, Query()] = None, @@ -54,7 +54,7 @@ async def create_dept(obj: CreateDeptParam) -> ResponseModel: DependsRBAC, ], ) -async def update_dept(pk: int, obj: UpdateDeptParam) -> ResponseModel: +async def update_dept(pk: Annotated[int, Path(...)], obj: UpdateDeptParam) -> ResponseModel: count = await DeptService.update(pk=pk, obj=obj) if count > 0: return await response_base.success() @@ -62,14 +62,14 @@ async def update_dept(pk: int, obj: UpdateDeptParam) -> ResponseModel: @router.delete( - '{pk}', + '/{pk}', summary='删除部门', dependencies=[ Depends(RequestPermission('sys:dept:del')), DependsRBAC, ], ) -async def delete_dept(pk: int) -> ResponseModel: +async def delete_dept(pk: Annotated[int, Path(...)]) -> ResponseModel: count = await DeptService.delete(pk=pk) if count > 0: return await response_base.success() diff --git a/backend/app/api/v1/dict_data.py b/backend/app/api/v1/dict_data.py index 4917ca24..50e4cb76 100644 --- a/backend/app/api/v1/dict_data.py +++ b/backend/app/api/v1/dict_data.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from typing import Annotated -from fastapi import APIRouter, Depends, Query +from fastapi import APIRouter, Depends, Path, Query from backend.app.common.jwt import DependsJwtAuth from backend.app.common.pagination import DependsPagination, paging_data @@ -18,7 +18,7 @@ router = APIRouter() @router.get('/{pk}', summary='获取字典详情', dependencies=[DependsJwtAuth]) -async def get_dict_data(pk: int) -> ResponseModel: +async def get_dict_data(pk: Annotated[int, Path(...)]) -> ResponseModel: dict_data = await DictDataService.get(pk=pk) data = GetDictDataListDetails(**await select_as_dict(dict_data)) return await response_base.success(data=data) @@ -32,7 +32,7 @@ async def get_dict_data(pk: int) -> ResponseModel: DependsPagination, ], ) -async def get_all_dict_datas( +async def get_pagination_dict_datas( db: CurrentSession, label: Annotated[str | None, Query()] = None, value: Annotated[str | None, Query()] = None, @@ -64,7 +64,7 @@ async def create_dict_data(obj: CreateDictDataParam) -> ResponseModel: DependsRBAC, ], ) -async def update_dict_data(pk: int, obj: UpdateDictDataParam) -> ResponseModel: +async def update_dict_data(pk: Annotated[int, Path(...)], obj: UpdateDictDataParam) -> ResponseModel: count = await DictDataService.update(pk=pk, obj=obj) if count > 0: return await response_base.success() diff --git a/backend/app/api/v1/dict_type.py b/backend/app/api/v1/dict_type.py index 66425fde..410fdc5b 100644 --- a/backend/app/api/v1/dict_type.py +++ b/backend/app/api/v1/dict_type.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from typing import Annotated -from fastapi import APIRouter, Depends, Query +from fastapi import APIRouter, Depends, Path, Query from backend.app.common.jwt import DependsJwtAuth from backend.app.common.pagination import DependsPagination, paging_data @@ -24,7 +24,7 @@ router = APIRouter() DependsPagination, ], ) -async def get_all_dict_types( +async def get_pagination_dict_types( db: CurrentSession, name: Annotated[str | None, Query()] = None, code: Annotated[str | None, Query()] = None, @@ -56,7 +56,7 @@ async def create_dict_type(obj: CreateDictTypeParam) -> ResponseModel: DependsRBAC, ], ) -async def update_dict_type(pk: int, obj: UpdateDictTypeParam) -> ResponseModel: +async def update_dict_type(pk: Annotated[int, Path(...)], obj: UpdateDictTypeParam) -> ResponseModel: count = await DictTypeService.update(pk=pk, obj=obj) if count > 0: return await response_base.success() diff --git a/backend/app/api/v1/log/login_log.py b/backend/app/api/v1/log/login_log.py index 82af5ce5..212d433e 100644 --- a/backend/app/api/v1/log/login_log.py +++ b/backend/app/api/v1/log/login_log.py @@ -24,7 +24,7 @@ router = APIRouter() DependsPagination, ], ) -async def get_all_login_logs( +async def get_pagination_login_logs( db: CurrentSession, username: Annotated[str | None, Query()] = None, status: Annotated[int | None, Query()] = None, diff --git a/backend/app/api/v1/log/opera_log.py b/backend/app/api/v1/log/opera_log.py index d0544a1e..e06cb776 100644 --- a/backend/app/api/v1/log/opera_log.py +++ b/backend/app/api/v1/log/opera_log.py @@ -24,7 +24,7 @@ router = APIRouter() DependsPagination, ], ) -async def get_all_opera_logs( +async def get_pagination_opera_logs( db: CurrentSession, username: Annotated[str | None, Query()] = None, status: Annotated[int | None, Query()] = None, diff --git a/backend/app/api/v1/menu.py b/backend/app/api/v1/menu.py index 15623091..fa151abc 100644 --- a/backend/app/api/v1/menu.py +++ b/backend/app/api/v1/menu.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from typing import Annotated -from fastapi import APIRouter, Depends, Query, Request +from fastapi import APIRouter, Depends, Path, Query, Request from backend.app.common.jwt import DependsJwtAuth from backend.app.common.permission import RequestPermission @@ -22,7 +22,7 @@ async def get_user_menus(request: Request) -> ResponseModel: @router.get('/{pk}', summary='获取菜单详情', dependencies=[DependsJwtAuth]) -async def get_menu(pk: int) -> ResponseModel: +async def get_menu(pk: Annotated[int, Path(...)]) -> ResponseModel: menu = await MenuService.get(pk=pk) data = GetMenuListDetails(**await select_as_dict(menu)) return await response_base.success(data=data) @@ -30,8 +30,7 @@ async def get_menu(pk: int) -> ResponseModel: @router.get('', summary='获取所有菜单展示树', dependencies=[DependsJwtAuth]) async def get_all_menus( - title: Annotated[str | None, Query()] = None, - status: Annotated[int | None, Query()] = None, + title: Annotated[str | None, Query()] = None, status: Annotated[int | None, Query()] = None ) -> ResponseModel: menu = await MenuService.get_menu_tree(title=title, status=status) return await response_base.success(data=menu) @@ -58,7 +57,7 @@ async def create_menu(obj: CreateMenuParam) -> ResponseModel: DependsRBAC, ], ) -async def update_menu(pk: int, obj: UpdateMenuParam) -> ResponseModel: +async def update_menu(pk: Annotated[int, Path(...)], obj: UpdateMenuParam) -> ResponseModel: count = await MenuService.update(pk=pk, obj=obj) if count > 0: return await response_base.success() @@ -73,7 +72,7 @@ async def update_menu(pk: int, obj: UpdateMenuParam) -> ResponseModel: DependsRBAC, ], ) -async def delete_menu(pk: int) -> ResponseModel: +async def delete_menu(pk: Annotated[int, Path(...)]) -> ResponseModel: count = await MenuService.delete(pk=pk) if count > 0: return await response_base.success() diff --git a/backend/app/api/v1/mixed/config.py b/backend/app/api/v1/mixed/config.py index 9941a786..438dca24 100644 --- a/backend/app/api/v1/mixed/config.py +++ b/backend/app/api/v1/mixed/config.py @@ -11,7 +11,7 @@ router = APIRouter() @router.get( - '/routers', + '/routes', summary='获取所有路由', dependencies=[ Depends(RequestPermission('sys:route:list')), diff --git a/backend/app/api/v1/role.py b/backend/app/api/v1/role.py index 4b2046b9..16b17b22 100644 --- a/backend/app/api/v1/role.py +++ b/backend/app/api/v1/role.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from typing import Annotated -from fastapi import APIRouter, Depends, Query, Request +from fastapi import APIRouter, Depends, Path, Query, Request from backend.app.common.jwt import DependsJwtAuth from backend.app.common.pagination import DependsPagination, paging_data @@ -26,20 +26,20 @@ async def get_all_roles() -> ResponseModel: @router.get('/{pk}/all', summary='获取用户所有角色', dependencies=[DependsJwtAuth]) -async def get_user_all_roles(pk: int) -> ResponseModel: - roles = await RoleService.get_user_all(pk=pk) +async def get_user_all_roles(pk: Annotated[int, Path(...)]) -> ResponseModel: + roles = await RoleService.get_user_roles(pk=pk) data = await select_list_serialize(roles) return await response_base.success(data=data) @router.get('/{pk}/menus', summary='获取角色所有菜单', dependencies=[DependsJwtAuth]) -async def get_role_all_menus(pk: int) -> ResponseModel: +async def get_role_all_menus(pk: Annotated[int, Path(...)]) -> ResponseModel: menu = await MenuService.get_role_menu_tree(pk=pk) return await response_base.success(data=menu) @router.get('/{pk}', summary='获取角色详情', dependencies=[DependsJwtAuth]) -async def get_role(pk: int) -> ResponseModel: +async def get_role(pk: Annotated[int, Path(...)]) -> ResponseModel: role = await RoleService.get(pk=pk) data = GetRoleListDetails(**await select_as_dict(role)) return await response_base.success(data=data) @@ -53,7 +53,7 @@ async def get_role(pk: int) -> ResponseModel: DependsPagination, ], ) -async def get_all_role_list( +async def get_pagination_roles( db: CurrentSession, name: Annotated[str | None, Query()] = None, data_scope: Annotated[int | None, Query()] = None, @@ -85,7 +85,7 @@ async def create_role(obj: CreateRoleParam) -> ResponseModel: DependsRBAC, ], ) -async def update_role(pk: int, obj: UpdateRoleParam) -> ResponseModel: +async def update_role(pk: Annotated[int, Path(...)], obj: UpdateRoleParam) -> ResponseModel: count = await RoleService.update(pk=pk, obj=obj) if count > 0: return await response_base.success() @@ -100,8 +100,10 @@ async def update_role(pk: int, obj: UpdateRoleParam) -> ResponseModel: DependsRBAC, ], ) -async def update_role_menu(request: Request, pk: int, menu_ids: UpdateRoleMenuParam) -> ResponseModel: - count = await RoleService.update_menus(request=request, pk=pk, menu_ids=menu_ids) +async def update_role_menus( + request: Request, pk: Annotated[int, Path(...)], menu_ids: UpdateRoleMenuParam +) -> ResponseModel: + count = await RoleService.update_role_menu(request=request, pk=pk, menu_ids=menu_ids) if count > 0: return await response_base.success() return await response_base.fail() diff --git a/backend/app/api/v1/task.py b/backend/app/api/v1/task.py index 872fca23..e78f04ef 100644 --- a/backend/app/api/v1/task.py +++ b/backend/app/api/v1/task.py @@ -16,12 +16,12 @@ router = APIRouter() @router.get('', summary='获取所有可执行任务模块', dependencies=[DependsJwtAuth]) async def get_all_tasks() -> ResponseModel: - tasks = TaskService.gets() + tasks = TaskService.get_task_list() return await response_base.success(data=tasks) @router.get('/{pk}', summary='获取任务结果', dependencies=[DependsJwtAuth]) -async def get_task_result(pk: str = Path(description='任务ID')) -> ResponseModel: +async def get_task_result(pk: Annotated[str, Path(description='任务ID')]) -> ResponseModel: task = TaskService.get(pk) if not task: return await response_base.fail(res=CustomResponseCode.HTTP_204, data=pk) diff --git a/backend/app/api/v1/user.py b/backend/app/api/v1/user.py index 8145b174..8e6659f2 100644 --- a/backend/app/api/v1/user.py +++ b/backend/app/api/v1/user.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from typing import Annotated -from fastapi import APIRouter, Depends, Query, Request +from fastapi import APIRouter, Depends, Path, Query, Request from backend.app.common.jwt import DependsJwtAuth from backend.app.common.pagination import DependsPagination, paging_data @@ -33,7 +33,7 @@ async def user_register(obj: RegisterUserParam) -> ResponseModel: @router.post('/add', summary='添加用户', dependencies=[DependsRBAC]) -async def add_user(request: Request, obj: AddUserParam): +async def add_user(request: Request, obj: AddUserParam) -> ResponseModel: await UserService.add(request=request, obj=obj) current_user = await UserService.get_userinfo(username=obj.username) data = GetUserInfoListDetails(**await select_as_dict(current_user)) @@ -41,7 +41,7 @@ async def add_user(request: Request, obj: AddUserParam): @router.post('/password/reset', summary='密码重置', dependencies=[DependsJwtAuth]) -async def password_reset(request: Request, obj: ResetPasswordParam): +async def password_reset(request: Request, obj: ResetPasswordParam) -> ResponseModel: count = await UserService.pwd_reset(request=request, obj=obj) if count > 0: return await response_base.success() @@ -49,20 +49,20 @@ async def password_reset(request: Request, obj: ResetPasswordParam): @router.get('/me', summary='获取当前用户信息', dependencies=[DependsJwtAuth], response_model_exclude={'password'}) -async def get_current_userinfo(request: Request): +async def get_current_userinfo(request: Request) -> ResponseModel: data = GetCurrentUserInfoDetail(**await select_as_dict(request.user)) return await response_base.success(data=data) @router.get('/{username}', summary='查看用户信息', dependencies=[DependsJwtAuth]) -async def get_user(username: str): +async def get_user(username: Annotated[str, Path(...)]) -> ResponseModel: current_user = await UserService.get_userinfo(username=username) data = GetUserInfoListDetails(**await select_as_dict(current_user)) return await response_base.success(data=data) @router.put('/{username}', summary='更新用户信息', dependencies=[DependsJwtAuth]) -async def update_userinfo(request: Request, username: str, obj: UpdateUserParam): +async def update_userinfo(request: Request, username: Annotated[str, Path(...)], obj: UpdateUserParam) -> ResponseModel: count = await UserService.update(request=request, username=username, obj=obj) if count > 0: return await response_base.success() @@ -77,13 +77,15 @@ async def update_userinfo(request: Request, username: str, obj: UpdateUserParam) DependsRBAC, ], ) -async def update_user_role(request: Request, username: str, obj: UpdateUserRoleParam): +async def update_user_role( + request: Request, username: Annotated[str, Path(...)], obj: UpdateUserRoleParam +) -> ResponseModel: await UserService.update_roles(request=request, username=username, obj=obj) return await response_base.success() @router.put('/{username}/avatar', summary='更新头像', dependencies=[DependsJwtAuth]) -async def update_avatar(request: Request, username: str, avatar: AvatarParam): +async def update_avatar(request: Request, username: Annotated[str, Path(...)], avatar: AvatarParam) -> ResponseModel: count = await UserService.update_avatar(request=request, username=username, avatar=avatar) if count > 0: return await response_base.success() @@ -98,7 +100,7 @@ async def update_avatar(request: Request, username: str, avatar: AvatarParam): DependsPagination, ], ) -async def get_all_users( +async def get_pagination_users( db: CurrentSession, dept: Annotated[int | None, Query()] = None, username: Annotated[str | None, Query()] = None, @@ -111,7 +113,7 @@ async def get_all_users( @router.put('/{pk}/super', summary='修改用户超级权限', dependencies=[DependsRBAC]) -async def super_set(request: Request, pk: int): +async def super_set(request: Request, pk: Annotated[int, Path(...)]) -> ResponseModel: count = await UserService.update_permission(request=request, pk=pk) if count > 0: return await response_base.success() @@ -119,7 +121,7 @@ async def super_set(request: Request, pk: int): @router.put('/{pk}/staff', summary='修改用户后台登录权限', dependencies=[DependsRBAC]) -async def staff_set(request: Request, pk: int): +async def staff_set(request: Request, pk: Annotated[int, Path(...)]) -> ResponseModel: count = await UserService.update_staff(request=request, pk=pk) if count > 0: return await response_base.success() @@ -127,7 +129,7 @@ async def staff_set(request: Request, pk: int): @router.put('/{pk}/status', summary='修改用户状态', dependencies=[DependsRBAC]) -async def status_set(request: Request, pk: int): +async def status_set(request: Request, pk: Annotated[int, Path(...)]) -> ResponseModel: count = await UserService.update_status(request=request, pk=pk) if count > 0: return await response_base.success() @@ -135,7 +137,7 @@ async def status_set(request: Request, pk: int): @router.put('/{pk}/multi', summary='修改用户多点登录状态', dependencies=[DependsRBAC]) -async def multi_set(request: Request, pk: int): +async def multi_set(request: Request, pk: Annotated[int, Path(...)]) -> ResponseModel: count = await UserService.update_multi_login(request=request, pk=pk) if count > 0: return await response_base.success() @@ -151,7 +153,7 @@ async def multi_set(request: Request, pk: int): DependsRBAC, ], ) -async def delete_user(username: str): +async def delete_user(username: Annotated[str, Path(...)]) -> ResponseModel: count = await UserService.delete(username=username) if count > 0: return await response_base.success() diff --git a/backend/app/common/response/response_schema.py b/backend/app/common/response/response_schema.py index df7f3af0..2fd6cdbe 100644 --- a/backend/app/common/response/response_schema.py +++ b/backend/app/common/response/response_schema.py @@ -17,11 +17,6 @@ class ResponseModel(BaseModel): """ 统一返回模型 - .. tip:: - - 如果你不想使用 ResponseBase 中的自定义编码器,可以使用此模型,返回数据将通过 fastapi 内部的编码器自动解析并返回; - 此返回模型会生成 openapi schema 文档 - E.g. :: @router.get('/test', response_model=ResponseModel) @@ -36,7 +31,7 @@ class ResponseModel(BaseModel): def test() -> ResponseModel: res = CustomResponseCode.HTTP_200 return ResponseModel(code=res.code, msg=res.msg, data={'test': 'test'}) - """ # noqa: E501 + """ # TODO: json_encoders 配置失效: https://github.com/tiangolo/fastapi/discussions/10252 model_config = ConfigDict(json_encoders={datetime: lambda x: x.strftime(settings.DATETIME_FORMAT)}) @@ -52,7 +47,7 @@ class ResponseBase: .. tip:: - 此类中的返回方法将返回 ResponseModel 模型,作为一种编码风格而存在; + 此类中的方法将返回 ResponseModel 模型,作为一种编码风格而存在; E.g. :: diff --git a/backend/app/crud/crud_casbin.py b/backend/app/crud/crud_casbin.py index 39fd088d..53f0f9df 100644 --- a/backend/app/crud/crud_casbin.py +++ b/backend/app/crud/crud_casbin.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +from uuid import UUID + from sqlalchemy import Select, and_, delete, or_, select from sqlalchemy.ext.asyncio import AsyncSession @@ -28,8 +30,8 @@ class CRUDCasbin(CRUDBase[CasbinRule, CreatePolicyParam, UpdatePolicyParam]): result = await db.execute(delete(self.model).where(or_(*where_list))) return result.rowcount - async def delete_groups_by_uuid(self, db: AsyncSession, uuid: str) -> int: - result = await db.execute(delete(self.model).where(self.model.v0 == uuid)) + async def delete_groups_by_uuid(self, db: AsyncSession, uuid: UUID) -> int: + result = await db.execute(delete(self.model).where(self.model.v0 == str(uuid))) return result.rowcount diff --git a/backend/app/services/api_service.py b/backend/app/services/api_service.py index b9c9e341..b04420f6 100644 --- a/backend/app/services/api_service.py +++ b/backend/app/services/api_service.py @@ -25,7 +25,7 @@ class ApiService: return await ApiDao.get_list(name=name, method=method, path=path) @staticmethod - async def get_all() -> Sequence[Api]: + async def get_api_list() -> Sequence[Api]: async with async_db_session() as db: apis = await ApiDao.get_all(db) return apis diff --git a/backend/app/services/casbin_service.py b/backend/app/services/casbin_service.py index b7922720..e571c9b8 100644 --- a/backend/app/services/casbin_service.py +++ b/backend/app/services/casbin_service.py @@ -1,5 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- +from uuid import UUID + from sqlalchemy import Select from backend.app.common.exception import errors @@ -22,9 +24,12 @@ class CasbinService: return await CasbinDao.get_all_policy(ptype, sub) @staticmethod - async def get_policy_list() -> list: + async def get_policy_list(self, *, role: int | None = None) -> list: enforcer = await RBAC.enforcer() - data = enforcer.get_policy() + if role is not None: + data = enforcer.get_filtered_named_policy('p', 0, str(role)) + else: + data = enforcer.get_policy() return data @staticmethod @@ -129,7 +134,7 @@ class CasbinService: return data @staticmethod - async def delete_all_groups(*, uuid: str) -> int: + async def delete_all_groups(*, uuid: UUID) -> int: async with async_db_session.begin() as db: count = await CasbinDao.delete_groups_by_uuid(db, uuid) return count diff --git a/backend/app/services/role_service.py b/backend/app/services/role_service.py index 01bb5753..91f162fd 100644 --- a/backend/app/services/role_service.py +++ b/backend/app/services/role_service.py @@ -31,7 +31,7 @@ class RoleService: return roles @staticmethod - async def get_user_all(*, pk: int) -> Sequence[Role]: + async def get_user_roles(*, pk: int) -> Sequence[Role]: async with async_db_session() as db: roles = await RoleDao.get_user_all(db, user_id=pk) return roles @@ -62,7 +62,7 @@ class RoleService: return count @staticmethod - async def update_menus(*, request: Request, pk: int, menu_ids: UpdateRoleMenuParam) -> int: + async def update_role_menu(*, request: Request, pk: int, menu_ids: UpdateRoleMenuParam) -> int: async with async_db_session.begin() as db: role = await RoleDao.get(db, pk) if not role: diff --git a/backend/app/services/task_service.py b/backend/app/services/task_service.py index e481962e..416fb801 100644 --- a/backend/app/services/task_service.py +++ b/backend/app/services/task_service.py @@ -19,7 +19,7 @@ class TaskService: return result @staticmethod - def gets() -> dict: + def get_task_list() -> dict: filtered_tasks = {} tasks = celery_app.tasks for key, value in tasks.items():