优化page.py
This commit is contained in:
parent
1b2db3de81
commit
a9faeb992a
@ -2,7 +2,6 @@
|
|||||||
# For license information, please see license.txt
|
# For license information, please see license.txt
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Jingrow 标准 REST API 实现
|
|
||||||
提供对云端数据库的增删改查操作,并支持本地钩子函数
|
提供对云端数据库的增删改查操作,并支持本地钩子函数
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -28,13 +27,6 @@ router = APIRouter()
|
|||||||
# 初始化队列
|
# 初始化队列
|
||||||
init_queue()
|
init_queue()
|
||||||
|
|
||||||
def get_pagetype_from_request(request: Request) -> str:
|
|
||||||
"""从请求路径中提取pagetype"""
|
|
||||||
return request.path_params.get("pagetype", "")
|
|
||||||
|
|
||||||
def get_name_from_request(request: Request) -> Optional[str]:
|
|
||||||
"""从请求路径中提取name"""
|
|
||||||
return request.path_params.get("name")
|
|
||||||
|
|
||||||
def execute_hooks(pagetype: str, name: str, hook_name: str, data: Dict[str, Any] = None):
|
def execute_hooks(pagetype: str, name: str, hook_name: str, data: Dict[str, Any] = None):
|
||||||
"""执行钩子函数"""
|
"""执行钩子函数"""
|
||||||
@ -60,7 +52,10 @@ async def get_records(
|
|||||||
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 []
|
||||||
|
|
||||||
limit = limit_start + limit_page_length if limit_page_length > 0 else None
|
if limit_page_length == 0:
|
||||||
|
limit = None
|
||||||
|
else:
|
||||||
|
limit = limit_start + limit_page_length
|
||||||
|
|
||||||
result = get_record_list(
|
result = get_record_list(
|
||||||
pagetype=pagetype,
|
pagetype=pagetype,
|
||||||
@ -71,14 +66,21 @@ async def get_records(
|
|||||||
|
|
||||||
if result.get('success'):
|
if result.get('success'):
|
||||||
data = result.get('data', [])
|
data = result.get('data', [])
|
||||||
if limit_start > 0 and len(data) > limit_start:
|
|
||||||
data = data[limit_start:]
|
if limit_page_length > 0:
|
||||||
if limit_page_length > 0 and len(data) > limit_page_length:
|
if limit_start > 0:
|
||||||
|
data = data[limit_start:]
|
||||||
data = data[:limit_page_length]
|
data = data[:limit_page_length]
|
||||||
|
|
||||||
|
estimated_total = limit_start + len(data)
|
||||||
|
if limit_page_length > 0 and len(data) < limit_page_length:
|
||||||
|
estimated_total = limit_start + len(data)
|
||||||
|
elif limit_page_length > 0:
|
||||||
|
estimated_total = limit_start + limit_page_length + 1
|
||||||
|
|
||||||
return JSONResponse(content={
|
return JSONResponse(content={
|
||||||
"data": data,
|
"data": data,
|
||||||
"total": len(data)
|
"total": estimated_total
|
||||||
})
|
})
|
||||||
else:
|
else:
|
||||||
raise HTTPException(status_code=400, detail=result.get('error', '获取记录列表失败'))
|
raise HTTPException(status_code=400, detail=result.get('error', '获取记录列表失败'))
|
||||||
@ -192,13 +194,21 @@ async def batch_delete_records(request: Request, data: Dict[str, Any]):
|
|||||||
|
|
||||||
@router.post("/api/action/jingrow.client.get_count")
|
@router.post("/api/action/jingrow.client.get_count")
|
||||||
async def get_record_count(request: Request, pagetype: str):
|
async def get_record_count(request: Request, pagetype: str):
|
||||||
"""获取记录总数"""
|
"""获取记录总数(估算)"""
|
||||||
try:
|
try:
|
||||||
result = get_record_list(pagetype=pagetype, limit=1)
|
# 获取少量数据来估算总数
|
||||||
|
result = get_record_list(pagetype=pagetype, limit=100)
|
||||||
|
|
||||||
if result.get('success'):
|
if result.get('success'):
|
||||||
data = result.get('data', [])
|
data = result.get('data', [])
|
||||||
return JSONResponse(content={"message": len(data)})
|
# 如果返回的数据少于100条,说明总数就是实际数量
|
||||||
|
if len(data) < 100:
|
||||||
|
estimated_count = len(data)
|
||||||
|
else:
|
||||||
|
# 如果返回了100条,可能还有更多,返回一个估算值
|
||||||
|
estimated_count = len(data) + 1
|
||||||
|
|
||||||
|
return JSONResponse(content={"message": estimated_count})
|
||||||
else:
|
else:
|
||||||
raise HTTPException(status_code=400, detail=result.get('error', '获取记录总数失败'))
|
raise HTTPException(status_code=400, detail=result.get('error', '获取记录总数失败'))
|
||||||
|
|
||||||
@ -206,20 +216,6 @@ async def get_record_count(request: Request, pagetype: str):
|
|||||||
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/action/upload_file")
|
|
||||||
async def upload_file(request: Request):
|
|
||||||
"""上传文件"""
|
|
||||||
try:
|
|
||||||
return JSONResponse(content={
|
|
||||||
"message": {
|
|
||||||
"file_url": "http://example.com/uploaded_file.txt",
|
|
||||||
"file_name": "uploaded_file.txt"
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
logger.error(f"文件上传失败: {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]):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user