81 lines
1.5 KiB
Python
81 lines
1.5 KiB
Python
"""项目相关 schema。"""
|
|
from pydantic import BaseModel, Field
|
|
|
|
PROJECT_TYPES = ["programming", "research", "office", "writing", "video"]
|
|
|
|
|
|
class ProjectCreate(BaseModel):
|
|
name: str = Field(min_length=1, max_length=128)
|
|
type: str = Field(default="programming", pattern="|".join(PROJECT_TYPES))
|
|
description: str = ""
|
|
settings: dict = {}
|
|
|
|
|
|
class ProjectUpdate(BaseModel):
|
|
name: str | None = None
|
|
description: str | None = None
|
|
status: str | None = None
|
|
settings: dict | None = None
|
|
|
|
|
|
class ProjectOut(BaseModel):
|
|
id: int
|
|
name: str
|
|
type: str
|
|
description: str
|
|
status: str
|
|
workspace_dir: str
|
|
settings: dict = {}
|
|
created_at: str
|
|
updated_at: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ProjectTaskCreate(BaseModel):
|
|
title: str = Field(min_length=1, max_length=256)
|
|
description: str = ""
|
|
agent_id: int | None = None
|
|
|
|
|
|
class ProjectTaskOut(BaseModel):
|
|
id: int
|
|
project_id: int
|
|
title: str
|
|
description: str
|
|
status: str
|
|
output: str
|
|
created_at: str
|
|
finished_at: str | None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class TaskOut(BaseModel):
|
|
"""后台任务。"""
|
|
id: int
|
|
type: str
|
|
status: str
|
|
params: dict = {}
|
|
result: dict = {}
|
|
error: str
|
|
created_at: str
|
|
finished_at: str | None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class FileOut(BaseModel):
|
|
id: int
|
|
project_id: int | None
|
|
filename: str
|
|
size: int
|
|
mime: str
|
|
created_at: str
|
|
|
|
class Config:
|
|
from_attributes = True
|