Skip to content

Commit 5c47697

Browse files
committed
fix: package error
1 parent 2d0fbe2 commit 5c47697

File tree

1 file changed

+49
-65
lines changed

1 file changed

+49
-65
lines changed

backend/common/audit/schemas/logger_decorator.py

Lines changed: 49 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
import functools
33
import json
44
import inspect
5-
from typing import Callable, Any, Optional, Dict, Union, List
5+
from typing import Callable, Any, Optional, Dict, Union
66
from fastapi import Request, HTTPException
77
from datetime import datetime
88
from pydantic import BaseModel
99
from sqlmodel import Session, select
1010
import traceback
1111
from sqlbot_xpack.audit.curd.audit import build_resource_union_query
12-
from common.audit.models.log_model import OperationType, OperationStatus, SystemLog, SystemLogsResource
12+
from common.audit.models.log_model import OperationType, OperationStatus, SystemLog
1313
from common.audit.schemas.request_context import RequestContext
1414
from apps.system.crud.user import get_user_by_account
1515
from apps.system.schemas.system_schema import UserInfoDTO, BaseUserDTO
@@ -18,36 +18,42 @@
1818
from common.core.db import engine
1919

2020

21-
def get_resource_name_by_id_and_module(session, resource_id: Any, module: str) -> List[Dict[str, str]]:
21+
22+
def get_resource_name_by_id_and_module(session, resource_id: Any, module: str) -> Optional[str]:
2223
resource_union_query = build_resource_union_query()
2324
resource_alias = resource_union_query.alias("resource")
2425

25-
# 统一处理为列表
26-
if not isinstance(resource_id, list):
27-
resource_id = [resource_id]
28-
29-
if not resource_id:
30-
return []
31-
32-
# 构建查询,使用 IN 条件
33-
query = select(
34-
resource_alias.c.id,
35-
resource_alias.c.name,
36-
resource_alias.c.module
37-
).where(
38-
and_(
39-
resource_alias.c.id.in_([str(id_) for id_ in resource_id]),
40-
resource_alias.c.module == module
41-
)
42-
)
26+
if isinstance(resource_id, list):
27+
# 处理列表情况
28+
if not resource_id:
29+
return None
4330

44-
results = session.execute(query).fetchall()
31+
# 构建查询,使用 IN 条件
32+
query = select(
33+
resource_alias.c.name
34+
).where(
35+
and_(
36+
resource_alias.c.id.in_([str(id_) for id_ in resource_id]),
37+
resource_alias.c.module == module
38+
)
39+
)
40+
# 执行查询并获取所有结果
41+
results = session.execute(query).scalars().all()
42+
43+
# 用逗号连接所有名称
44+
return ",".join(results) if results else None
45+
else:
46+
# 处理单个字符串情况
47+
query = select(
48+
resource_alias.c.name
49+
).where(
50+
and_(
51+
resource_alias.c.id == str(resource_id),
52+
resource_alias.c.module == module
53+
)
54+
)
55+
return session.execute(query).scalar()
4556

46-
return [{
47-
'resource_id': str(row.id),
48-
'resource_name': row.name or '',
49-
'module': row.module or ''
50-
} for row in results]
5157

5258
class LogConfig(BaseModel):
5359
operation_type: OperationType
@@ -384,7 +390,6 @@ async def create_log_record(
384390
remark: Optional[str] = None,
385391
oid: int = -1,
386392
opt_type_ref : OperationType = None,
387-
resource_info_list : Optional[List] = None,
388393
) -> Optional[SystemLog]:
389394
"""Create log records"""
390395
try:
@@ -417,46 +422,21 @@ async def create_log_record(
417422
error_message=error_message,
418423
module=config.module,
419424
resource_id=str(resource_id),
425+
resource_name=str(resource_name),
420426
request_method=request.method if request else None,
421427
request_path=request.url.path if request else None,
422428
request_params=request_params,
423429
create_time=datetime.now(),
424430
remark=remark
425431
)
426432

427-
428433
with Session(engine) as session:
429434
session.add(log)
435+
session.query(SystemLog).filter(SystemLog.resource_id == str(resource_id)).update({
436+
SystemLog.resource_name: str(resource_name)
437+
}, synchronize_session='fetch')
430438
session.commit()
431439
session.refresh(log)
432-
# 统一处理不同类型的 resource_id_info
433-
if isinstance(resource_id, list):
434-
resource_ids = [str(rid) for rid in resource_id]
435-
else:
436-
resource_ids = [str(resource_id)]
437-
# 批量添加 SystemLogsResource
438-
resource_entries = []
439-
for resource_id_details in resource_ids:
440-
resource_entry = SystemLogsResource(
441-
resource_id=resource_id_details,
442-
log_id=log.id,
443-
module=config.module
444-
)
445-
resource_entries.append(resource_entry)
446-
if resource_entries:
447-
session.bulk_save_objects(resource_entries)
448-
session.commit()
449-
450-
if config.operation_type == OperationType.DELETE and resource_info_list is not None:
451-
# 批量更新 SystemLogsResource 表的 resource_name
452-
for resource_info in resource_info_list:
453-
session.query(SystemLogsResource).filter(
454-
SystemLogsResource.resource_id == resource_info['resource_id'],
455-
SystemLogsResource.module == resource_info['module'],
456-
).update({
457-
SystemLogsResource.resource_name: resource_info['resource_name']
458-
}, synchronize_session='fetch')
459-
session.commit()
460440
return log
461441

462442
except Exception as e:
@@ -492,7 +472,6 @@ async def async_wrapper(*args, **kwargs):
492472
remark = None
493473
oid = -1
494474
opt_type_ref = None
495-
resource_info_list = None
496475

497476
try:
498477
# Get current request
@@ -536,7 +515,7 @@ async def async_wrapper(*args, **kwargs):
536515
resource_name = input_account
537516
if config.operation_type == OperationType.DELETE:
538517
with Session(engine) as session:
539-
resource_info_list = get_resource_name_by_id_and_module(session, resource_id, config.module)
518+
resource_name = get_resource_name_by_id_and_module(session, resource_id, config.module)
540519

541520
if config.operation_type == OperationType.CREATE_OR_UPDATE:
542521
opt_type_ref = OperationType.UPDATE if resource_id is not None else OperationType.CREATE
@@ -551,6 +530,10 @@ async def async_wrapper(*args, **kwargs):
551530
result,
552531
"result"
553532
)
533+
if config.operation_type != OperationType.DELETE:
534+
with Session(engine) as session:
535+
resource_name = get_resource_name_by_id_and_module(session, resource_id, config.module)
536+
return result
554537

555538
except Exception as e:
556539
status = OperationStatus.FAILED
@@ -585,8 +568,7 @@ async def async_wrapper(*args, **kwargs):
585568
remark=remark,
586569
request=request,
587570
oid=oid,
588-
opt_type_ref=opt_type_ref,
589-
resource_info_list=resource_info_list
571+
opt_type_ref=opt_type_ref
590572
)
591573
except Exception as log_error:
592574
print(f"[SystemLogger] Log creation failed: {log_error}")
@@ -599,7 +581,6 @@ def sync_wrapper(*args, **kwargs):
599581
request = None
600582
resource_id = None
601583
resource_name = None
602-
resource_info_list = None
603584
result = None
604585

605586
try:
@@ -621,7 +602,7 @@ def sync_wrapper(*args, **kwargs):
621602
# Obtain client information
622603
if config.operation_type == OperationType.DELETE:
623604
with Session(engine) as session:
624-
resource_info_list = get_resource_name_by_id_and_module(session, resource_id, config.module)
605+
resource_name = get_resource_name_by_id_and_module(session, resource_id, config.module)
625606

626607
# Execute the original function
627608
result = func(*args, **kwargs)
@@ -634,6 +615,10 @@ def sync_wrapper(*args, **kwargs):
634615
"result"
635616
)
636617

618+
if config.operation_type != OperationType.DELETE:
619+
with Session(engine) as session:
620+
resource_name = get_resource_name_by_id_and_module(session, resource_id, config.module)
621+
637622
return result
638623

639624
except Exception as e:
@@ -667,8 +652,7 @@ def sync_wrapper(*args, **kwargs):
667652
error_message=error_message,
668653
resource_id=resource_id,
669654
resource_name=resource_name,
670-
request=request,
671-
resource_info_list=resource_info_list
655+
request=request
672656
)
673657
)
674658
else:

0 commit comments

Comments
 (0)