Files
aiagent/backend/app/api/company_presets.py
renjianbo f2e65a8fbb feat: virtual company module, team projects, PWA dishes app, and startup scripts overhaul
- Add company module (3-tier org, CEO planning, parallel departments)
- Add company orchestrator, knowledge extractor, presets, scheduler
- Add company API endpoints, models, and frontend views
- Add 今天吃啥 PWA app (69 dishes, real images, offline support)
- Add team_projects output directory structure
- Add unified manage.ps1 for service lifecycle
- Add Windows startup guide v1.0
- Add TTS troubleshooting doc
- Update frontend (AgentChat UX overhaul, new views)
- Update backend (voice engine fix, multi-tenant, RBAC)
- Remove deprecated startup scripts and old docs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-10 22:37:56 +08:00

88 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
公司组织班底预设包 API — 一键创建全套 AI 数字员工
"""
from __future__ import annotations
import logging
from typing import Any, Dict, List, Optional
from fastapi import APIRouter, Depends, HTTPException, Query
from pydantic import BaseModel, Field
from sqlalchemy.orm import Session
from app.api.auth import get_current_user
from app.core.database import get_db
from app.models.user import User
from app.services.company_presets import (
list_company_presets,
get_company_preset,
create_company_preset,
)
logger = logging.getLogger(__name__)
router = APIRouter(
prefix="/api/v1/company-presets",
tags=["company-presets"],
responses={
401: {"description": "未授权"},
400: {"description": "请求参数错误"},
404: {"description": "预设包不存在"},
},
)
class CreateCompanyPresetRequest(BaseModel):
workspace_id: Optional[str] = Field(None, description="工作区 ID")
selected_roles: Optional[List[str]] = Field(None, description="要创建的角色 role key 列表,不传则创建全部")
@router.get("")
def list_presets(
_current_user: User = Depends(get_current_user),
):
"""获取所有可用行业预设包列表(含角色预览,不含完整 prompt)。"""
presets = list_company_presets()
return {"presets": presets, "total": len(presets)}
@router.get("/{preset_type}")
def get_preset(
preset_type: str,
_current_user: User = Depends(get_current_user),
):
"""获取单个行业预设包的详细信息(含全部角色配置)。"""
preset = get_company_preset(preset_type)
if not preset:
raise HTTPException(status_code=404, detail=f"预设包 '{preset_type}' 不存在")
return preset
@router.post("/{preset_type}", status_code=201)
def create_preset(
preset_type: str,
body: CreateCompanyPresetRequest = CreateCompanyPresetRequest(),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_user),
):
"""一键创建全套公司 AI 数字员工。
支持通过 `selected_roles` 字段筛选要创建的角色,不传则创建预设包的全部角色。
"""
try:
result = create_company_preset(
db=db,
preset_type=preset_type,
user_id=current_user.id,
workspace_id=body.workspace_id,
selected_roles=body.selected_roles,
)
except ValueError as e:
raise HTTPException(status_code=400, detail=str(e))
logger.info(
"用户 %s 创建公司预设包 %s: 新建=%d 复用=%d",
current_user.id, preset_type, result["created"], result["reused"],
)
return result