b0f2e4712a
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 48h55m59s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 48h55m59s
- 新增 Tag 领域实体 + TagModel/AssetTagModel ORM 模型
- Alembic 迁移 030:tags 表 + asset_tags 关联表
- TagRepository 端口 + SQLAlchemy/InMemory 实现
- Asset.tag_ids 多对多关联替代原 JSON tags
- GET /tags / POST /tags / DELETE /tags/{tag_id} 标签 CRUD
- POST /assets/{asset_id}/tags 打标 / DELETE 取消标签
- GET /assets 新增 tag_ids 筛选参数(逗号分隔,取交集)
- 19 个单元测试全部通过
154 lines
4.2 KiB
Python
Executable File
154 lines
4.2 KiB
Python
Executable File
from app.api.routes.asset_diagnosis import router as asset_diagnosis_router
|
|
from app.api.routes.asset_libraries import router as asset_libraries_router
|
|
from app.api.routes.assets import router as assets_router
|
|
from app.api.routes.auth import router as auth_router
|
|
from app.api.routes.chunked_upload import router as chunked_upload_router
|
|
from app.api.routes.classification_jobs import router as classification_jobs_router
|
|
from app.api.routes.dashboard import router as dashboard_router
|
|
from app.api.routes.duplication import router as duplication_router
|
|
from app.api.routes.edit_plans import router as edit_plans_router
|
|
from app.api.routes.edit_templates import router as edit_templates_router
|
|
from app.api.routes.generated_videos import router as generated_videos_router
|
|
from app.api.routes.generation_tasks import router as generation_tasks_router
|
|
from app.api.routes.health import router as health_check_router
|
|
from app.api.routes.ingest_jobs import router as ingest_jobs_router
|
|
from app.api.routes.jobs import router as jobs_router
|
|
from app.api.routes.projects import router as projects_router
|
|
from app.api.routes.recipes import router as recipes_router
|
|
from app.api.routes.subscription import router as subscription_router
|
|
from app.api.routes.tags import router as tags_router
|
|
from app.api.routes.task_center import router as task_center_router
|
|
from app.api.routes.templates import router as templates_router
|
|
from app.api.routes.titles import router as titles_router
|
|
from app.api.routes.tts import router as tts_router
|
|
from app.api.routes.upload import router as upload_router
|
|
from app.api.routes.voice_clones import router as voice_clones_router
|
|
from app.api.routes.voices import router as voices_router
|
|
from fastapi import APIRouter
|
|
|
|
api_router = APIRouter(prefix="/api/v1")
|
|
health_router = APIRouter()
|
|
health_router.include_router(health_check_router)
|
|
|
|
api_router.include_router(
|
|
auth_router,
|
|
tags=["Auth"],
|
|
)
|
|
api_router.include_router(
|
|
projects_router,
|
|
prefix="/projects",
|
|
tags=["Project"],
|
|
)
|
|
api_router.include_router(
|
|
tags_router,
|
|
prefix="/tags",
|
|
tags=["Tag"],
|
|
)
|
|
api_router.include_router(
|
|
task_center_router,
|
|
tags=["TaskCenter"],
|
|
)
|
|
api_router.include_router(
|
|
asset_diagnosis_router,
|
|
tags=["AssetDiagnosis"],
|
|
)
|
|
api_router.include_router(
|
|
asset_libraries_router,
|
|
prefix="/asset-libraries",
|
|
tags=["AssetLibrary"],
|
|
)
|
|
api_router.include_router(
|
|
assets_router,
|
|
prefix="/assets",
|
|
tags=["Asset"],
|
|
)
|
|
api_router.include_router(
|
|
ingest_jobs_router,
|
|
prefix="/ingest-jobs",
|
|
tags=["IngestJob"],
|
|
)
|
|
api_router.include_router(
|
|
classification_jobs_router,
|
|
prefix="/classification-jobs",
|
|
tags=["ClassificationJob"],
|
|
)
|
|
api_router.include_router(
|
|
upload_router,
|
|
prefix="/upload",
|
|
tags=["Upload"],
|
|
)
|
|
api_router.include_router(
|
|
chunked_upload_router,
|
|
prefix="/upload/chunk",
|
|
tags=["ChunkedUpload"],
|
|
)
|
|
api_router.include_router(
|
|
generation_tasks_router,
|
|
prefix="/generation",
|
|
tags=["Generation"],
|
|
)
|
|
api_router.include_router(
|
|
jobs_router,
|
|
tags=["Job"],
|
|
)
|
|
api_router.include_router(
|
|
generated_videos_router,
|
|
prefix="/generated-videos",
|
|
tags=["GeneratedVideo"],
|
|
)
|
|
api_router.include_router(
|
|
titles_router,
|
|
prefix="/titles",
|
|
tags=["TitleLibrary"],
|
|
)
|
|
api_router.include_router(
|
|
voices_router,
|
|
prefix="/voices",
|
|
tags=["VoiceLibrary"],
|
|
)
|
|
api_router.include_router(
|
|
voice_clones_router,
|
|
prefix="/voice-clones",
|
|
tags=["VoiceClone"],
|
|
)
|
|
api_router.include_router(
|
|
duplication_router,
|
|
prefix="/duplication",
|
|
tags=["Duplication"],
|
|
)
|
|
api_router.include_router(
|
|
subscription_router,
|
|
prefix="/subscription",
|
|
tags=["Subscription"],
|
|
)
|
|
api_router.include_router(
|
|
recipes_router,
|
|
prefix="/recipes",
|
|
tags=["Recipe"],
|
|
)
|
|
api_router.include_router(
|
|
templates_router,
|
|
prefix="/templates",
|
|
tags=["Template"],
|
|
)
|
|
api_router.include_router(
|
|
dashboard_router,
|
|
prefix="/dashboard",
|
|
tags=["Dashboard"],
|
|
)
|
|
api_router.include_router(
|
|
edit_templates_router,
|
|
prefix="/edit-templates",
|
|
tags=["EditTemplate"],
|
|
)
|
|
api_router.include_router(
|
|
edit_plans_router,
|
|
prefix="/edit-plans",
|
|
tags=["EditPlan"],
|
|
)
|
|
api_router.include_router(
|
|
tts_router,
|
|
prefix="/tts",
|
|
tags=["TTS"],
|
|
)
|