素材云批量删除API
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
from typing import Annotated, Literal
|
||||
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
||||
|
||||
from app.schemas.common import NaiveDatetimeOptional
|
||||
from app.enums.generation_history import normalize_generation_history_source
|
||||
|
||||
|
||||
class GenerationAIReference(BaseModel):
|
||||
@@ -492,6 +493,95 @@ class GenerationAITaskDeleteOut(BaseModel):
|
||||
freed_size_bytes: int = Field(0, description="本次软删联动释放的有效资源空间字节数")
|
||||
|
||||
|
||||
class GenerationAIHistoryBatchDeleteRequest(BaseModel):
|
||||
"""素材云历史批量删除请求体。"""
|
||||
|
||||
model_config = ConfigDict(
|
||||
json_schema_extra={
|
||||
"example": {
|
||||
"history_source": "shot_replicate",
|
||||
"ids": ["shot_segment_id_1", "shot_segment_id_2"],
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
history_source: str = Field(
|
||||
...,
|
||||
description=(
|
||||
"素材云历史来源。"
|
||||
"generation_record=项目生成,chat_task=AI创作,"
|
||||
"hot_opening_replicate=爆款开头复刻,shot_replicate=拆镜复刻。"
|
||||
"注意:项目生成/AI创作传记录ID;爆款开头复刻传 module_project_id;拆镜复刻传 shot_segment_id。"
|
||||
),
|
||||
examples=["shot_replicate"],
|
||||
)
|
||||
ids: list[str] = Field(
|
||||
...,
|
||||
min_length=1,
|
||||
max_length=30,
|
||||
description="需要删除的ID数组,最多30个;不允许重复或空字符串",
|
||||
examples=[["shot_segment_id_1", "shot_segment_id_2"]],
|
||||
)
|
||||
|
||||
@field_validator("history_source")
|
||||
@classmethod
|
||||
def validate_history_source(cls, value: str) -> str:
|
||||
try:
|
||||
return normalize_generation_history_source(value).value
|
||||
except ValueError as exc:
|
||||
raise ValueError("history_source 不支持") from exc
|
||||
|
||||
@field_validator("ids")
|
||||
@classmethod
|
||||
def validate_ids(cls, values: list[str]) -> list[str]:
|
||||
normalized = [str(item).strip() for item in values if str(item or "").strip()]
|
||||
if not normalized:
|
||||
raise ValueError("ids 不能为空")
|
||||
if len(normalized) > 30:
|
||||
raise ValueError("单次最多删除30条记录")
|
||||
if len(normalized) != len(set(normalized)):
|
||||
raise ValueError("ids 不允许重复")
|
||||
return normalized
|
||||
|
||||
|
||||
class GenerationAIHistoryBatchDeleteOut(BaseModel):
|
||||
"""素材云历史批量删除响应体。"""
|
||||
|
||||
model_config = ConfigDict(
|
||||
json_schema_extra={
|
||||
"example": {
|
||||
"message": "删除成功",
|
||||
"history_source": "shot_replicate",
|
||||
"history_source_label": "拆镜复刻",
|
||||
"requested_count": 2,
|
||||
"deleted_count": 2,
|
||||
"requested_ids": ["shot_segment_id_1", "shot_segment_id_2"],
|
||||
"deleted_ids": ["shot_segment_id_1", "shot_segment_id_2"],
|
||||
"generation_record_ids": [],
|
||||
"chat_task_ids": ["chat_task_id_1", "chat_task_id_2"],
|
||||
"module_project_ids": ["module_project_id_1", "module_project_id_2"],
|
||||
"shot_segment_ids": ["shot_segment_id_1", "shot_segment_id_2"],
|
||||
"deleted": True,
|
||||
"freed_size_bytes": 123456,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
message: str = Field(..., description="操作结果提示信息")
|
||||
history_source: str = Field(..., description="素材云历史来源")
|
||||
history_source_label: str | None = Field(None, description="素材云历史来源中文名称")
|
||||
requested_count: int = Field(..., description="请求删除数量")
|
||||
deleted_count: int = Field(..., description="实际删除数量")
|
||||
requested_ids: list[str] = Field(default_factory=list, description="请求删除的原始ID列表")
|
||||
deleted_ids: list[str] = Field(default_factory=list, description="已删除的原始ID列表")
|
||||
generation_record_ids: list[str] = Field(default_factory=list, description="联动软删除的 GenerationRecord ID")
|
||||
chat_task_ids: list[str] = Field(default_factory=list, description="联动软删除的 ChatGenerationTask ID")
|
||||
module_project_ids: list[str] = Field(default_factory=list, description="联动软删除的 ModuleGenerationProject ID")
|
||||
shot_segment_ids: list[str] = Field(default_factory=list, description="联动软删除的 ShotReplicateSegment ID")
|
||||
deleted: bool = Field(..., description="是否已完成软删除")
|
||||
freed_size_bytes: int = Field(0, description="本次软删联动释放的有效资源空间字节数")
|
||||
|
||||
|
||||
class GenerationAIRetryOut(BaseModel):
|
||||
"""AI生成任务重试响应体。"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user