from datetime import datetime from typing import List, Optional from uuid import UUID from pydantic import Field from src.models import CommonParams, DefaultBase, Pagination from src.masterdata_simulations.schema import MasterDataSimulationRead from src.plant_transaction_data_simulations.schema import ( PlantTransactionDataSimulationsRead, ) class SimulationBase(DefaultBase): id: UUID label: Optional[str] = Field(None) version: Optional[int] = Field(None, ge=0, le=9_999_999_999) created_at: Optional[datetime] = Field(None) updated_at: Optional[datetime] = Field(None) created_by: Optional[str] = Field(None) updated_by: Optional[str] = Field(None) class SimulationCreate(SimulationBase): label: str = Field(...) class SimulationUpdate(SimulationBase): pass class SimulationRead(SimulationBase): id: UUID masterdata_entries: List[MasterDataSimulationRead] = Field( default_factory=list ) plant_transactions: List[PlantTransactionDataSimulationsRead] = Field( default_factory=list ) class SimulationPagination(Pagination): items: List[SimulationBase] = [] class MasterDataOverride(DefaultBase): name: str = Field(...) value_num: Optional[float] = Field(None, le=1_000_000_000_000_000) value_str: Optional[str] = Field(None) class SimulationRunPayload(DefaultBase): label: Optional[str] = Field(None) overrides: List[MasterDataOverride] = Field(default_factory=list) class ListQueryParams(CommonParams): search: Optional[str] = Field( default=None, description="Search keyword", )