feat: product barcode images

This commit is contained in:
2025-10-21 11:10:08 +04:00
parent 90c0bae8f1
commit 83f3b55f49
6 changed files with 115 additions and 24 deletions

View File

@ -16,6 +16,11 @@ class ProductImageSchema(BaseSchema):
image_url: str
class ProductBarcodeImageSchema(BaseSchema):
product_id: int
image_url: str
class CreateProductSchema(BaseSchema):
name: str
article: str
@ -27,21 +32,27 @@ class CreateProductSchema(BaseSchema):
composition: Optional[str]
size: Optional[str]
additional_info: Optional[str]
barcodes: list[str]
image_url: str | None = None
images: list[ProductImageSchema] | None = []
barcodes: list[str] = []
class BaseProductSchema(CreateProductSchema):
image_url: Optional[str] = None
images: Optional[list[ProductImageSchema]] = []
barcode_image_url: Optional[str] = None
barcode_image: Optional[ProductBarcodeImageSchema] = None
@model_validator(mode="after")
def images_list_to_image_url(cls, values):
images = values.images
if not images:
return values
latest_image = images[-1]
values.image_url = latest_image.image_url
if values.images:
latest_image = values.images[-1]
values.image_url = latest_image.image_url
if values.barcode_image:
values.barcode_image_url = values.barcode_image.image_url
return values
class ProductSchema(CreateProductSchema):
class ProductSchema(BaseProductSchema):
id: int
barcode_template: BarcodeTemplateSchema
@ -116,4 +127,12 @@ class GetProductBarcodePdfResponse(BasePdfResponse):
pass
class BarcodeUploadImageResponse(BaseResponse):
image_url: Optional[str] = None
class DeleteBarcodeImageResponse(BaseResponse):
pass
# endregion