diff --git a/barcodes/attributes/__init__.py b/barcodes/attributes/__init__.py index 5b2d20a..ee19563 100644 --- a/barcodes/attributes/__init__.py +++ b/barcodes/attributes/__init__.py @@ -1,5 +1,8 @@ from .article_attribute_getter import ArticleAttributeGetter +from .brand_attribute_getter import BrandAttributeGetter from .client_name_attribute_getter import ClientNameAttributeGetter +from .color_attribute_getter import ColorAttributeGetter +from .composition_attribute_getter import CompositionAttributeGetter from .name_attribute_getter import NameAttributeGetter @@ -13,5 +16,11 @@ class AttributeWriterFactory: return ArticleAttributeGetter() case 'client.name': return ClientNameAttributeGetter() + case 'brand': + return BrandAttributeGetter() + case 'color': + return ColorAttributeGetter() + case 'composition': + return CompositionAttributeGetter() case _: return None diff --git a/barcodes/attributes/brand_attribute_getter.py b/barcodes/attributes/brand_attribute_getter.py new file mode 100644 index 0000000..2a96648 --- /dev/null +++ b/barcodes/attributes/brand_attribute_getter.py @@ -0,0 +1,11 @@ +from barcodes.attributes.base import BaseAttributeGetter +from models import Product + + +class BrandAttributeGetter(BaseAttributeGetter): + + def get_value(self, product: Product): + result = product.brand + if not result: + result = '' + return result diff --git a/barcodes/attributes/color_attribute_getter.py b/barcodes/attributes/color_attribute_getter.py new file mode 100644 index 0000000..adbe60e --- /dev/null +++ b/barcodes/attributes/color_attribute_getter.py @@ -0,0 +1,11 @@ +from barcodes.attributes.base import BaseAttributeGetter +from models import Product + + +class ColorAttributeGetter(BaseAttributeGetter): + + def get_value(self, product: Product): + result = product.color + if not result: + result = '' + return result diff --git a/barcodes/attributes/composition_attribute_getter.py b/barcodes/attributes/composition_attribute_getter.py new file mode 100644 index 0000000..b5fe5a4 --- /dev/null +++ b/barcodes/attributes/composition_attribute_getter.py @@ -0,0 +1,11 @@ +from barcodes.attributes.base import BaseAttributeGetter +from models import Product + + +class CompositionAttributeGetter(BaseAttributeGetter): + + def get_value(self, product: Product): + result = product.composition + if not result: + result = '' + return result diff --git a/models/product.py b/models/product.py index 562a348..bfc9312 100644 --- a/models/product.py +++ b/models/product.py @@ -17,6 +17,12 @@ class Product(BaseModel): barcode_template_id = Column(Integer, ForeignKey('barcode_templates.id'), nullable=True) barcode_template = relationship('BarcodeTemplate', lazy='joined') + # Attributes + # TODO move to another table + brand = Column(String, nullable=True, comment='Бренд') + color = Column(String, nullable=True, comment='Цвет') + composition = Column(String, nullable=True, comment='Состав') + class ProductBarcode(BaseModel): __tablename__ = 'product_barcodes' diff --git a/schemas/product.py b/schemas/product.py index 7353d8f..034d68c 100644 --- a/schemas/product.py +++ b/schemas/product.py @@ -15,6 +15,11 @@ class ProductSchema(CustomModelCamel): barcodes: list[str] barcode_template: BarcodeTemplateSchema | None = None + # Attributes + brand: str | None = None + color: str | None = None + composition: str | None = None + @field_validator('barcodes', mode="before") def barcodes_to_list(cls, v): if isinstance(v, list) and all([type(barcode) is ProductBarcode for barcode in v]): @@ -32,6 +37,7 @@ class ProductCreateRequest(CustomModelCamel): barcodes: List[str] barcode_template: BarcodeTemplateSchema | None = None + class ProductDeleteRequest(CustomModelCamel): product_id: int