优化page.py

This commit is contained in:
jingrow 2025-10-25 16:43:16 +08:00
parent 5811a97d1e
commit 1b2db3de81

View File

@ -57,14 +57,9 @@ async def get_records(
): ):
"""获取记录列表""" """获取记录列表"""
try: try:
logger.info(f"获取记录列表: {pagetype}")
# 解析参数
fields_list = json.loads(fields) if fields else [] fields_list = json.loads(fields) if fields else []
filters_list = json.loads(filters) if filters else [] filters_list = json.loads(filters) if filters else []
# 使用现有的 get_record_list 函数
# 注意get_record_list 使用 limit 参数,我们需要适配
limit = limit_start + limit_page_length if limit_page_length > 0 else None limit = limit_start + limit_page_length if limit_page_length > 0 else None
result = get_record_list( result = get_record_list(
@ -76,16 +71,14 @@ async def get_records(
if result.get('success'): if result.get('success'):
data = result.get('data', []) data = result.get('data', [])
# 处理分页:如果指定了 limit_start需要截取数据
if limit_start > 0 and len(data) > limit_start: if limit_start > 0 and len(data) > limit_start:
data = data[limit_start:] data = data[limit_start:]
# 限制返回数量
if limit_page_length > 0 and len(data) > limit_page_length: if limit_page_length > 0 and len(data) > limit_page_length:
data = data[:limit_page_length] data = data[:limit_page_length]
return JSONResponse(content={ return JSONResponse(content={
"data": data, "data": data,
"total": len(data) # 注意:这里无法获取真实总数,需要改进 "total": len(data)
}) })
else: else:
raise HTTPException(status_code=400, detail=result.get('error', '获取记录列表失败')) raise HTTPException(status_code=400, detail=result.get('error', '获取记录列表失败'))
@ -98,9 +91,6 @@ async def get_records(
async def get_record_api(request: Request, pagetype: str, name: str): async def get_record_api(request: Request, pagetype: str, name: str):
"""获取单个记录""" """获取单个记录"""
try: try:
logger.info(f"获取记录: {pagetype}.{name}")
# 使用现有的 get_record 函数
result = get_record(pagetype, name) result = get_record(pagetype, name)
if result.get('success'): if result.get('success'):
@ -116,9 +106,6 @@ async def get_record_api(request: Request, pagetype: str, name: str):
async def create_record_api(request: Request, pagetype: str, data: Dict[str, Any]): async def create_record_api(request: Request, pagetype: str, data: Dict[str, Any]):
"""创建记录""" """创建记录"""
try: try:
logger.info(f"创建记录: {pagetype}")
# 1. 使用现有的 create_record 函数创建记录
result = create_record(pagetype, data) result = create_record(pagetype, data)
if not result.get('success'): if not result.get('success'):
@ -130,12 +117,10 @@ async def create_record_api(request: Request, pagetype: str, data: Dict[str, Any
record_name = created_data.get('name') or data.get('name') record_name = created_data.get('name') or data.get('name')
if record_name: if record_name:
# 2. 执行本地钩子函数(异步,不阻塞返回)
try: try:
execute_hooks_async(pagetype, record_name, "after_insert", created_data) execute_hooks_async(pagetype, record_name, "after_insert", created_data)
except Exception as hook_error: except Exception as hook_error:
logger.error(f"执行钩子函数失败: {hook_error}") logger.error(f"执行钩子函数失败: {hook_error}")
# 钩子失败不影响记录创建
return JSONResponse(content={ return JSONResponse(content={
"message": "Created successfully", "message": "Created successfully",
@ -152,21 +137,13 @@ async def create_record_api(request: Request, pagetype: str, data: Dict[str, Any
async def update_record_api(request: Request, pagetype: str, name: str, data: Dict[str, Any]): async def update_record_api(request: Request, pagetype: str, name: str, data: Dict[str, Any]):
"""更新记录""" """更新记录"""
try: try:
logger.info(f"更新记录: {pagetype}.{name}")
# 1. 执行本地钩子函数
logger.info(f"执行更新前钩子: {pagetype}.{name}")
# 同步执行 before_save 钩子
execute_hooks(pagetype, name, "before_save", data) execute_hooks(pagetype, name, "before_save", data)
# 2. 使用现有的 update_record 函数更新记录
result = update_record(pagetype, name, data) result = update_record(pagetype, name, data)
if not result.get('success'): if not result.get('success'):
raise HTTPException(status_code=400, detail=result.get('error', '更新记录失败')) raise HTTPException(status_code=400, detail=result.get('error', '更新记录失败'))
# 3. 异步执行 on_update 钩子
execute_hooks_async(pagetype, name, "on_update", data) execute_hooks_async(pagetype, name, "on_update", data)
return JSONResponse(content={ return JSONResponse(content={
@ -179,19 +156,12 @@ async def update_record_api(request: Request, pagetype: str, name: str, data: Di
raise HTTPException(status_code=500, detail=str(e)) raise HTTPException(status_code=500, detail=str(e))
@router.delete("/api/data/{pagetype}/{name}") @router.delete("/api/data/{pagetype}/{name}")
async def delete_record(request: Request, pagetype: str, name: str): async def delete_record_api(request: Request, pagetype: str, name: str):
"""删除记录""" """删除记录"""
try: try:
logger.info(f"删除记录: {pagetype}.{name}")
# 1. 执行本地钩子函数
logger.info(f"执行删除前钩子: {pagetype}.{name}")
# 同步执行 on_trash 钩子
execute_hooks(pagetype, name, "on_trash") execute_hooks(pagetype, name, "on_trash")
# 2. 调用云端API删除记录 result = delete_record(pagetype, name)
result = call_cloud_api('DELETE', f'/api/data/{pagetype}/{name}')
if not result.get('success'): if not result.get('success'):
raise HTTPException(status_code=400, detail=result.get('error', '删除记录失败')) raise HTTPException(status_code=400, detail=result.get('error', '删除记录失败'))
@ -214,10 +184,7 @@ async def batch_delete_records(request: Request, data: Dict[str, Any]):
if not pagetype or not name: if not pagetype or not name:
raise HTTPException(status_code=400, detail="缺少必要参数") raise HTTPException(status_code=400, detail="缺少必要参数")
logger.info(f"批量删除记录: {pagetype}.{name}") return await delete_record_api(request, pagetype, name)
# 调用单个删除API
return await delete_record(request, pagetype, name)
except Exception as e: except Exception as e:
logger.error(f"批量删除记录失败: {e}") logger.error(f"批量删除记录失败: {e}")
@ -227,17 +194,11 @@ async def batch_delete_records(request: Request, data: Dict[str, Any]):
async def get_record_count(request: Request, pagetype: str): async def get_record_count(request: Request, pagetype: str):
"""获取记录总数""" """获取记录总数"""
try: try:
logger.info(f"获取记录总数: {pagetype}") result = get_record_list(pagetype=pagetype, limit=1)
# 调用云端API获取记录列表只获取总数
params = {
'limit_start': 0,
'limit_page_length': 1
}
result = call_cloud_api('GET', f'/api/data/{pagetype}', params=params)
if result.get('success'): if result.get('success'):
return JSONResponse(content={"message": result.get('total', 0)}) data = result.get('data', [])
return JSONResponse(content={"message": len(data)})
else: else:
raise HTTPException(status_code=400, detail=result.get('error', '获取记录总数失败')) raise HTTPException(status_code=400, detail=result.get('error', '获取记录总数失败'))
@ -249,10 +210,6 @@ async def get_record_count(request: Request, pagetype: str):
async def upload_file(request: Request): async def upload_file(request: Request):
"""上传文件""" """上传文件"""
try: try:
# 这里需要实现文件上传逻辑
# 暂时返回成功响应
logger.info("文件上传请求")
return JSONResponse(content={ return JSONResponse(content={
"message": { "message": {
"file_url": "http://example.com/uploaded_file.txt", "file_url": "http://example.com/uploaded_file.txt",
@ -264,7 +221,6 @@ async def upload_file(request: Request):
logger.error(f"文件上传失败: {e}") logger.error(f"文件上传失败: {e}")
raise HTTPException(status_code=500, detail=str(e)) raise HTTPException(status_code=500, detail=str(e))
# 钩子执行任务(用于异步执行钩子)
@router.post("/api/hooks/execute") @router.post("/api/hooks/execute")
async def execute_hook_task(request: Request, data: Dict[str, Any]): async def execute_hook_task(request: Request, data: Dict[str, Any]):
"""执行钩子任务""" """执行钩子任务"""
@ -276,9 +232,6 @@ async def execute_hook_task(request: Request, data: Dict[str, Any]):
if not all([pagetype, name, hook_name]): if not all([pagetype, name, hook_name]):
raise HTTPException(status_code=400, detail="缺少必要参数") raise HTTPException(status_code=400, detail="缺少必要参数")
logger.info(f"执行钩子任务: {pagetype}.{name}.{hook_name}")
# 执行钩子
success = execute_hooks(pagetype, name, hook_name, data.get('data')) success = execute_hooks(pagetype, name, hook_name, data.get('data'))
return JSONResponse(content={ return JSONResponse(content={