"""协同机会路由。""" from fastapi import APIRouter, Depends, Query, status from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.core.database import get_db from app.core.dependencies import get_current_user from app.models.synergy import SynergyOpportunity from app.models.user import User from app.schemas.common import ApiResponse, success from app.services.synergy_matcher import match_synergy router = APIRouter(prefix="/synergies", tags=["synergies"]) @router.get("", response_model=ApiResponse[list]) async def list_synergies( company_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user), ): """获取协同机会列表。""" query = select(SynergyOpportunity).where(SynergyOpportunity.tenant_id == user.tenant_id) if company_id: query = query.where( (SynergyOpportunity.company_a_id == company_id) | (SynergyOpportunity.company_b_id == company_id) ) result = await db.execute(query.order_by(SynergyOpportunity.created_at.desc())) items = result.scalars().all() return success(data=[ { "id": str(i.id), "type": i.type, "company_a_id": str(i.company_a_id), "company_b_id": str(i.company_b_id), "title": i.title, "description": i.description, "match_reason": i.match_reason, "status": i.status, "authorized": i.authorized, "effect_result": i.effect_result, } for i in items ]) @router.post("", response_model=ApiResponse[dict], status_code=status.HTTP_201_CREATED) async def create_synergy(req: dict, db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """创建协同机会。""" synergy = SynergyOpportunity( tenant_id=user.tenant_id, type=req.get("type"), company_a_id=req.get("company_a_id"), company_b_id=req.get("company_b_id"), title=req.get("title"), description=req.get("description"), match_reason=req.get("match_reason"), ) db.add(synergy) await db.flush() return success(data={"id": str(synergy.id)}, message="创建成功") @router.post("/match", response_model=ApiResponse[list]) async def match_synergies(req: dict, user: User = Depends(get_current_user)): """AI 匹配协同机会。""" results = await match_synergy(req.get("company_a_context", ""), req.get("portfolio_context", "")) return success(data=results) @router.put("/{synergy_id}/authorize", response_model=ApiResponse[dict]) async def authorize_synergy(synergy_id: str, db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """授权信息交换。""" result = await db.execute( select(SynergyOpportunity).where(SynergyOpportunity.id == synergy_id, SynergyOpportunity.tenant_id == user.tenant_id) ) synergy = result.scalar_one_or_none() if not synergy: from fastapi import HTTPException raise HTTPException(status_code=404, detail="协同机会不存在") synergy.authorized = True synergy.status = "authorized" await db.flush() return success(data={"id": str(synergy.id), "authorized": True}, message="授权成功")