后端: - free_video.py: 提交/轮询/收藏/软删全链路,复用 AITask(新增 is_deleted/is_favorited, migration 0022) - video_pricing.py: 按时长 token 计费(×1.10 buffer+clamp); video_errors.py 错误归一; media_probe.py 时长探测 - catalog/volcano: Seedance free-video 模型接入+seed(migration 0023) - 素材库: FreeAssetGroup/FreeAsset(火山 Assets API 引用登记, migration 0009)+ 上传/轮询/删除接口 - settings: FREE_VIDEO_MAX_CONCURRENT 团队并发闸(默认3); CELERY_TASK_ALWAYS_EAGER 本地联调开关(生产恒关) - 测试: test_free_video.py 新增; billing/products/projects tests 配套调整 前端: - /free-create 页面+components/free-create/ 全套(输入栏/@mention 素材引用/生成卡/视频详情弹窗/素材库弹窗) - api.ts/types.ts 扩展 free-video 与 free-assets 接口; 路由/侧边栏入口接入 bug/: 测试清单 (11)(12) 与截图归档 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
29 lines
1.1 KiB
Python
29 lines
1.1 KiB
Python
from django.urls import path
|
|
from rest_framework.routers import DefaultRouter
|
|
|
|
from .views import (
|
|
AITaskViewSet,
|
|
FreeVideoDetailView,
|
|
FreeVideoFavoriteView,
|
|
FreeVideoPollView,
|
|
FreeVideoUploadView,
|
|
FreeVideoView,
|
|
GenerateImageView,
|
|
ImageConversationViewSet,
|
|
ModelConfigViewSet,
|
|
)
|
|
|
|
router = DefaultRouter()
|
|
router.register("tasks", AITaskViewSet, basename="ai-task")
|
|
router.register("models", ModelConfigViewSet, basename="model-config")
|
|
router.register("image-conversations", ImageConversationViewSet, basename="image-conversation")
|
|
|
|
urlpatterns = [
|
|
path("generate-image/", GenerateImageView.as_view(), name="ai-generate-image"),
|
|
path("free-video/", FreeVideoView.as_view(), name="ai-free-video"),
|
|
path("free-video/upload/", FreeVideoUploadView.as_view(), name="ai-free-video-upload"),
|
|
path("free-video/<uuid:task_id>/poll/", FreeVideoPollView.as_view(), name="ai-free-video-poll"),
|
|
path("free-video/<uuid:task_id>/favorite/", FreeVideoFavoriteView.as_view(), name="ai-free-video-favorite"),
|
|
path("free-video/<uuid:task_id>/", FreeVideoDetailView.as_view(), name="ai-free-video-detail"),
|
|
] + router.urls
|