Skip to content

Commit 246d162

Browse files
committed
Update to minimal implementation
1 parent d295686 commit 246d162

35 files changed

+175
-459
lines changed

backend/app/admin/api/v1/sys/plugin.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
from backend.app.admin.service.plugin_service import plugin_service
1010
from backend.common.enums import PluginType
11-
from backend.common.i18n import t
1211
from backend.common.response.response_code import CustomResponse
1312
from backend.common.response.response_schema import ResponseModel, ResponseSchemaModel, response_base
1413
from backend.common.security.jwt import DependsJwtAuth
@@ -44,8 +43,12 @@ async def install_plugin(
4443
file: Annotated[UploadFile | None, File()] = None,
4544
repo_url: Annotated[str | None, Query(description='插件 git 仓库地址')] = None,
4645
) -> ResponseModel:
47-
plugin = await plugin_service.install(type=type, file=file, repo_url=repo_url)
48-
return response_base.success(res=CustomResponse(code=200, msg=t('success.plugin.install_success', plugin=plugin)))
46+
plugin_name = await plugin_service.install(type=type, file=file, repo_url=repo_url)
47+
return response_base.success(
48+
res=CustomResponse(
49+
code=200, msg=f'插件 {plugin_name} 安装成功,请根据插件说明(README.md)进行相关配置并重启服务'
50+
)
51+
)
4952

5053

5154
@router.delete(
@@ -59,7 +62,9 @@ async def install_plugin(
5962
)
6063
async def uninstall_plugin(plugin: Annotated[str, Path(description='插件名称')]) -> ResponseModel:
6164
await plugin_service.uninstall(plugin=plugin)
62-
return response_base.success(res=CustomResponse(code=200, msg=t('success.plugin.uninstall_success', plugin=plugin)))
65+
return response_base.success(
66+
res=CustomResponse(code=200, msg=f'插件 {plugin} 卸载成功,请根据插件说明(README.md)移除相关配置并重启服务')
67+
)
6368

6469

6570
@router.put(

backend/app/admin/service/auth_service.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@ async def user_verify(db: AsyncSession, username: str, password: str) -> User:
4545
"""
4646
user = await user_dao.get_by_username(db, username)
4747
if not user:
48-
raise errors.NotFoundError(msg=t('error.username_or_password_error'))
48+
raise errors.NotFoundError(msg='用户名或密码有误')
4949

5050
if user.password is None:
51-
raise errors.AuthorizationError(msg=t('error.username_or_password_error'))
51+
raise errors.AuthorizationError(msg='用户名或密码有误')
5252
else:
5353
if not password_verify(password, user.password):
54-
raise errors.AuthorizationError(msg=t('error.username_or_password_error'))
54+
raise errors.AuthorizationError(msg='用户名或密码有误')
5555

5656
if not user.status:
57-
raise errors.AuthorizationError(msg=t('error.user.locked'))
57+
raise errors.AuthorizationError(msg='用户已被锁定, 请联系统管理员')
5858

5959
return user
6060

@@ -198,17 +198,17 @@ async def refresh_token(*, request: Request) -> GetNewToken:
198198
"""
199199
refresh_token = request.cookies.get(settings.COOKIE_REFRESH_TOKEN_KEY)
200200
if not refresh_token:
201-
raise errors.RequestError(msg=t('error.refresh_token_expired'))
201+
raise errors.RequestError(msg='Refresh Token 已过期,请重新登录')
202202
token_payload = jwt_decode(refresh_token)
203203
async with async_db_session() as db:
204204
user = await user_dao.get(db, token_payload.id)
205205
if not user:
206-
raise errors.NotFoundError(msg=t('error.user.not_found'))
206+
raise errors.NotFoundError(msg='用户不存在')
207207
elif not user.status:
208-
raise errors.AuthorizationError(msg=t('error.user.locked'))
208+
raise errors.AuthorizationError(msg='用户已被锁定, 请联系统管理员')
209209
if not user.is_multi_login:
210210
if await redis_client.keys(match=f'{settings.TOKEN_REDIS_PREFIX}:{user.id}:*'):
211-
raise errors.ForbiddenError(msg=t('error.user.login_elsewhere'))
211+
raise errors.ForbiddenError(msg='此用户已在异地登录,请重新登录并及时修改密码')
212212
new_token = await create_new_token(
213213
refresh_token,
214214
token_payload.session_uuid,

backend/app/admin/service/data_rule_service.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
UpdateDataRuleParam,
1414
)
1515
from backend.common.exception import errors
16-
from backend.common.i18n import t
1716
from backend.core.conf import settings
1817
from backend.database.db import async_db_session
1918
from backend.utils.import_parse import dynamic_import_data_model
@@ -33,7 +32,7 @@ async def get(*, pk: int) -> DataRule:
3332
async with async_db_session() as db:
3433
data_rule = await data_rule_dao.get(db, pk)
3534
if not data_rule:
36-
raise errors.NotFoundError(msg=t('error.data_rule.not_found'))
35+
raise errors.NotFoundError(msg='数据规则不存在')
3736
return data_rule
3837

3938
@staticmethod
@@ -50,7 +49,7 @@ async def get_columns(model: str) -> list[GetDataRuleColumnDetail]:
5049
:return:
5150
"""
5251
if model not in settings.DATA_PERMISSION_MODELS:
53-
raise errors.NotFoundError(msg=t('error.data_rule.available_models'))
52+
raise errors.NotFoundError(msg='数据规则可用模型不存在')
5453
model_ins = dynamic_import_data_model(settings.DATA_PERMISSION_MODELS[model])
5554

5655
model_columns = [
@@ -88,7 +87,7 @@ async def create(*, obj: CreateDataRuleParam) -> None:
8887
async with async_db_session.begin() as db:
8988
data_rule = await data_rule_dao.get_by_name(db, obj.name)
9089
if data_rule:
91-
raise errors.ConflictError(msg=t('error.data_rule.exists'))
90+
raise errors.ConflictError(msg='数据规则已存在')
9291
await data_rule_dao.create(db, obj)
9392

9493
@staticmethod
@@ -103,10 +102,10 @@ async def update(*, pk: int, obj: UpdateDataRuleParam) -> int:
103102
async with async_db_session.begin() as db:
104103
data_rule = await data_rule_dao.get(db, pk)
105104
if not data_rule:
106-
raise errors.NotFoundError(msg=t('error.data_rule.not_found'))
105+
raise errors.NotFoundError(msg='数据规则不存在')
107106
if data_rule.name != obj.name:
108107
if await data_rule_dao.get_by_name(db, obj.name):
109-
raise errors.ConflictError(msg=t('error.data_rule.exists'))
108+
raise errors.ConflictError(msg='数据规则已存在')
110109
count = await data_rule_dao.update(db, pk, obj)
111110
return count
112111

backend/app/admin/service/data_scope_service.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
UpdateDataScopeRuleParam,
1414
)
1515
from backend.common.exception import errors
16-
from backend.common.i18n import t
1716
from backend.core.conf import settings
1817
from backend.database.db import async_db_session
1918
from backend.database.redis import redis_client
@@ -33,7 +32,7 @@ async def get(*, pk: int) -> DataScope:
3332
async with async_db_session() as db:
3433
data_scope = await data_scope_dao.get(db, pk)
3534
if not data_scope:
36-
raise errors.NotFoundError(msg=t('error.data_scope.not_found'))
35+
raise errors.NotFoundError(msg='数据范围不存在')
3736
return data_scope
3837

3938
@staticmethod
@@ -54,7 +53,7 @@ async def get_rules(*, pk: int) -> DataScope:
5453
async with async_db_session() as db:
5554
data_scope = await data_scope_dao.get_with_relation(db, pk)
5655
if not data_scope:
57-
raise errors.NotFoundError(msg=t('error.data_scope.not_found'))
56+
raise errors.NotFoundError(msg='数据范围不存在')
5857
return data_scope
5958

6059
@staticmethod
@@ -79,7 +78,7 @@ async def create(*, obj: CreateDataScopeParam) -> None:
7978
async with async_db_session.begin() as db:
8079
data_scope = await data_scope_dao.get_by_name(db, obj.name)
8180
if data_scope:
82-
raise errors.ConflictError(msg=t('error.data_scope.exists'))
81+
raise errors.ConflictError(msg='数据范围已存在')
8382
await data_scope_dao.create(db, obj)
8483

8584
@staticmethod
@@ -94,10 +93,10 @@ async def update(*, pk: int, obj: UpdateDataScopeParam) -> int:
9493
async with async_db_session.begin() as db:
9594
data_scope = await data_scope_dao.get(db, pk)
9695
if not data_scope:
97-
raise errors.NotFoundError(msg=t('error.data_scope.not_found'))
96+
raise errors.NotFoundError(msg='数据范围不存在')
9897
if data_scope.name != obj.name:
9998
if await data_scope_dao.get_by_name(db, obj.name):
100-
raise errors.ConflictError(msg=t('error.data_scope.exists'))
99+
raise errors.ConflictError(msg='数据范围已存在')
101100
count = await data_scope_dao.update(db, pk, obj)
102101
for role in await data_scope.awaitable_attrs.roles:
103102
for user in await role.awaitable_attrs.users:

backend/app/admin/service/dept_service.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from backend.app.admin.model import Dept
99
from backend.app.admin.schema.dept import CreateDeptParam, UpdateDeptParam
1010
from backend.common.exception import errors
11-
from backend.common.i18n import t
1211
from backend.core.conf import settings
1312
from backend.database.db import async_db_session
1413
from backend.database.redis import redis_client
@@ -29,7 +28,7 @@ async def get(*, pk: int) -> Dept:
2928
async with async_db_session() as db:
3029
dept = await dept_dao.get(db, pk)
3130
if not dept:
32-
raise errors.NotFoundError(msg=t('error.dept.not_found'))
31+
raise errors.NotFoundError(msg='部门不存在')
3332
return dept
3433

3534
@staticmethod
@@ -62,11 +61,11 @@ async def create(*, obj: CreateDeptParam) -> None:
6261
async with async_db_session.begin() as db:
6362
dept = await dept_dao.get_by_name(db, obj.name)
6463
if dept:
65-
raise errors.ConflictError(msg=t('error.dept.exists'))
64+
raise errors.ConflictError(msg='部门名称已存在')
6665
if obj.parent_id:
6766
parent_dept = await dept_dao.get(db, obj.parent_id)
6867
if not parent_dept:
69-
raise errors.NotFoundError(msg=t('error.dept.not_found'))
68+
raise errors.NotFoundError(msg='父级部门不存在')
7069
await dept_dao.create(db, obj)
7170

7271
@staticmethod
@@ -81,16 +80,16 @@ async def update(*, pk: int, obj: UpdateDeptParam) -> int:
8180
async with async_db_session.begin() as db:
8281
dept = await dept_dao.get(db, pk)
8382
if not dept:
84-
raise errors.NotFoundError(msg=t('error.dept.not_found'))
83+
raise errors.NotFoundError(msg='部门不存在')
8584
if dept.name != obj.name:
8685
if await dept_dao.get_by_name(db, obj.name):
87-
raise errors.ConflictError(msg=t('error.dept.exists'))
86+
raise errors.ConflictError(msg='部门名称已存在')
8887
if obj.parent_id:
8988
parent_dept = await dept_dao.get(db, obj.parent_id)
9089
if not parent_dept:
91-
raise errors.NotFoundError(msg=t('error.dept.parent.not_found'))
90+
raise errors.NotFoundError(msg='父级部门不存在')
9291
if obj.parent_id == dept.id:
93-
raise errors.ForbiddenError(msg=t('error.dept.parent.related_self_not_allowed'))
92+
raise errors.ForbiddenError(msg='禁止关联自身为父级')
9493
count = await dept_dao.update(db, pk, obj)
9594
return count
9695

@@ -105,10 +104,10 @@ async def delete(*, pk: int) -> int:
105104
async with async_db_session.begin() as db:
106105
dept = await dept_dao.get_with_relation(db, pk)
107106
if dept.users:
108-
raise errors.ConflictError(msg=t('error.dept.exists_users'))
107+
raise errors.ConflictError(msg='部门下存在用户,无法删除')
109108
children = await dept_dao.get_children(db, pk)
110109
if children:
111-
raise errors.ConflictError(msg=t('error.dept.exists_children'))
110+
raise errors.ConflictError(msg='部门下存在子部门,无法删除')
112111
count = await dept_dao.delete(db, pk)
113112
for user in dept.users:
114113
await redis_client.delete(f'{settings.JWT_USER_REDIS_PREFIX}:{user.id}')

backend/app/admin/service/menu_service.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from backend.app.admin.model import Menu
99
from backend.app.admin.schema.menu import CreateMenuParam, UpdateMenuParam
1010
from backend.common.exception import errors
11-
from backend.common.i18n import t
1211
from backend.core.conf import settings
1312
from backend.database.db import async_db_session
1413
from backend.database.redis import redis_client
@@ -29,7 +28,7 @@ async def get(*, pk: int) -> Menu:
2928
async with async_db_session() as db:
3029
menu = await menu_dao.get(db, menu_id=pk)
3130
if not menu:
32-
raise errors.NotFoundError(msg=t('error.menu.not_found'))
31+
raise errors.NotFoundError(msg='菜单不存在')
3332
return menu
3433

3534
@staticmethod
@@ -79,11 +78,11 @@ async def create(*, obj: CreateMenuParam) -> None:
7978
async with async_db_session.begin() as db:
8079
title = await menu_dao.get_by_title(db, obj.title)
8180
if title:
82-
raise errors.ConflictError(msg=t('error.menu.exists'))
81+
raise errors.ConflictError(msg='菜单标题已存在')
8382
if obj.parent_id:
8483
parent_menu = await menu_dao.get(db, obj.parent_id)
8584
if not parent_menu:
86-
raise errors.NotFoundError(msg=t('error.menu.not_found'))
85+
raise errors.NotFoundError(msg='父级菜单不存在')
8786
await menu_dao.create(db, obj)
8887

8988
@staticmethod
@@ -98,16 +97,16 @@ async def update(*, pk: int, obj: UpdateMenuParam) -> int:
9897
async with async_db_session.begin() as db:
9998
menu = await menu_dao.get(db, pk)
10099
if not menu:
101-
raise errors.NotFoundError(msg=t('error.menu.not_found'))
100+
raise errors.NotFoundError(msg='菜单不存在')
102101
if menu.title != obj.title:
103102
if await menu_dao.get_by_title(db, obj.title):
104-
raise errors.ConflictError(msg=t('error.menu.exists'))
103+
raise errors.ConflictError(msg='菜单标题已存在')
105104
if obj.parent_id:
106105
parent_menu = await menu_dao.get(db, obj.parent_id)
107106
if not parent_menu:
108-
raise errors.NotFoundError(msg=t('error.menu.parent.not_found'))
107+
raise errors.NotFoundError(msg='父级菜单不存在')
109108
if obj.parent_id == menu.id:
110-
raise errors.ForbiddenError(msg=t('error.menu.parent.related_self_not_allowed'))
109+
raise errors.ForbiddenError(msg='禁止关联自身为父级')
111110
count = await menu_dao.update(db, pk, obj)
112111
for role in await menu.awaitable_attrs.roles:
113112
for user in await role.awaitable_attrs.users:
@@ -125,7 +124,7 @@ async def delete(*, pk: int) -> int:
125124
async with async_db_session.begin() as db:
126125
children = await menu_dao.get_children(db, pk)
127126
if children:
128-
raise errors.ConflictError(msg=t('error.menu.exists_children'))
127+
raise errors.ConflictError(msg='菜单下存在子菜单,无法删除')
129128
menu = await menu_dao.get(db, pk)
130129
count = await menu_dao.delete(db, pk)
131130
if menu:

backend/app/admin/service/plugin_service.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
from backend.common.enums import PluginType, StatusType
1414
from backend.common.exception import errors
15-
from backend.common.i18n import t
1615
from backend.core.conf import settings
1716
from backend.core.path_conf import PLUGIN_DIR
1817
from backend.database.redis import redis_client
@@ -55,10 +54,10 @@ async def install(*, type: PluginType, file: UploadFile | None = None, repo_url:
5554
"""
5655
if type == PluginType.zip:
5756
if not file:
58-
raise errors.RequestError(msg=t('error.plugin.zip_invalid'))
57+
raise errors.RequestError(msg='ZIP 压缩包不能为空')
5958
return await install_zip_plugin(file)
6059
if not repo_url:
61-
raise errors.RequestError(msg=t('error.plugin.git_url_invalid'))
60+
raise errors.RequestError(msg='Git 仓库地址不能为空')
6261
return await install_git_plugin(repo_url)
6362

6463
@staticmethod
@@ -71,7 +70,7 @@ async def uninstall(*, plugin: str):
7170
"""
7271
plugin_dir = os.path.join(PLUGIN_DIR, plugin)
7372
if not os.path.exists(plugin_dir):
74-
raise errors.NotFoundError(msg=t('error.plugin.not_found'))
73+
raise errors.NotFoundError(msg='插件不存在')
7574
await uninstall_requirements_async(plugin)
7675
bacup_dir = os.path.join(PLUGIN_DIR, f'{plugin}.{timezone.now().strftime("%Y%m%d%H%M%S")}.backup')
7776
shutil.move(plugin_dir, bacup_dir)
@@ -88,7 +87,7 @@ async def update_status(*, plugin: str):
8887
"""
8988
plugin_info = await redis_client.get(f'{settings.PLUGIN_REDIS_PREFIX}:{plugin}')
9089
if not plugin_info:
91-
raise errors.NotFoundError(msg=t('error.plugin.not_found'))
90+
raise errors.NotFoundError(msg='插件不存在')
9291
plugin_info = json.loads(plugin_info)
9392

9493
# 更新持久缓存状态
@@ -110,7 +109,7 @@ async def build(*, plugin: str) -> io.BytesIO:
110109
"""
111110
plugin_dir = os.path.join(PLUGIN_DIR, plugin)
112111
if not os.path.exists(plugin_dir):
113-
raise errors.NotFoundError(msg=t('error.plugin.not_found'))
112+
raise errors.NotFoundError(msg='插件不存在')
114113

115114
bio = io.BytesIO()
116115
with zipfile.ZipFile(bio, 'w') as zf:

0 commit comments

Comments
 (0)