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