61 lines
1.3 KiB
Python
61 lines
1.3 KiB
Python
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from pydantic import BaseModel, ConfigDict, Field
|
||
|
|
|
||
|
|
|
||
|
|
class MixIngredientCreate(BaseModel):
|
||
|
|
raw_material_id: int
|
||
|
|
quantity_kg: float = Field(gt=0)
|
||
|
|
notes: str | None = None
|
||
|
|
|
||
|
|
|
||
|
|
class MixIngredientUpdate(BaseModel):
|
||
|
|
quantity_kg: float | None = Field(default=None, gt=0)
|
||
|
|
notes: str | None = None
|
||
|
|
|
||
|
|
|
||
|
|
class MixIngredientRead(BaseModel):
|
||
|
|
id: int
|
||
|
|
raw_material_id: int
|
||
|
|
raw_material_name: str
|
||
|
|
quantity_kg: float
|
||
|
|
cost_per_kg: float | None
|
||
|
|
line_cost: float | None
|
||
|
|
notes: str | None
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|
||
|
|
|
||
|
|
class MixCreate(BaseModel):
|
||
|
|
client_name: str
|
||
|
|
name: str
|
||
|
|
status: str = "draft"
|
||
|
|
version: int = 1
|
||
|
|
notes: str | None = None
|
||
|
|
ingredients: list[MixIngredientCreate]
|
||
|
|
|
||
|
|
|
||
|
|
class MixUpdate(BaseModel):
|
||
|
|
client_name: str | None = None
|
||
|
|
name: str | None = None
|
||
|
|
status: str | None = None
|
||
|
|
version: int | None = None
|
||
|
|
notes: str | None = None
|
||
|
|
|
||
|
|
|
||
|
|
class MixRead(BaseModel):
|
||
|
|
id: int
|
||
|
|
tenant_id: str
|
||
|
|
client_name: str
|
||
|
|
name: str
|
||
|
|
status: str
|
||
|
|
version: int
|
||
|
|
notes: str | None
|
||
|
|
created_at: datetime
|
||
|
|
ingredients: list[MixIngredientRead]
|
||
|
|
total_mix_kg: float
|
||
|
|
total_mix_cost: float
|
||
|
|
mix_cost_per_kg: float | None
|
||
|
|
warnings: list[str]
|
||
|
|
model_config = ConfigDict(from_attributes=True)
|
||
|
|
|