feat: 添加公司AI管理平台基础架构 添加了完整的FastAPI后端项目结构,包括: - 环境配置文件(.env.example)和项目说明文档(README.md、AGENTS.md) - Dockerfile用于容器化部署 - 核心基础设施:配置管理、数据库连接、调度器、安全认证 - 模块化设计:AI代理、审批流程、审计日志、业务台账等功能模块 - 支持多数据库连接(主库和遗留系统只读库) - AI适配器支持OpenClaw、Hermes、OpenAI兼容接口 - 飞书集成、报表生成、风险监控等企业级功能 - 完整的依赖管理和测试指南 ```
72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
from fastapi import APIRouter, Depends, HTTPException
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.core.database import get_db
|
|
from app.core.security import require_api_key
|
|
from app.modules.business.registry import DOMAIN_MODELS
|
|
from app.modules.business.schemas import DomainListRead, DomainRecordCreate, DomainRecordUpdate
|
|
from app.modules.business.service import BusinessService
|
|
|
|
router = APIRouter(dependencies=[Depends(require_api_key)])
|
|
|
|
|
|
@router.get("/domains")
|
|
def list_domains() -> dict[str, list[str]]:
|
|
return {"domains": sorted(DOMAIN_MODELS)}
|
|
|
|
|
|
@router.get("/{domain}", response_model=DomainListRead)
|
|
def list_records(
|
|
domain: str,
|
|
limit: int = 50,
|
|
offset: int = 0,
|
|
status: str | None = None,
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
try:
|
|
total, items = BusinessService(db).list_records(domain, limit, offset, status)
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail=str(exc)) from exc
|
|
return {"domain": domain, "total": total, "items": items}
|
|
|
|
|
|
@router.get("/{domain}/{record_id}")
|
|
def get_record(domain: str, record_id: int, db: Session = Depends(get_db)) -> dict:
|
|
try:
|
|
return {"domain": domain, "data": BusinessService(db).get_record(domain, record_id)}
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail=str(exc)) from exc
|
|
|
|
|
|
@router.post("/{domain}")
|
|
def create_record(
|
|
domain: str,
|
|
payload: DomainRecordCreate,
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
try:
|
|
data = BusinessService(db).create_record(domain, payload.data, payload.actor)
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail=str(exc)) from exc
|
|
return {"domain": domain, "data": data}
|
|
|
|
|
|
@router.patch("/{domain}/{record_id}")
|
|
def update_record(
|
|
domain: str,
|
|
record_id: int,
|
|
payload: DomainRecordUpdate,
|
|
db: Session = Depends(get_db),
|
|
) -> dict:
|
|
try:
|
|
data = BusinessService(db).update_record(
|
|
domain,
|
|
record_id,
|
|
payload.data,
|
|
actor=payload.actor,
|
|
approval_ticket_id=payload.approval_ticket_id,
|
|
)
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail=str(exc)) from exc
|
|
return {"domain": domain, "data": data}
|