|
4 | 4 | from random import choice |
5 | 5 |
|
6 | 6 | from passlib.hash import pbkdf2_sha256 as sha256 |
7 | | -from sqlalchemy import Boolean, Column, ForeignKey, Integer, DATE, String, DateTime, TIMESTAMP, func, \ |
| 7 | +from sqlalchemy import Boolean, Column, ForeignKey, Index, Integer, JSON, DATE, String, DateTime, TIMESTAMP, func, \ |
8 | 8 | Numeric, UniqueConstraint, UUID |
9 | 9 | from sqlalchemy.ext.declarative import declarative_base, declared_attr |
10 | 10 | from sqlalchemy.ext.hybrid import hybrid_property |
@@ -204,6 +204,42 @@ class ProductVariant(Base): |
204 | 204 | 'name', 'product_id', name='uc_name_product_id'),) |
205 | 205 |
|
206 | 206 |
|
| 207 | +class CatalogProduct(Base): |
| 208 | + id = Column(Integer, primary_key=True, index=True) |
| 209 | + |
| 210 | + brand_name = Column(String(100), nullable=False, index=True) |
| 211 | + product_name = Column(String(250), nullable=False) |
| 212 | + variant_name = Column(String(250)) |
| 213 | + display_name = Column(String(500), nullable=False) |
| 214 | + |
| 215 | + weight = Column(Numeric) |
| 216 | + weight_unit = Column(String(10)) |
| 217 | + product_url = Column(String(1000)) |
| 218 | + description = Column(String(2000)) |
| 219 | + image_url = Column(String(1000)) |
| 220 | + category_suggestion = Column(String(100)) |
| 221 | + catalog_url_slug = Column(String(500)) |
| 222 | + additional_specs = Column(JSON) |
| 223 | + |
| 224 | + brand_id = Column(Integer, ForeignKey("brand.id")) |
| 225 | + product_id = Column(Integer, ForeignKey("product.id")) |
| 226 | + product_variant_id = Column(Integer, ForeignKey("productvariant.id")) |
| 227 | + |
| 228 | + status = Column(String(20), default="pending", index=True) |
| 229 | + source_item_count = Column(Integer) |
| 230 | + ai_confidence = Column(Numeric) |
| 231 | + |
| 232 | + created_at = Column( |
| 233 | + DateTime, default=datetime.datetime.utcnow, nullable=False) |
| 234 | + updated_at = Column(TIMESTAMP, server_default=func.now()) |
| 235 | + |
| 236 | + __table_args__ = ( |
| 237 | + UniqueConstraint('brand_name', 'product_name', 'variant_name', |
| 238 | + name='uq_catalog_brand_product_variant'), |
| 239 | + Index('ix_catalog_search', 'status', 'brand_name', 'product_name'), |
| 240 | + ) |
| 241 | + |
| 242 | + |
207 | 243 | class PackItem(Base): |
208 | 244 | pack_id = Column(Integer, ForeignKey("pack.id"), primary_key=True) |
209 | 245 | item_id = Column(Integer, ForeignKey("item.id"), primary_key=True) |
|
0 commit comments