Files

82 lines
2.0 KiB
Python

from datetime import datetime
from pydantic import BaseModel, ConfigDict, field_validator
from app.schemas.manufacturer import ManufacturerRead
from app.schemas.part_colour import PartColourRead
from app.schemas.part_type import PartTypeRead
from app.schemas.scope_model import ScopeModelRead
from app.schemas.sub_part_type import SubPartTypeRead
class AugmentedPartNoteCreate(BaseModel):
body: str
@field_validator("body")
@classmethod
def validate_body(cls, v: str) -> str:
if not v.strip():
raise ValueError("body must not be blank")
return v.strip()
class AugmentedPartNoteRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
augmented_part_id: int
user_id: int | None
username: str
body: str
created_at: datetime
class AugmentedPartBase(BaseModel):
sku: str | None = None
description: str
colour_id: int
manufacturer_id: int
scope_model_id: int | None = None
part_type_id: int
sub_part_type_id: int | None = None
on_website: bool = False
preferred_part: bool = False
class AugmentedPartCreate(AugmentedPartBase):
pass
class AugmentedPartUpdate(BaseModel):
sku: str | None = None
description: str | None = None
colour_id: int | None = None
manufacturer_id: int | None = None
scope_model_id: int | None = None
part_type_id: int | None = None
sub_part_type_id: int | None = None
archived: bool | None = None
on_website: bool | None = None
preferred_part: bool | None = None
class AugmentedPartSyncResult(BaseModel):
created: int
updated: int
archived: int
skipped: int
class AugmentedPartRead(AugmentedPartBase):
model_config = ConfigDict(from_attributes=True)
id: int
archived: bool
uac_diameter_range_mm: str | None
colour: PartColourRead
manufacturer: ManufacturerRead
scope_model: ScopeModelRead | None
part_type: PartTypeRead
sub_part_type: SubPartTypeRead | None
notes: list[AugmentedPartNoteRead] = []