"""Schemas for .rfflow file export and import.""" from datetime import datetime from typing import Optional, Any from pydantic import BaseModel, Field from app.schemas.tree import TreeType class FlowExportCategory(BaseModel): """Category info embedded in export file.""" name: str slug: str class FlowExportData(BaseModel): """The flow payload inside an .rfflow file.""" name: str description: Optional[str] = None tree_type: TreeType version: int = 1 author_name: Optional[str] = None category: Optional[FlowExportCategory] = None tags: list[str] = [] tree_structure: dict[str, Any] intake_form: Optional[list[dict[str, Any]]] = None class FlowExportEnvelope(BaseModel): """Top-level .rfflow file structure.""" rfflow_version: str = "1.0" exported_at: datetime source_app: str = "ResolutionFlow" flow: FlowExportData class FlowImportRequest(BaseModel): """What the frontend sends after parsing a .rfflow file.""" rfflow_version: str = Field(..., description="Must be '1.0'") exported_at: datetime source_app: str = "ResolutionFlow" flow: FlowExportData class FlowImportResponse(BaseModel): """Response after importing a flow.""" tree_id: str name: str tree_type: str status: str = "draft" category_created: bool = False tags_created: list[str] = [] validation_warnings: list[str] = []