2026-03-09 17:32:11 +08:00
|
|
|
|
"""
|
|
|
|
|
|
会议管理 API 路由
|
|
|
|
|
|
"""
|
|
|
|
|
|
from fastapi import APIRouter
|
|
|
|
|
|
from pydantic import BaseModel
|
|
|
|
|
|
from typing import List, Optional
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
import time
|
|
|
|
|
|
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
|
|
|
|
|
|
meetings_db = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Meeting(BaseModel):
|
|
|
|
|
|
meeting_id: str
|
|
|
|
|
|
title: str
|
|
|
|
|
|
status: str
|
|
|
|
|
|
attendees: List[str]
|
|
|
|
|
|
agenda: str
|
|
|
|
|
|
progress_summary: str
|
|
|
|
|
|
created_at: float
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class MeetingCreate(BaseModel):
|
|
|
|
|
|
title: str
|
|
|
|
|
|
agenda: str
|
|
|
|
|
|
meeting_type: str = "design_review"
|
|
|
|
|
|
attendees: List[str] = []
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-03-09 18:24:14 +08:00
|
|
|
|
@router.get("")
|
2026-03-09 17:32:11 +08:00
|
|
|
|
@router.get("/")
|
|
|
|
|
|
async def list_meetings():
|
|
|
|
|
|
"""获取所有会议列表"""
|
|
|
|
|
|
return {
|
|
|
|
|
|
"meetings": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"meeting_id": "meeting-001",
|
|
|
|
|
|
"title": "架构设计评审",
|
|
|
|
|
|
"status": "in_progress",
|
|
|
|
|
|
"attendees": ["claude-001", "kimi-001"],
|
|
|
|
|
|
"agenda": "讨论系统架构设计",
|
|
|
|
|
|
"progress_summary": "50%",
|
|
|
|
|
|
"created_at": time.time() - 7200
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"meeting_id": "meeting-002",
|
|
|
|
|
|
"title": "代码审查会议",
|
|
|
|
|
|
"status": "completed",
|
|
|
|
|
|
"attendees": ["claude-001"],
|
|
|
|
|
|
"agenda": "审查前端组件代码",
|
|
|
|
|
|
"progress_summary": "100%",
|
|
|
|
|
|
"created_at": time.time() - 86400
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("/today")
|
|
|
|
|
|
async def list_today_meetings():
|
|
|
|
|
|
"""获取今日会议"""
|
|
|
|
|
|
today = datetime.now().strftime("%Y-%m-%d")
|
|
|
|
|
|
return {
|
|
|
|
|
|
"meetings": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"meeting_id": "meeting-001",
|
|
|
|
|
|
"title": "架构设计评审",
|
|
|
|
|
|
"date": today,
|
|
|
|
|
|
"status": "in_progress",
|
|
|
|
|
|
"attendees": ["claude-001", "kimi-001"],
|
|
|
|
|
|
"steps": [
|
|
|
|
|
|
{"step_id": "step-1", "label": "收集想法", "status": "completed"},
|
|
|
|
|
|
{"step_id": "step-2", "label": "讨论迭代", "status": "active"},
|
|
|
|
|
|
{"step_id": "step-3", "label": "生成共识", "status": "pending"}
|
|
|
|
|
|
],
|
|
|
|
|
|
"discussions": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"agent_id": "claude-001",
|
|
|
|
|
|
"agent_name": "Claude Code",
|
|
|
|
|
|
"content": "建议采用微服务架构",
|
|
|
|
|
|
"timestamp": datetime.now().isoformat(),
|
|
|
|
|
|
"step": "讨论迭代"
|
|
|
|
|
|
}
|
|
|
|
|
|
],
|
|
|
|
|
|
"progress_summary": "50%",
|
|
|
|
|
|
"consensus": ""
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
"meeting_id": "meeting-002",
|
|
|
|
|
|
"title": "代码审查会议",
|
|
|
|
|
|
"date": today,
|
|
|
|
|
|
"status": "completed",
|
|
|
|
|
|
"attendees": ["claude-001"],
|
|
|
|
|
|
"steps": [
|
|
|
|
|
|
{"step_id": "step-1", "label": "代码检查", "status": "completed"},
|
|
|
|
|
|
{"step_id": "step-2", "label": "问题讨论", "status": "completed"}
|
|
|
|
|
|
],
|
|
|
|
|
|
"discussions": [],
|
|
|
|
|
|
"progress_summary": "100%",
|
|
|
|
|
|
"consensus": "代码质量良好,可以合并"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/")
|
|
|
|
|
|
async def create_meeting(meeting: MeetingCreate):
|
|
|
|
|
|
"""创建新会议"""
|
|
|
|
|
|
meeting_id = f"meeting-{int(time.time())}"
|
|
|
|
|
|
meeting_data = {
|
|
|
|
|
|
"meeting_id": meeting_id,
|
|
|
|
|
|
"title": meeting.title,
|
|
|
|
|
|
"status": "waiting",
|
|
|
|
|
|
"attendees": meeting.attendees,
|
|
|
|
|
|
"agenda": meeting.agenda,
|
|
|
|
|
|
"progress_summary": "0%",
|
|
|
|
|
|
"created_at": time.time()
|
|
|
|
|
|
}
|
|
|
|
|
|
meetings_db.append(meeting_data)
|
|
|
|
|
|
return meeting_data
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("/{meeting_id}")
|
|
|
|
|
|
async def get_meeting(meeting_id: str):
|
|
|
|
|
|
"""获取会议详情"""
|
|
|
|
|
|
for meeting in meetings_db:
|
|
|
|
|
|
if meeting["meeting_id"] == meeting_id:
|
|
|
|
|
|
return meeting
|
|
|
|
|
|
# 返回模拟数据
|
|
|
|
|
|
return {
|
|
|
|
|
|
"meeting_id": meeting_id,
|
|
|
|
|
|
"title": "测试会议",
|
|
|
|
|
|
"status": "in_progress",
|
|
|
|
|
|
"attendees": ["claude-001"],
|
|
|
|
|
|
"agenda": "测试议程",
|
|
|
|
|
|
"progress_summary": "50%",
|
|
|
|
|
|
"created_at": time.time()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/create")
|
|
|
|
|
|
async def create_meeting_api(meeting: MeetingCreate):
|
|
|
|
|
|
"""创建会议 API(前端使用的端点)"""
|
|
|
|
|
|
return await create_meeting(meeting)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/{meeting_id}/join")
|
|
|
|
|
|
async def join_meeting(meeting_id: str, data: dict):
|
|
|
|
|
|
"""Agent 加入会议"""
|
|
|
|
|
|
agent_id = data.get("agent_id", "")
|
|
|
|
|
|
return {"success": True, "meeting_id": meeting_id, "agent_id": agent_id}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/{meeting_id}/discuss")
|
|
|
|
|
|
async def add_discussion(meeting_id: str, data: dict):
|
|
|
|
|
|
"""添加讨论内容"""
|
|
|
|
|
|
return {"success": True, "meeting_id": meeting_id}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/{meeting_id}/finish")
|
|
|
|
|
|
async def finish_meeting(meeting_id: str, data: dict):
|
|
|
|
|
|
"""完成会议"""
|
|
|
|
|
|
return {"success": True, "meeting_id": meeting_id}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/{meeting_id}/progress")
|
|
|
|
|
|
async def update_progress(meeting_id: str, data: dict):
|
|
|
|
|
|
"""更新进度"""
|
|
|
|
|
|
return {"success": True, "meeting_id": meeting_id}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/record/create")
|
|
|
|
|
|
async def create_meeting_record(data: dict):
|
|
|
|
|
|
"""创建会议记录(前端使用的端点)"""
|
|
|
|
|
|
meeting_id = f"meeting-{int(time.time())}"
|
|
|
|
|
|
meeting_data = {
|
|
|
|
|
|
"meeting_id": meeting_id,
|
|
|
|
|
|
"title": data.get("title", "未命名会议"),
|
|
|
|
|
|
"agenda": data.get("agenda", ""),
|
|
|
|
|
|
"attendees": data.get("attendees", []),
|
|
|
|
|
|
"status": "waiting",
|
|
|
|
|
|
"progress_summary": "0%",
|
|
|
|
|
|
"steps": data.get("steps", []),
|
|
|
|
|
|
"discussions": [],
|
|
|
|
|
|
"created_at": time.time()
|
|
|
|
|
|
}
|
|
|
|
|
|
meetings_db.append(meeting_data)
|
|
|
|
|
|
return meeting_data
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/record/{meeting_id}/discussion")
|
|
|
|
|
|
async def add_meeting_discussion(meeting_id: str, data: dict):
|
|
|
|
|
|
"""添加会议讨论(前端使用的端点)"""
|
|
|
|
|
|
return {"success": True, "meeting_id": meeting_id, "discussion": data}
|