This commit is contained in:
wangjiming
2026-07-31 16:10:34 +08:00
parent 945b4ace86
commit 242407b676
34 changed files with 3847 additions and 717 deletions

View File

@@ -21,6 +21,7 @@ import psycopg
from fastapi import (
APIRouter,
BackgroundTasks,
Request,
Body,
Depends,
File,
@@ -76,6 +77,7 @@ from app.modules.data_process.store import (
get_data_process_store,
new_id,
)
from app.db.platform_store import get_platform_store
from app.schemas.data_process import (
DataProcessRegenerateRequest,
DataProcessStatus,
@@ -148,6 +150,13 @@ def fail(status_code: int, message: str) -> HTTPException:
)
def _actor(request: Request | None) -> str | None:
if not request:
return None
auth = request.headers.get("Authorization", "")
return auth.replace("Bearer ", "").strip() or None
@contextmanager
def api_errors() -> Iterator[None]:
try:
@@ -790,9 +799,16 @@ def list_tasks(
def create_task(
payload: DataProcessTaskCreate,
store: DataProcessStore = Depends(get_data_process_store),
request: Request = None,
) -> dict[str, Any]:
with api_errors():
task = store.create_task(payload.model_dump(mode="json"))
get_platform_store().record_audit(
action="data-process.create",
actor_id=_actor(request),
target_type="data_process_task",
target_id=task["id"],
)
return ok(task, "data process task created")
@@ -854,9 +870,16 @@ def prepare_regeneration(
def delete_task(
task_id: str,
store: DataProcessStore = Depends(get_data_process_store),
request: Request = None,
) -> dict[str, Any]:
with api_errors():
store.delete_task(task_id)
get_platform_store().record_audit(
action="data-process.delete",
actor_id=_actor(request),
target_type="data_process_task",
target_id=task_id,
)
return ok({"deleted": task_id}, "data process task deleted")
@@ -875,6 +898,7 @@ async def upload_source_files(
files: list[UploadFile] = File(...),
store: DataProcessStore = Depends(get_data_process_store),
storage: LocalDataProcessStorage = Depends(get_data_process_storage),
request: Request = None,
) -> dict[str, Any]:
if not files:
raise fail(400, "at least one source file is required")
@@ -959,6 +983,12 @@ async def upload_source_files(
finally:
if not commit_attempted:
storage.discard(staged)
get_platform_store().record_audit(
action="data-process.upload",
actor_id=_actor(request),
target_type="data_process_task",
target_id=task_id,
)
return ok({"files": created}, "source files uploaded")
@@ -1701,7 +1731,14 @@ def generate(
background_tasks: BackgroundTasks,
payload: GenerateRequest = Body(default_factory=GenerateRequest),
store: DataProcessStore = Depends(get_data_process_store),
request: Request = None,
) -> dict[str, Any]:
get_platform_store().record_audit(
action="data-process.generate",
actor_id=_actor(request),
target_type="data_process_task",
target_id=task_id,
)
return _start_generation(task_id, payload, background_tasks, store)
@@ -2254,8 +2291,15 @@ def publish(
task_id: str,
payload: PublishRequest,
store: DataProcessStore = Depends(get_data_process_store),
request: Request = None,
) -> dict[str, Any]:
with api_errors():
result = store.publish(task_id, payload.model_dump(mode="json"))
message = "dataset published" if result["created"] else "dataset already published"
get_platform_store().record_audit(
action="data-process.publish",
actor_id=_actor(request),
target_type="data_process_task",
target_id=task_id,
)
return ok(result, message)