feat: a lot of a lot

This commit is contained in:
2024-09-01 01:05:11 +03:00
parent 867dfbe597
commit 4ae03284a3
43 changed files with 700 additions and 13 deletions

View File

@@ -11,5 +11,6 @@ from .shipping_warehouse import *
from .marketplace import *
from .payroll import *
from .billing import *
from .marketplace_products import *
configure_mappers()

View File

@@ -1,7 +1,12 @@
from sqlalchemy.orm import Mapped, mapped_column
from sqlalchemy import ForeignKey, JSON
from sqlalchemy.orm import Mapped, mapped_column, relationship
from typing_extensions import TYPE_CHECKING
from models import BaseModel
if TYPE_CHECKING:
from models import Client
class BaseMarketplace(BaseModel):
__tablename__ = 'base_marketplaces'
@@ -9,3 +14,17 @@ class BaseMarketplace(BaseModel):
name: Mapped[str] = mapped_column()
icon_url: Mapped[str] = mapped_column()
class Marketplace(BaseModel):
__tablename__ = 'marketplaces'
id: Mapped[int] = mapped_column(primary_key=True)
base_marketplace_key: Mapped[str] = mapped_column(ForeignKey("base_marketplaces.key"), nullable=False)
base_marketplace: Mapped["BaseMarketplace"] = relationship(lazy="joined")
client_id: Mapped[int] = mapped_column(ForeignKey('clients.id'), nullable=False, comment='ID клиента')
client: Mapped["Client"] = relationship('Client')
name: Mapped[str] = mapped_column(nullable=False)
auth_data: Mapped[dict] = mapped_column(type_=JSON)

View File

@@ -0,0 +1,39 @@
from sqlalchemy import ForeignKey
from sqlalchemy.orm import Mapped, relationship, mapped_column
from models import BaseModel
from models import Marketplace
from models import Product
class WildberriesProduct(BaseModel):
__tablename__ = 'wildberries_products'
marketplace_id: Mapped[int] = mapped_column(ForeignKey('marketplaces.id'), primary_key=True)
marketplace: Mapped["Marketplace"] = relationship()
product_id: Mapped[int] = mapped_column(ForeignKey('products.id'), primary_key=True)
product: Mapped["Product"] = relationship()
nm_uuid: Mapped[str] = mapped_column(nullable=False)
class OzonProduct(BaseModel):
__tablename__ = 'ozon_products'
marketplace_id: Mapped[int] = mapped_column(ForeignKey('marketplaces.id'), primary_key=True)
marketplace: Mapped["Marketplace"] = relationship()
product_id: Mapped[int] = mapped_column(ForeignKey('products.id'), primary_key=True)
product: Mapped["Product"] = relationship()
class YandexProduct(BaseModel):
__tablename__ = 'yandex_products'
marketplace_id: Mapped[int] = mapped_column(ForeignKey('marketplaces.id'), primary_key=True)
marketplace: Mapped["Marketplace"] = relationship()
product_id: Mapped[int] = mapped_column(ForeignKey('products.id'), primary_key=True)
product: Mapped["Product"] = relationship()

View File

@@ -1,8 +1,14 @@
from typing import TYPE_CHECKING
from sqlalchemy import Column, Integer, String, ForeignKey, Sequence
from sqlalchemy.orm import relationship
from sqlalchemy.orm import relationship, Mapped
from sqlalchemy.testing.schema import mapped_column
from models import BaseModel
if TYPE_CHECKING:
from models import Marketplace
class Product(BaseModel):
__tablename__ = 'products'
@@ -30,11 +36,12 @@ class Product(BaseModel):
cascade="all, delete-orphan")
class ProductImage(BaseModel):
__tablename__ = 'product_images'
id = Column(Integer, autoincrement=True, primary_key=True, index=True)
product_id = Column(Integer, ForeignKey('products.id'), nullable=False)
product = relationship('Product', back_populates='images')
product: Mapped["Product"] = relationship(back_populates='images')
image_url = Column(String, nullable=False)
@@ -42,6 +49,6 @@ class ProductImage(BaseModel):
class ProductBarcode(BaseModel):
__tablename__ = 'product_barcodes'
product_id = Column(Integer, ForeignKey('products.id'), nullable=False, comment='ID товара', primary_key=True)
product = relationship('Product', back_populates='barcodes')
product: Mapped["Product"] = relationship(back_populates='barcodes')
barcode = Column(String, nullable=False, index=True, comment='ШК товара', primary_key=True)