Files
AI-comic-generator/backend/app/models/models.py
T
p 3f0815e997 feat: 新增项目配置选项和任务日志功能
添加分辨率配置选项,支持在项目设置中选择1K/2K/4K分辨率
为任务模型添加logs字段,记录任务执行过程中的详细日志
实现任务日志记录功能,包括时间戳和状态更新
新增多个前端对话框组件:终端日志、历史记录、JSON编辑器等
优化AI服务生成图像接口,支持传入分辨率和宽高比参数
重构任务管理界面,添加折叠功能和日志查看入口
2026-01-17 18:35:57 +08:00

100 lines
3.9 KiB
Python

from typing import Optional, List, Dict, Any
from sqlmodel import SQLModel, Field, Relationship, Column, JSON
from datetime import datetime
import uuid
# --- Base Models ---
class ModelConfigBase(SQLModel):
provider: str
api_key: str
base_url: Optional[str] = None
model_name: str
model_type: str
is_active: bool = True
class ProjectBase(SQLModel):
title: str
description: Optional[str] = None
story_input: Optional[str] = None
# Generation Preferences
theme: Optional[str] = None
language: Optional[str] = "zh-CN"
panel_count: Optional[int] = 16
aspect_ratio: Optional[str] = "16:9"
resolution: Optional[str] = "2K"
class CharacterBase(SQLModel):
name: str
data: Dict = Field(default={}, sa_column=Column(JSON))
image_url: Optional[str] = None
class StoryboardItemBase(SQLModel):
sequence: int
data: Dict = Field(default={}, sa_column=Column(JSON))
image_url: Optional[str] = None
class GlobalConfigBase(SQLModel):
data: Dict = Field(default={}, sa_column=Column(JSON))
class TaskBase(SQLModel):
type: str # 'storyboard', 'image_generation', 'export'
status: str # 'pending', 'processing', 'completed', 'failed'
progress: int = 0 # 0-100
message: Optional[str] = None
logs: List[str] = Field(default=[], sa_column=Column(JSON))
name: Optional[str] = None
description: Optional[str] = None
result: Dict = Field(default={}, sa_column=Column(JSON))
class ImageHistoryBase(SQLModel):
entity_type: str # 'character' or 'storyboard_item'
entity_id: int
image_url: str
# --- Table Models ---
class ModelConfig(ModelConfigBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
class Project(ProjectBase, table=True):
id: str = Field(default_factory=lambda: str(uuid.uuid4()), primary_key=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
characters: List["Character"] = Relationship(back_populates="project", sa_relationship_kwargs={"cascade": "all, delete"})
storyboard_items: List["StoryboardItem"] = Relationship(back_populates="project", sa_relationship_kwargs={"cascade": "all, delete"})
global_config: Optional["GlobalConfig"] = Relationship(back_populates="project", sa_relationship_kwargs={"cascade": "all, delete"})
tasks: List["Task"] = Relationship(back_populates="project", sa_relationship_kwargs={"cascade": "all, delete"})
image_history: List["ImageHistory"] = Relationship(back_populates="project", sa_relationship_kwargs={"cascade": "all, delete"})
class Character(CharacterBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
project_id: str = Field(foreign_key="project.id")
project: Project = Relationship(back_populates="characters")
class StoryboardItem(StoryboardItemBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
project_id: str = Field(foreign_key="project.id")
project: Project = Relationship(back_populates="storyboard_items")
class GlobalConfig(GlobalConfigBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
project_id: str = Field(foreign_key="project.id")
project: Project = Relationship(back_populates="global_config")
class Task(TaskBase, table=True):
id: str = Field(default_factory=lambda: str(uuid.uuid4()), primary_key=True)
project_id: str = Field(foreign_key="project.id")
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow)
project: Project = Relationship(back_populates="tasks")
class ImageHistory(ImageHistoryBase, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
project_id: str = Field(foreign_key="project.id")
created_at: datetime = Field(default_factory=datetime.utcnow)
project: Project = Relationship(back_populates="image_history")