Files
company-ai-platform/app/modules/legacy_mysql/routes.py
JiuContinent dc8605ce3f ```
refactor(core): 重构核心模块结构并更新导入路径

- 将配置相关的设置从 app.core.config 移除
- 将常量定义从 app.core.constants 移除
- 将数据库相关功能从 app.core.database 移除
- 将基础数据库模型从 app.core.db_base 移除
- 将敏感信息掩码功能从 app.core.masking 移除
- 将中间件定义从 app.core.middleware 移除
- 将操作保护功能从 app.core.operation_guard 移除
- 将分页工具从 app.core.pagination 移除
- 将请求上下文管理从 app.core.request_context 移除
- 将调度器功能从 app.core.scheduler 移除
- 将安全认证逻辑从 app.core.security 移除
- 将任务队列相关功能从 app.core.task_queue 移除
- 将时间工具从 app.core.time 移除
- 更新 alembic 配置中的 Base 模型导入路径
- 更新各模块中对重构后组件的引用路径
```
2026-07-09 17:41:16 +08:00

123 lines
3.8 KiB
Python

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from app.core.background.task_queue import enqueue_legacy_project_sync, enqueue_legacy_task_sync
from app.core.database import get_db
from app.core.http.masking import mask_configured
from app.core.security import ApiPrincipal, require_api_key, require_operations_enabled
from app.modules.legacy_mysql.schemas import (
LegacyProjectSyncRequest,
LegacyProjectSyncResult,
LegacyTaskSyncRequest,
LegacyTaskSyncResult,
QueryResult,
ReadonlyQueryRequest,
)
from app.modules.legacy_mysql.service import LegacyMySQLService
router = APIRouter(dependencies=[Depends(require_api_key)])
@router.get("/health")
def mysql_health(
db: Session = Depends(get_db),
) -> dict[str, str]:
return LegacyMySQLService(db).health()
@router.post("/query", response_model=QueryResult)
def readonly_query(
payload: ReadonlyQueryRequest,
db: Session = Depends(get_db),
) -> dict:
service = LegacyMySQLService(db)
if payload.sql:
result = service.execute_readonly(payload.sql, payload.params, payload.limit)
else:
result = service.execute_allowed_query(payload.query_name, payload.params, payload.limit)
return mask_configured(result)
@router.get("/projects", response_model=QueryResult)
def default_project_query(
limit: int = Query(default=100, ge=1, le=500),
db: Session = Depends(get_db),
) -> dict:
return mask_configured(LegacyMySQLService(db).fetch_default_projects(limit=limit))
@router.get("/tasks", response_model=QueryResult)
def default_task_query(
limit: int = Query(default=100, ge=1, le=500),
db: Session = Depends(get_db),
) -> dict:
return mask_configured(LegacyMySQLService(db).fetch_default_tasks(limit=limit))
@router.post("/projects/sync", response_model=LegacyProjectSyncResult)
def sync_projects(
payload: LegacyProjectSyncRequest,
db: Session = Depends(get_db),
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
require_operations_enabled()
result = LegacyMySQLService(db).sync_projects(
source_query=payload.source_query,
source_query_name=payload.source_query_name,
field_map=payload.field_map,
limit=payload.limit,
dry_run=payload.dry_run,
actor=principal.actor,
)
return mask_configured(result)
@router.post("/projects/sync/enqueue")
def enqueue_sync_projects(
payload: LegacyProjectSyncRequest,
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
require_operations_enabled()
return enqueue_legacy_project_sync(
source_query=payload.source_query,
source_query_name=payload.source_query_name,
field_map=payload.field_map,
limit=payload.limit,
dry_run=payload.dry_run,
actor=principal.actor,
)
@router.post("/tasks/sync", response_model=LegacyTaskSyncResult)
def sync_tasks(
payload: LegacyTaskSyncRequest,
db: Session = Depends(get_db),
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
require_operations_enabled()
result = LegacyMySQLService(db).sync_tasks(
source_query=payload.source_query,
source_query_name=payload.source_query_name,
field_map=payload.field_map,
limit=payload.limit,
dry_run=payload.dry_run,
actor=principal.actor,
)
return mask_configured(result)
@router.post("/tasks/sync/enqueue")
def enqueue_sync_tasks(
payload: LegacyTaskSyncRequest,
principal: ApiPrincipal = Depends(require_api_key),
) -> dict:
require_operations_enabled()
return enqueue_legacy_task_sync(
source_query=payload.source_query,
source_query_name=payload.source_query_name,
field_map=payload.field_map,
limit=payload.limit,
dry_run=payload.dry_run,
actor=principal.actor,
)