"""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 ###