"""OKR 路由。""" 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.okr import OKR from app.models.user import User from app.schemas.common import ApiResponse, success from app.services.okr_agent import track_okr_progress router = APIRouter(prefix="/okrs", tags=["okrs"]) @router.get("", response_model=ApiResponse[list]) async def list_okrs(company_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """获取 OKR 列表。""" query = select(OKR) if company_id: query = query.where(OKR.company_id == company_id) result = await db.execute(query.order_by(OKR.quarter.desc())) items = result.scalars().all() return success(data=[ { "id": str(i.id), "company_id": str(i.company_id), "quarter": i.quarter, "objective": i.objective, "key_results": i.key_results, "alignment_score": i.alignment_score, "deviation_alerts": i.deviation_alerts, "review_notes": i.review_notes, "status": i.status, } for i in items ]) @router.post("", response_model=ApiResponse[dict], status_code=status.HTTP_201_CREATED) async def create_okr(req: dict, db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """创建 OKR。""" okr = OKR( company_id=req.get("company_id"), quarter=req.get("quarter"), objective=req.get("objective"), key_results=req.get("key_results"), ) db.add(okr) await db.flush() return success(data={"id": str(okr.id)}, message="创建成功") @router.post("/{okr_id}/track", response_model=ApiResponse[dict]) async def track_okr(okr_id: str, req: dict, user: User = Depends(get_current_user)): """AI 追踪 KR 进展。""" result = await track_okr_progress(req.get("key_results", [])) return success(data=result)