feat: general:perform_general_operation

This commit is contained in:
martsforever
2025-10-15 20:12:08 +08:00
parent 1608e4327e
commit 4e2899dc33
2 changed files with 56 additions and 54 deletions
+1 -54
View File
@@ -1,12 +1,8 @@
import json
from typing import Literal
from fastapi import FastAPI from fastapi import FastAPI
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import JSONResponse from starlette.responses import JSONResponse
from app.general.ModuleConfigModule import ModuleConfigModule from app.general.perform_general_operation import perform_general_operation
from app.general.general_utils.sql_service import sql_service
from app.utils.db_utils import AsyncSessionDep from app.utils.db_utils import AsyncSessionDep
@@ -23,52 +19,3 @@ def add_general_route(app: FastAPI):
return result return result
finally: finally:
await session.close() await session.close()
async def perform_general_operation(
session: AsyncSessionDep,
module: str,
data: dict,
debug_data=None,
user=None,
type: Literal['list', 'item', 'insert', 'update', 'delete', 'batch_insert', 'batch_update'] = 'query'
):
if debug_data is None:
debug_data = []
module_query_result = await get_module_config(session, module, debug_data, user)
if 'error' in module_query_result:
return module_query_result
module_config = module_query_result.get('result', {"": ""}).get('moduleConfig', None)
if module_config is not None:
module_config = json.loads(module_config)
if module_config is None:
return {
"error": f"Can't find module config match: {module}",
"body": module_query_result,
}
if type == 'list':
return await sql_service.list(session, data, module_config, debug_data, user)
elif type == 'item':
return await sql_service.item(session, data, module_config, debug_data, user)
elif type == 'insert':
return await sql_service.insert(session, data, module_config, debug_data, user)
elif type == 'update':
return await sql_service.update(session, data, module_config, debug_data, user)
elif type == 'batch_insert':
return await sql_service.batch_insert(session, data, module_config, debug_data, user)
elif type == 'batch_update':
return await sql_service.batch_update(session, data, module_config, debug_data, user)
elif type == 'delete':
return await sql_service.delete(session, data, module_config, debug_data, user)
else:
return {"error": f"Can't handle operation type: {type}"}
async def get_module_config(session: AsyncSessionDep, module: str, debug_data=None, user=None):
return await sql_service.item(session, {"code": module}, ModuleConfigModule, debug_data, user)
+55
View File
@@ -0,0 +1,55 @@
import json
from typing import Literal
from app.general.ModuleConfigModule import ModuleConfigModule
from app.general.general_utils.sql_service import sql_service
from app.utils.db_utils import AsyncSessionDep
async def perform_general_operation(
session: AsyncSessionDep,
module: str,
data: dict,
debug_data=None,
user=None,
type: Literal['list', 'item', 'insert', 'update', 'delete', 'batch_insert', 'batch_update'] = 'query'
):
if debug_data is None:
debug_data = []
module_query_result = await get_module_config(session, module, debug_data, user)
if 'error' in module_query_result:
return module_query_result
module_config = module_query_result.get('result', {"": ""}).get('moduleConfig', None)
if module_config is not None:
module_config = json.loads(module_config)
if module_config is None:
return {
"error": f"Can't find module config match: {module}",
"body": module_query_result,
}
if type == 'list':
return await sql_service.list(session, data, module_config, debug_data, user)
elif type == 'item':
return await sql_service.item(session, data, module_config, debug_data, user)
elif type == 'insert':
return await sql_service.insert(session, data, module_config, debug_data, user)
elif type == 'update':
return await sql_service.update(session, data, module_config, debug_data, user)
elif type == 'batch_insert':
return await sql_service.batch_insert(session, data, module_config, debug_data, user)
elif type == 'batch_update':
return await sql_service.batch_update(session, data, module_config, debug_data, user)
elif type == 'delete':
return await sql_service.delete(session, data, module_config, debug_data, user)
else:
return {"error": f"Can't handle operation type: {type}"}
async def get_module_config(session: AsyncSessionDep, module: str, debug_data=None, user=None):
return await sql_service.item(session, {"code": module}, ModuleConfigModule, debug_data, user)