Initial Animatrix import
This commit is contained in:
25
backend/app/schemas/__init__.py
Normal file
25
backend/app/schemas/__init__.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from app.schemas.schemas import (
|
||||
AssetResponse,
|
||||
AssetTrashRequest,
|
||||
JobCreateRequest,
|
||||
JobEventResponse,
|
||||
JobListResponse,
|
||||
JobOutputResponse,
|
||||
JobResponse,
|
||||
LoginRequest,
|
||||
RegisterRequest,
|
||||
UserResponse,
|
||||
)
|
||||
|
||||
__all__ = [
|
||||
"RegisterRequest",
|
||||
"LoginRequest",
|
||||
"UserResponse",
|
||||
"AssetResponse",
|
||||
"AssetTrashRequest",
|
||||
"JobCreateRequest",
|
||||
"JobOutputResponse",
|
||||
"JobEventResponse",
|
||||
"JobResponse",
|
||||
"JobListResponse",
|
||||
]
|
||||
143
backend/app/schemas/schemas.py
Normal file
143
backend/app/schemas/schemas.py
Normal file
@@ -0,0 +1,143 @@
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
|
||||
from pydantic import BaseModel, EmailStr, field_validator
|
||||
|
||||
|
||||
class RegisterRequest(BaseModel):
|
||||
email: EmailStr
|
||||
password: str
|
||||
|
||||
@field_validator("password")
|
||||
@classmethod
|
||||
def password_min_length(cls, v: str) -> str:
|
||||
if len(v) < 8:
|
||||
raise ValueError("Password must be at least 8 characters")
|
||||
return v
|
||||
|
||||
|
||||
class LoginRequest(BaseModel):
|
||||
email: EmailStr
|
||||
password: str
|
||||
|
||||
|
||||
class UserResponse(BaseModel):
|
||||
id: str
|
||||
email: str
|
||||
created_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class AssetResponse(BaseModel):
|
||||
id: str
|
||||
asset_type: str
|
||||
mime_type: str
|
||||
original_filename: str
|
||||
storage_path: str
|
||||
size_bytes: int
|
||||
width: Optional[int] = None
|
||||
height: Optional[int] = None
|
||||
duration_seconds: Optional[float] = None
|
||||
thumbnail_path: Optional[str] = None
|
||||
is_trashed: bool = False
|
||||
delete_after_at: Optional[datetime] = None
|
||||
created_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class JobCreateRequest(BaseModel):
|
||||
mode: str
|
||||
submode: Optional[str] = None
|
||||
prompt: str
|
||||
negative_prompt: Optional[str] = None
|
||||
ground_truth_asset_id: str
|
||||
motion_asset_id: Optional[str] = None
|
||||
audio_asset_id: Optional[str] = None
|
||||
reference_asset_ids: Optional[List[str]] = None
|
||||
pose_asset_id: Optional[str] = None
|
||||
settings: Optional[dict] = None
|
||||
|
||||
@field_validator("mode")
|
||||
@classmethod
|
||||
def validate_mode(cls, v: str) -> str:
|
||||
if v not in ("animate", "audio"):
|
||||
raise ValueError("mode must be 'animate' or 'audio'")
|
||||
return v
|
||||
|
||||
@field_validator("submode")
|
||||
@classmethod
|
||||
def validate_submode(cls, v: Optional[str]) -> Optional[str]:
|
||||
if v is not None and v not in ("move", "mix"):
|
||||
raise ValueError("submode must be 'move' or 'mix'")
|
||||
return v
|
||||
|
||||
|
||||
class JobOutputResponse(BaseModel):
|
||||
id: str
|
||||
output_type: str
|
||||
file_path: str
|
||||
poster_path: Optional[str] = None
|
||||
created_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class JobEventResponse(BaseModel):
|
||||
id: str
|
||||
event_type: str
|
||||
message: Optional[str] = None
|
||||
created_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class AssetTrashRequest(BaseModel):
|
||||
asset_ids: List[str]
|
||||
|
||||
|
||||
class JobResponse(BaseModel):
|
||||
id: str
|
||||
mode: str
|
||||
submode: Optional[str] = None
|
||||
prompt: str
|
||||
negative_prompt: Optional[str] = None
|
||||
status: str
|
||||
comfy_prompt_id: Optional[str] = None
|
||||
workflow_template_name: Optional[str] = None
|
||||
error_message: Optional[str] = None
|
||||
ground_truth_asset_id: Optional[str] = None
|
||||
motion_asset_id: Optional[str] = None
|
||||
audio_asset_id: Optional[str] = None
|
||||
pose_asset_id: Optional[str] = None
|
||||
outputs: List[JobOutputResponse] = []
|
||||
events: List[JobEventResponse] = []
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
|
||||
class JobListResponse(BaseModel):
|
||||
id: str
|
||||
mode: str
|
||||
submode: Optional[str] = None
|
||||
prompt: str
|
||||
error_message: Optional[str] = None
|
||||
status: str
|
||||
ground_truth_asset_id: Optional[str] = None
|
||||
motion_asset_id: Optional[str] = None
|
||||
audio_asset_id: Optional[str] = None
|
||||
pose_asset_id: Optional[str] = None
|
||||
outputs: List[JobOutputResponse] = []
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
Reference in New Issue
Block a user