from datetime import datetime from typing import TYPE_CHECKING from core_shared import JSONValue from pydantic import BaseModel, Field if TYPE_CHECKING: from app.db.models import AppDefinition, AppVersion class AppCreateRequest(BaseModel): code: str name: str description: str | None = None owner_user_id: str | None = None settings_json: dict[str, JSONValue] = Field(default_factory=dict) class AppResponse(BaseModel): id: str code: str name: str description: str | None = None owner_user_id: str | None = None settings_json: dict[str, JSONValue] | None = None created_time: datetime @classmethod def from_entity(cls, entity: "AppDefinition") -> "AppResponse": return cls.model_validate(entity, from_attributes=True) class AppVersionCreateRequest(BaseModel): app_id: str workflow_version_id: str status: str = "draft" published_by: str | None = None changelog: str | None = None class AppVersionResponse(BaseModel): id: str app_id: str version_no: int workflow_version_id: str status: str published_time: datetime | None = None published_by: str | None = None changelog: str | None = None created_time: datetime @classmethod def from_entity(cls, entity: "AppVersion") -> "AppVersionResponse": return cls.model_validate(entity, from_attributes=True)