Files
GostGenerator/web/backend/app/schemas/__init__.py
T
2026-09-02 12:48:03 +03:00

194 lines
3.8 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Any, Optional
from pydantic import BaseModel, Field
class ProjectCreate(BaseModel):
name: str = Field(min_length=1, max_length=255)
class ProjectUpdate(BaseModel):
name: Optional[str] = None
current_variant: Optional[str] = None
decimal_number: Optional[str] = None
board_name: Optional[str] = None
class ProjectOut(BaseModel):
id: int
name: str
status: str
current_variant: str
zip_path: Optional[str] = None
pcb_doc_name: Optional[str] = None
decimal_number: str
board_name: str
error_message: Optional[str] = None
created_at: datetime
updated_at: datetime
variants: list[str] = []
component_count: int = 0
layer_count: int = 0
model_config = {"from_attributes": True}
class ComponentPropertyOut(BaseModel):
key: str
value: str
class ComponentOut(BaseModel):
id: int
designator: str
properties: list[ComponentPropertyOut] = []
is_fitted: bool = True
model_config = {"from_attributes": True}
class ProjectParamOut(BaseModel):
id: int
name: str
value: str
variant_name: str = ""
model_config = {"from_attributes": True}
class DielMaterialOut(BaseModel):
name: str
value: str
height: float
diel_type: int
layer_number: int
model_config = {"from_attributes": True}
class PcbInfoOut(BaseModel):
layer_count: int = 0
materials: list[DielMaterialOut] = []
class InscriptionOut(BaseModel):
field_number: int
field_value: str
class InscriptionsUpdate(BaseModel):
inscriptions: dict[int, str]
class TableRowBase(BaseModel):
id: Optional[int] = None
row_index: int = 0
page_number: int = 1
is_header: bool = False
is_empty: bool = False
is_auto_generated: bool = True
stretch: bool = False
is_underline: bool = False
class PerechenRowOut(TableRowBase):
position: str = ""
designation: str = ""
quantity: str = ""
note: str = ""
class SpecPcbRowOut(TableRowBase):
format: str = ""
zone: str = ""
position: str = ""
designation: str = ""
name: str = ""
quantity: str = ""
note: str = ""
class SpecRowOut(TableRowBase):
format: str = ""
zone: str = ""
position: str = ""
designation: str = ""
name: str = ""
quantity: str = ""
note: str = ""
class VedomostRowOut(TableRowBase):
name: str = ""
product_code: str = ""
document_code: str = ""
supplier: str = ""
where_used: str = ""
quantity_per_item: str = ""
quantity_in_set: str = ""
quantity_for_reg: str = ""
total_quantity: str = ""
note: str = ""
class SimpleListRowOut(BaseModel):
id: Optional[int] = None
row_index: int = 0
designator: str = ""
name: str = ""
quantity: str = ""
is_auto_generated: bool = True
is_empty: bool = False
class TableRowsResponse(BaseModel):
table_type: str
rows: list[dict[str, Any]]
class TableRowsPatch(BaseModel):
rows: list[dict[str, Any]]
class GenerateTableRequest(BaseModel):
name_field: Optional[str] = None
tech_reserve_percent: Optional[float] = None
boards_count: Optional[int] = None
class LlmChatRequest(BaseModel):
message: str = Field(min_length=1)
table_type: str
class LlmEdit(BaseModel):
op: str
row_id: Optional[int] = None
row_index: Optional[int] = None
fields: dict[str, Any] = {}
class LlmChatResponse(BaseModel):
reply: str
edits: list[LlmEdit] = []
message_id: Optional[int] = None
class LlmApplyRequest(BaseModel):
table_type: str
edits: list[LlmEdit]
class ExportRequest(BaseModel):
table_type: str
format: str = "pdf" # pdf | xlsx
class DesignatorMappingOut(BaseModel):
prefix: str
singular_name: str
plural_name: str