"""多主体画像路由。""" 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.profile import FirmProfile, FundProfile, ManagerProfile from app.models.user import User from app.schemas.common import ApiResponse, success router = APIRouter(prefix="/profiles", tags=["profiles"]) @router.get("/firms", response_model=ApiResponse[list]) async def list_firms( db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user), ): """获取投资机构列表。""" result = await db.execute( select(FirmProfile).where(FirmProfile.tenant_id == user.tenant_id) ) items = result.scalars().all() return success(data=[ {"id": str(i.id), "name": i.name, "focus_areas": i.focus_areas, "stage_preference": i.stage_preference, "description": i.description} for i in items ]) @router.post("/firms", response_model=ApiResponse[dict], status_code=status.HTTP_201_CREATED) async def create_firm(req: dict, db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """创建投资机构画像。""" firm = FirmProfile( tenant_id=user.tenant_id, name=req.get("name"), focus_areas=req.get("focus_areas"), stage_preference=req.get("stage_preference"), description=req.get("description"), ) db.add(firm) await db.flush() return success(data={"id": str(firm.id)}, message="创建成功") @router.get("/funds", response_model=ApiResponse[list]) async def list_funds(firm_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """获取基金列表。""" query = select(FundProfile) if firm_id: query = query.where(FundProfile.firm_id == firm_id) result = await db.execute(query) items = result.scalars().all() return success(data=[ {"id": str(i.id), "firm_id": str(i.firm_id), "name": i.name, "fund_size": i.fund_size, "vintage_year": i.vintage_year, "strategy": i.strategy} for i in items ]) @router.get("/managers", response_model=ApiResponse[list]) async def list_managers(firm_id: str | None = Query(default=None), db: AsyncSession = Depends(get_db), user: User = Depends(get_current_user)): """获取投资经理列表。""" query = select(ManagerProfile) if firm_id: query = query.where(ManagerProfile.firm_id == firm_id) result = await db.execute(query) items = result.scalars().all() return success(data=[ {"id": str(i.id), "firm_id": str(i.firm_id), "name": i.name, "focus_areas": i.focus_areas, "portfolio_count": i.portfolio_count} for i in items ])