管理后台上传集成API | 首页素材装修追加提词/附件
This commit is contained in:
@@ -7,6 +7,7 @@ from app.api.admin.home_material import router as home_material_router
|
||||
from app.api.admin.private_portrait import router as private_portrait_router
|
||||
from app.api.admin.recharge_package import router as recharge_package_router
|
||||
from app.api.admin.menu_config import router as menu_config_router
|
||||
from app.api.admin.upload import router as admin_upload_router
|
||||
|
||||
router = APIRouter()
|
||||
router.include_router(video_prompt_schema_config_router)
|
||||
@@ -16,3 +17,4 @@ router.include_router(home_material_router)
|
||||
router.include_router(private_portrait_router)
|
||||
router.include_router(recharge_package_router)
|
||||
router.include_router(menu_config_router)
|
||||
router.include_router(admin_upload_router)
|
||||
|
||||
@@ -336,6 +336,8 @@ async def upload_home_material_asset(
|
||||
file: UploadFile = File(..., description="图片或视频素材文件。"),
|
||||
media_type: HomeMaterialMediaType = Form(..., description="素材类型:image图片,video视频。"),
|
||||
title: str | None = Form(None, description="素材标题。为空时不再自动回填文件名。"),
|
||||
generation_prompt: str | None = Form(None, description="生成提词,可为空。"),
|
||||
media_references_json: str | None = Form(None, description="附件/参考素材JSON字符串,格式参考 generation_ai.create_task 的 media_references。"),
|
||||
watermark_type: HomeMaterialWatermarkType = Form(HomeMaterialWatermarkType.IMAGE, description="水印类型:image 图片水印;repeated_text 重复文字水印。"),
|
||||
watermark_id: str | None = Form(None, description="图片水印ID,可选。watermark_type=image 时使用。"),
|
||||
watermark_file: UploadFile | None = File(None, description="临时图片水印,可选。watermark_type=image 时使用。"),
|
||||
@@ -395,6 +397,8 @@ async def upload_home_material_asset(
|
||||
file=file,
|
||||
media_type=media_type,
|
||||
title=title,
|
||||
generation_prompt=generation_prompt,
|
||||
media_references_json=media_references_json,
|
||||
watermark_id=watermark_id,
|
||||
watermark_file=watermark_file,
|
||||
watermark_config=config,
|
||||
@@ -452,7 +456,7 @@ async def get_home_material_asset_status(
|
||||
"/assets/{asset_id}",
|
||||
response_model=HomeMaterialAssetOut,
|
||||
summary="修改首页素材展示信息",
|
||||
description="只修改行业、标题、启用状态、排序,不重新生成水印。",
|
||||
description="修改行业、标题、启用状态、排序、生成提词和附件JSON,不重新生成水印。",
|
||||
)
|
||||
async def update_home_material_asset(
|
||||
req: HomeMaterialAssetUpdate,
|
||||
@@ -465,7 +469,7 @@ async def update_home_material_asset(
|
||||
db,
|
||||
admin.id,
|
||||
admin.username,
|
||||
HomeMaterialOperationEnum.ASSET_UPDATE.value,
|
||||
(HomeMaterialOperationEnum.ASSET_GENERATION_CONFIG_UPDATE.value if (before.get("generation_prompt") != after.get("generation_prompt") or before.get("media_references_count") != after.get("media_references_count")) else HomeMaterialOperationEnum.ASSET_UPDATE.value),
|
||||
"PUT",
|
||||
f"/admin/home-material/assets/{asset_id}",
|
||||
detail=_detail(before=before, after=after),
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from fastapi import APIRouter, Depends, File, Form, UploadFile
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.dependencies import get_admin_user, get_db
|
||||
from app.enums.admin_upload import AdminUploadResourceTypeEnum, AdminUploadSceneEnum
|
||||
from app.models.user import User
|
||||
from app.schemas.admin_upload import AdminUploadFileOut
|
||||
from app.services.admin_upload import admin_upload_service
|
||||
|
||||
router = APIRouter(prefix="/admin/uploads", tags=["admin-upload"])
|
||||
|
||||
|
||||
@router.post(
|
||||
"/files",
|
||||
response_model=AdminUploadFileOut,
|
||||
summary="管理后台全局文件上传",
|
||||
description=(
|
||||
"管理后台纯文件上传统一入口。通过 scene 区分业务场景并落到独立目录;"
|
||||
"首页素材附件使用 scene=home_material_reference,系统Logo使用 system_logo,PDF使用 system_pdf,开户缩略图使用 open_type_thumb。"
|
||||
),
|
||||
)
|
||||
async def upload_admin_file(
|
||||
file: UploadFile = File(..., description="上传文件。"),
|
||||
scene: AdminUploadSceneEnum = Form(..., description="上传场景。"),
|
||||
resource_type: AdminUploadResourceTypeEnum = Form(..., description="资源类型:image/video/audio/pdf/file。"),
|
||||
duration_seconds: float | None = Form(None, ge=0, description="音视频时长,单位秒。"),
|
||||
admin: User = Depends(get_admin_user),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
):
|
||||
result = await admin_upload_service.upload_file(
|
||||
db,
|
||||
file=file,
|
||||
scene=scene,
|
||||
resource_type=resource_type,
|
||||
duration_seconds=duration_seconds,
|
||||
admin=admin,
|
||||
)
|
||||
await db.commit()
|
||||
return result
|
||||
Reference in New Issue
Block a user