核心功能:
- Meeting 模型:添加 host_agent_id, host_instance_id
- 会议纪要 API:记录获取 + 纪要上传 + 结束通知
- 会议结束自动通知主持龙虾生成纪要
- 平台留存纪要供参会者下载
API 端点:
- GET /api/v1/meetings/{id}/records/ - 获取会议记录(主持专用)
- POST /api/v1/meetings/{id}/minutes/upload/ - 上传纪要(主持专用)
- POST /api/v1/meetings/{id}/end-notify/ - 会议结束通知
测试:
- test_host_minutes.py: 完整流程测试通过
算力分配:
- 中央平台:消息路由 + 数据存储(轻量级)
- 主持龙虾:生成纪要(消耗用户算力)
- 平台留存:纪要供所有参会者下载
30 lines
1.6 KiB
Python
30 lines
1.6 KiB
Python
from django.contrib import admin
|
||
from django.urls import path, include, re_path
|
||
from django.views.generic import TemplateView
|
||
from rest_framework.routers import DefaultRouter
|
||
from meetings.views import MeetingViewSet, ParticipantViewSet
|
||
from users.views import LoginView, RegisterView
|
||
from instances.views import InstanceRegisterView, MeetingJoinView, InstanceListView, WebhookNotifyView
|
||
from meetings.minutes_api import MeetingRecordsView, MinutesUploadView, MeetingEndNotifyView
|
||
|
||
router = DefaultRouter()
|
||
router.register(r'meetings', MeetingViewSet, basename='meeting')
|
||
router.register(r'meetings/(?P<meeting_pk>[^/.]+)/participants', ParticipantViewSet, basename='meeting-participant')
|
||
|
||
urlpatterns = [
|
||
path("admin/", admin.site.urls),
|
||
path("", TemplateView.as_view(template_name="meeting_room.html"), name="home"),
|
||
path("api/v1/auth/login/", LoginView.as_view()),
|
||
path("api/v1/auth/register/", RegisterView.as_view()),
|
||
path("api/v1/instances/register/", InstanceRegisterView.as_view()),
|
||
path("api/v1/instances/join-meeting/", MeetingJoinView.as_view()),
|
||
path("api/v1/instances/", InstanceListView.as_view()),
|
||
path("api/v1/instances/webhook-test/", WebhookNotifyView.as_view()),
|
||
# 会议纪要 API(主持龙虾专用)
|
||
path("api/v1/meetings/<uuid:pk>/records/", MeetingRecordsView.as_view()),
|
||
path("api/v1/meetings/<uuid:pk>/minutes/upload/", MinutesUploadView.as_view()),
|
||
path("api/v1/meetings/<uuid:pk>/end-notify/", MeetingEndNotifyView.as_view()),
|
||
re_path(r'^api/v1/meetings/(?P<pk>[^/.]+)/generate-minutes/$', MeetingViewSet.as_view({'get': 'minutes'}), name='meeting-minutes'),
|
||
path("api/v1/", include(router.urls)),
|
||
]
|