from datetime import datetime from typing import List, Optional from uuid import UUID from pydantic import Field from src.models import DefaultBase, Pagination from src.auth.service import CurrentUser class MasterdataBase(DefaultBase): # discount_rate: Optional[float] # inflation_rate: Optional[float] # manhours_rate: Optional[float] name: Optional[str] = Field(None, nullable=True) description: Optional[str] = Field(None, nullable=True) unit_of_measurement: Optional[str] = Field(None, nullable=True) value_num: Optional[float] = Field( None, nullable=True, le=1_000_000_000_000_000 # 1 quadrillion ) value_str: Optional[str] = Field(None, nullable=True) seq: Optional[int] = Field(None, nullable=True) created_at: Optional[datetime] = Field(None, nullable=True) updated_at: Optional[datetime] = Field(None, nullable=True) created_by: Optional[str] = Field(None, nullable=True) updated_by: Optional[str] = Field(None, nullable=True) class MasterDataCreate(MasterdataBase): name: str = Field(..., nullable=True) description: str = Field(..., nullable=True) unit_of_measurement: str = Field(..., nullable=True) value_num: float = Field( ..., nullable=True, le=1_000_000_000_000_000 # 1 quadrillion ) value_str: str = Field(..., nullable=True) seq: int = Field(..., nullable=True) class MasterDataUpdate(MasterdataBase): pass class BulkMasterDataUpdate(MasterdataBase): updates: List[dict] # each dict contains id and update data class MasterDataRead(MasterdataBase): id: UUID class MasterDataPagination(Pagination): items: List[MasterDataRead] = []