feat: attrs on product

This commit is contained in:
2024-05-10 16:18:26 +03:00
parent bde69f9db8
commit 74982b9acf
6 changed files with 54 additions and 0 deletions

View File

@@ -1,5 +1,8 @@
from .article_attribute_getter import ArticleAttributeGetter from .article_attribute_getter import ArticleAttributeGetter
from .brand_attribute_getter import BrandAttributeGetter
from .client_name_attribute_getter import ClientNameAttributeGetter 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 from .name_attribute_getter import NameAttributeGetter
@@ -13,5 +16,11 @@ class AttributeWriterFactory:
return ArticleAttributeGetter() return ArticleAttributeGetter()
case 'client.name': case 'client.name':
return ClientNameAttributeGetter() return ClientNameAttributeGetter()
case 'brand':
return BrandAttributeGetter()
case 'color':
return ColorAttributeGetter()
case 'composition':
return CompositionAttributeGetter()
case _: case _:
return None return None

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -17,6 +17,12 @@ class Product(BaseModel):
barcode_template_id = Column(Integer, ForeignKey('barcode_templates.id'), nullable=True) barcode_template_id = Column(Integer, ForeignKey('barcode_templates.id'), nullable=True)
barcode_template = relationship('BarcodeTemplate', lazy='joined') 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): class ProductBarcode(BaseModel):
__tablename__ = 'product_barcodes' __tablename__ = 'product_barcodes'

View File

@@ -15,6 +15,11 @@ class ProductSchema(CustomModelCamel):
barcodes: list[str] barcodes: list[str]
barcode_template: BarcodeTemplateSchema | None = None barcode_template: BarcodeTemplateSchema | None = None
# Attributes
brand: str | None = None
color: str | None = None
composition: str | None = None
@field_validator('barcodes', mode="before") @field_validator('barcodes', mode="before")
def barcodes_to_list(cls, v): def barcodes_to_list(cls, v):
if isinstance(v, list) and all([type(barcode) is ProductBarcode for barcode in 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] barcodes: List[str]
barcode_template: BarcodeTemplateSchema | None = None barcode_template: BarcodeTemplateSchema | None = None
class ProductDeleteRequest(CustomModelCamel): class ProductDeleteRequest(CustomModelCamel):
product_id: int product_id: int