221 lines
12 KiB
Python
221 lines
12 KiB
Python
"""initial_complete_schema
|
|
|
|
Revision ID: dbe48f596a44
|
|
Revises:
|
|
Create Date: 2025-09-21 15:45:40.290712
|
|
|
|
"""
|
|
from typing import Sequence, Union
|
|
|
|
from alembic import op
|
|
import sqlalchemy as sa
|
|
|
|
|
|
# revision identifiers, used by Alembic.
|
|
revision: str = 'dbe48f596a44'
|
|
down_revision: Union[str, None] = None
|
|
branch_labels: Union[str, Sequence[str], None] = None
|
|
depends_on: Union[str, Sequence[str], None] = None
|
|
|
|
|
|
def upgrade() -> None:
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.create_table('products',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('product_id', sa.String(), nullable=False),
|
|
sa.Column('title', sa.String(), nullable=False),
|
|
sa.Column('description', sa.String(), nullable=True),
|
|
sa.Column('link', sa.String(), nullable=True),
|
|
sa.Column('image_link', sa.String(), nullable=True),
|
|
sa.Column('availability', sa.String(), nullable=True),
|
|
sa.Column('price', sa.String(), nullable=True),
|
|
sa.Column('brand', sa.String(), nullable=True),
|
|
sa.Column('gtin', sa.String(), nullable=True),
|
|
sa.Column('mpn', sa.String(), nullable=True),
|
|
sa.Column('condition', sa.String(), nullable=True),
|
|
sa.Column('adult', sa.String(), nullable=True),
|
|
sa.Column('multipack', sa.Integer(), nullable=True),
|
|
sa.Column('is_bundle', sa.String(), nullable=True),
|
|
sa.Column('age_group', sa.String(), nullable=True),
|
|
sa.Column('color', sa.String(), nullable=True),
|
|
sa.Column('gender', sa.String(), nullable=True),
|
|
sa.Column('material', sa.String(), nullable=True),
|
|
sa.Column('pattern', sa.String(), nullable=True),
|
|
sa.Column('size', sa.String(), nullable=True),
|
|
sa.Column('size_type', sa.String(), nullable=True),
|
|
sa.Column('size_system', sa.String(), nullable=True),
|
|
sa.Column('item_group_id', sa.String(), nullable=True),
|
|
sa.Column('google_product_category', sa.String(), nullable=True),
|
|
sa.Column('product_type', sa.String(), nullable=True),
|
|
sa.Column('custom_label_0', sa.String(), nullable=True),
|
|
sa.Column('custom_label_1', sa.String(), nullable=True),
|
|
sa.Column('custom_label_2', sa.String(), nullable=True),
|
|
sa.Column('custom_label_3', sa.String(), nullable=True),
|
|
sa.Column('custom_label_4', sa.String(), nullable=True),
|
|
sa.Column('additional_image_link', sa.String(), nullable=True),
|
|
sa.Column('sale_price', sa.String(), nullable=True),
|
|
sa.Column('unit_pricing_measure', sa.String(), nullable=True),
|
|
sa.Column('unit_pricing_base_measure', sa.String(), nullable=True),
|
|
sa.Column('identifier_exists', sa.String(), nullable=True),
|
|
sa.Column('shipping', sa.String(), nullable=True),
|
|
sa.Column('currency', sa.String(), nullable=True),
|
|
sa.Column('marketplace', sa.String(), nullable=True),
|
|
sa.Column('shop_name', sa.String(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index('idx_marketplace_brand', 'products', ['marketplace', 'brand'], unique=False)
|
|
op.create_index('idx_marketplace_shop', 'products', ['marketplace', 'shop_name'], unique=False)
|
|
op.create_index(op.f('ix_products_availability'), 'products', ['availability'], unique=False)
|
|
op.create_index(op.f('ix_products_brand'), 'products', ['brand'], unique=False)
|
|
op.create_index(op.f('ix_products_google_product_category'), 'products', ['google_product_category'], unique=False)
|
|
op.create_index(op.f('ix_products_gtin'), 'products', ['gtin'], unique=False)
|
|
op.create_index(op.f('ix_products_id'), 'products', ['id'], unique=False)
|
|
op.create_index(op.f('ix_products_marketplace'), 'products', ['marketplace'], unique=False)
|
|
op.create_index(op.f('ix_products_product_id'), 'products', ['product_id'], unique=True)
|
|
op.create_index(op.f('ix_products_shop_name'), 'products', ['shop_name'], unique=False)
|
|
op.create_table('users',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('email', sa.String(), nullable=False),
|
|
sa.Column('username', sa.String(), nullable=False),
|
|
sa.Column('hashed_password', sa.String(), nullable=False),
|
|
sa.Column('role', sa.String(), nullable=False),
|
|
sa.Column('is_active', sa.Boolean(), nullable=False),
|
|
sa.Column('last_login', sa.DateTime(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True)
|
|
op.create_index(op.f('ix_users_id'), 'users', ['id'], unique=False)
|
|
op.create_index(op.f('ix_users_username'), 'users', ['username'], unique=True)
|
|
op.create_table('shops',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('shop_code', sa.String(), nullable=False),
|
|
sa.Column('shop_name', sa.String(), nullable=False),
|
|
sa.Column('description', sa.Text(), nullable=True),
|
|
sa.Column('owner_id', sa.Integer(), nullable=False),
|
|
sa.Column('contact_email', sa.String(), nullable=True),
|
|
sa.Column('contact_phone', sa.String(), nullable=True),
|
|
sa.Column('website', sa.String(), nullable=True),
|
|
sa.Column('business_address', sa.Text(), nullable=True),
|
|
sa.Column('tax_number', sa.String(), nullable=True),
|
|
sa.Column('is_active', sa.Boolean(), nullable=True),
|
|
sa.Column('is_verified', sa.Boolean(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(['owner_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index(op.f('ix_shops_id'), 'shops', ['id'], unique=False)
|
|
op.create_index(op.f('ix_shops_shop_code'), 'shops', ['shop_code'], unique=True)
|
|
op.create_table('marketplace_import_jobs',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('status', sa.String(), nullable=False),
|
|
sa.Column('source_url', sa.String(), nullable=False),
|
|
sa.Column('marketplace', sa.String(), nullable=False),
|
|
sa.Column('shop_name', sa.String(), nullable=False),
|
|
sa.Column('shop_id', sa.Integer(), nullable=False),
|
|
sa.Column('user_id', sa.Integer(), nullable=False),
|
|
sa.Column('imported_count', sa.Integer(), nullable=True),
|
|
sa.Column('updated_count', sa.Integer(), nullable=True),
|
|
sa.Column('error_count', sa.Integer(), nullable=True),
|
|
sa.Column('total_processed', sa.Integer(), nullable=True),
|
|
sa.Column('error_message', sa.String(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('started_at', sa.DateTime(), nullable=True),
|
|
sa.Column('completed_at', sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(['shop_id'], ['shops.id'], ),
|
|
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
|
|
sa.PrimaryKeyConstraint('id')
|
|
)
|
|
op.create_index('idx_marketplace_import_shop_id', 'marketplace_import_jobs', ['shop_id'], unique=False)
|
|
op.create_index('idx_marketplace_import_shop_status', 'marketplace_import_jobs', ['status'], unique=False)
|
|
op.create_index('idx_marketplace_import_user_marketplace', 'marketplace_import_jobs', ['user_id', 'marketplace'], unique=False)
|
|
op.create_index(op.f('ix_marketplace_import_jobs_id'), 'marketplace_import_jobs', ['id'], unique=False)
|
|
op.create_index(op.f('ix_marketplace_import_jobs_marketplace'), 'marketplace_import_jobs', ['marketplace'], unique=False)
|
|
op.create_index(op.f('ix_marketplace_import_jobs_shop_name'), 'marketplace_import_jobs', ['shop_name'], unique=False)
|
|
op.create_table('shop_products',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('shop_id', sa.Integer(), nullable=False),
|
|
sa.Column('product_id', sa.Integer(), nullable=False),
|
|
sa.Column('shop_product_id', sa.String(), nullable=True),
|
|
sa.Column('shop_price', sa.Float(), nullable=True),
|
|
sa.Column('shop_sale_price', sa.Float(), nullable=True),
|
|
sa.Column('shop_currency', sa.String(), nullable=True),
|
|
sa.Column('shop_availability', sa.String(), nullable=True),
|
|
sa.Column('shop_condition', sa.String(), nullable=True),
|
|
sa.Column('is_featured', sa.Boolean(), nullable=True),
|
|
sa.Column('is_active', sa.Boolean(), nullable=True),
|
|
sa.Column('display_order', sa.Integer(), nullable=True),
|
|
sa.Column('min_quantity', sa.Integer(), nullable=True),
|
|
sa.Column('max_quantity', sa.Integer(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=True),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
|
sa.ForeignKeyConstraint(['product_id'], ['products.id'], ),
|
|
sa.ForeignKeyConstraint(['shop_id'], ['shops.id'], ),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
sa.UniqueConstraint('shop_id', 'product_id', name='uq_shop_product')
|
|
)
|
|
op.create_index('idx_shop_product_active', 'shop_products', ['shop_id', 'is_active'], unique=False)
|
|
op.create_index('idx_shop_product_featured', 'shop_products', ['shop_id', 'is_featured'], unique=False)
|
|
op.create_index(op.f('ix_shop_products_id'), 'shop_products', ['id'], unique=False)
|
|
op.create_table('stock',
|
|
sa.Column('id', sa.Integer(), nullable=False),
|
|
sa.Column('gtin', sa.String(), nullable=False),
|
|
sa.Column('location', sa.String(), nullable=False),
|
|
sa.Column('quantity', sa.Integer(), nullable=False),
|
|
sa.Column('reserved_quantity', sa.Integer(), nullable=True),
|
|
sa.Column('shop_id', sa.Integer(), nullable=True),
|
|
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
sa.ForeignKeyConstraint(['shop_id'], ['shops.id'], ),
|
|
sa.PrimaryKeyConstraint('id'),
|
|
sa.UniqueConstraint('gtin', 'location', name='uq_stock_gtin_location')
|
|
)
|
|
op.create_index('idx_stock_gtin_location', 'stock', ['gtin', 'location'], unique=False)
|
|
op.create_index(op.f('ix_stock_gtin'), 'stock', ['gtin'], unique=False)
|
|
op.create_index(op.f('ix_stock_id'), 'stock', ['id'], unique=False)
|
|
op.create_index(op.f('ix_stock_location'), 'stock', ['location'], unique=False)
|
|
# ### end Alembic commands ###
|
|
|
|
|
|
def downgrade() -> None:
|
|
# ### commands auto generated by Alembic - please adjust! ###
|
|
op.drop_index(op.f('ix_stock_location'), table_name='stock')
|
|
op.drop_index(op.f('ix_stock_id'), table_name='stock')
|
|
op.drop_index(op.f('ix_stock_gtin'), table_name='stock')
|
|
op.drop_index('idx_stock_gtin_location', table_name='stock')
|
|
op.drop_table('stock')
|
|
op.drop_index(op.f('ix_shop_products_id'), table_name='shop_products')
|
|
op.drop_index('idx_shop_product_featured', table_name='shop_products')
|
|
op.drop_index('idx_shop_product_active', table_name='shop_products')
|
|
op.drop_table('shop_products')
|
|
op.drop_index(op.f('ix_marketplace_import_jobs_shop_name'), table_name='marketplace_import_jobs')
|
|
op.drop_index(op.f('ix_marketplace_import_jobs_marketplace'), table_name='marketplace_import_jobs')
|
|
op.drop_index(op.f('ix_marketplace_import_jobs_id'), table_name='marketplace_import_jobs')
|
|
op.drop_index('idx_marketplace_import_user_marketplace', table_name='marketplace_import_jobs')
|
|
op.drop_index('idx_marketplace_import_shop_status', table_name='marketplace_import_jobs')
|
|
op.drop_index('idx_marketplace_import_shop_id', table_name='marketplace_import_jobs')
|
|
op.drop_table('marketplace_import_jobs')
|
|
op.drop_index(op.f('ix_shops_shop_code'), table_name='shops')
|
|
op.drop_index(op.f('ix_shops_id'), table_name='shops')
|
|
op.drop_table('shops')
|
|
op.drop_index(op.f('ix_users_username'), table_name='users')
|
|
op.drop_index(op.f('ix_users_id'), table_name='users')
|
|
op.drop_index(op.f('ix_users_email'), table_name='users')
|
|
op.drop_table('users')
|
|
op.drop_index(op.f('ix_products_shop_name'), table_name='products')
|
|
op.drop_index(op.f('ix_products_product_id'), table_name='products')
|
|
op.drop_index(op.f('ix_products_marketplace'), table_name='products')
|
|
op.drop_index(op.f('ix_products_id'), table_name='products')
|
|
op.drop_index(op.f('ix_products_gtin'), table_name='products')
|
|
op.drop_index(op.f('ix_products_google_product_category'), table_name='products')
|
|
op.drop_index(op.f('ix_products_brand'), table_name='products')
|
|
op.drop_index(op.f('ix_products_availability'), table_name='products')
|
|
op.drop_index('idx_marketplace_shop', table_name='products')
|
|
op.drop_index('idx_marketplace_brand', table_name='products')
|
|
op.drop_table('products')
|
|
# ### end Alembic commands ###
|