from __future__ import annotations from datetime import datetime from typing import Any from pydantic import AliasChoices, Field from iti.schemas import ItiModel from .base import ExchangeOperation, ExchangeTemplateSourceKind class ExchangeVariableSchema(ItiModel): key: str label: str header: str | None = None description: str | None = None required: bool = False example: str | None = None class ExchangeTemplateLayoutSchema(ItiModel): title: str | None = None sheet_name: str | None = None title_row: int | None = 1 header_row: int = 2 data_start_row: int | None = None class ExchangeScopeSchema(ItiModel): biz_domain: str biz_obj: str operation: ExchangeOperation = Field( validation_alias=AliasChoices("operation", "templateKind", "taskKind") ) class ExchangeTemplateCreateRequest(ExchangeScopeSchema): code: str | None = None name: str description: str | None = None layout: ExchangeTemplateLayoutSchema | None = None meta: dict[str, Any] = Field(default_factory=dict) class ExchangeTemplateUpdateRequest(ItiModel): name: str | None = None description: str | None = None status: str | None = None current_version: str | None = None layout: ExchangeTemplateLayoutSchema | None = None meta: dict[str, Any] | None = None class ExchangeTemplateVersionCreateRequest(ItiModel): version: str variables: list[ExchangeVariableSchema] | None = None layout: ExchangeTemplateLayoutSchema | None = None meta: dict[str, Any] = Field(default_factory=dict) make_current: bool = True class ExchangePlanRequest(ExchangeScopeSchema): template_id: str | None = None version_id: str | None = None version: str | None = None code: str | None = None source_kind: ExchangeTemplateSourceKind | None = None source_name: str | None = None source_service: str | None = None name: str | None = None description: str | None = None layout: ExchangeTemplateLayoutSchema | None = None variables: list[ExchangeVariableSchema] | None = None class ExchangePlanResolveRequest(ExchangePlanRequest): pass class ExchangePlanTemplateFileRequest(ExchangePlanResolveRequest): pass class ExchangeTaskCreateRequest(ExchangePlanRequest): storage_key: str | None = None input_payload: dict[str, Any] = Field(default_factory=dict) class ExchangeTaskRunRequest(ItiModel): pass class ExchangeTemplateResponse(ItiModel): id: str code: str name: str biz_domain: str biz_obj: str operation: str status: str description: str | None = None current_version: str | None = None layout: dict[str, Any] = Field(default_factory=dict) meta: dict[str, Any] = Field(default_factory=dict) created_at: datetime updated_at: datetime class ExchangeTemplateVersionResponse(ItiModel): id: str template_id: str version: str biz_domain: str biz_obj: str operation: str published_at: datetime | None = None file_key: str | None = None checksum: str | None = None layout: dict[str, Any] = Field(default_factory=dict) variables: list[dict[str, Any]] = Field(default_factory=list) meta: dict[str, Any] = Field(default_factory=dict) created_at: datetime updated_at: datetime class ExchangeTaskResponse(ItiModel): id: str template_id: str | None = None template_version_id: str | None = None biz_domain: str biz_obj: str operation: str status: str requested_by: str | None = None storage_key: str | None = None success_count: int failed_count: int error_count: int message: str | None = None input_payload: dict[str, Any] = Field(default_factory=dict) result_payload: dict[str, Any] = Field(default_factory=dict) started_at: datetime | None = None finished_at: datetime | None = None meta: dict[str, Any] = Field(default_factory=dict) created_at: datetime updated_at: datetime