Files
ALwrity/backend/scripts/create_product_asset_tables.py

89 lines
3.3 KiB
Python

"""
Database Migration Script for Product Asset Tables
Creates all tables needed for Product Marketing Suite (product asset creation).
These tables are separate from campaign-related tables and focus on product-specific assets.
"""
import sys
import os
from pathlib import Path
# Add the backend directory to Python path
backend_dir = Path(__file__).parent.parent
sys.path.insert(0, str(backend_dir))
from sqlalchemy import create_engine, text, inspect
from sqlalchemy.orm import sessionmaker
from loguru import logger
import traceback
# Import models - Product Asset models use SubscriptionBase
from models.subscription_models import Base as SubscriptionBase
from models.product_asset_models import ProductAsset, ProductStyleTemplate, EcommerceExport
from services.database import DATABASE_URL
def create_product_asset_tables():
"""Create all product asset tables."""
try:
# Create engine
engine = create_engine(DATABASE_URL, echo=False)
# Create all tables (product asset models share SubscriptionBase)
logger.info("Creating product asset tables for Product Marketing Suite...")
SubscriptionBase.metadata.create_all(bind=engine)
logger.info("✅ Product asset tables created successfully")
# Verify tables were created
with engine.connect() as conn:
# Check if tables exist
inspector = inspect(engine)
tables = inspector.get_table_names()
expected_tables = [
'product_assets',
'product_style_templates',
'product_ecommerce_exports'
]
created_tables = [t for t in expected_tables if t in tables]
missing_tables = [t for t in expected_tables if t not in tables]
if created_tables:
logger.info(f"✅ Created tables: {', '.join(created_tables)}")
if missing_tables:
logger.warning(f"⚠️ Missing tables: {', '.join(missing_tables)}")
else:
logger.info("🎉 All product asset tables verified!")
# Verify indexes were created
with engine.connect() as conn:
inspector = inspect(engine)
# Check ProductAsset indexes
product_asset_indexes = inspector.get_indexes('product_assets')
logger.info(f"✅ ProductAsset indexes: {len(product_asset_indexes)} indexes created")
# Check ProductStyleTemplate indexes
style_template_indexes = inspector.get_indexes('product_style_templates')
logger.info(f"✅ ProductStyleTemplate indexes: {len(style_template_indexes)} indexes created")
# Check EcommerceExport indexes
ecommerce_export_indexes = inspector.get_indexes('product_ecommerce_exports')
logger.info(f"✅ EcommerceExport indexes: {len(ecommerce_export_indexes)} indexes created")
return True
except Exception as e:
logger.error(f"❌ Error creating product asset tables: {e}")
logger.error(traceback.format_exc())
return False
if __name__ == "__main__":
success = create_product_asset_tables()
sys.exit(0 if success else 1)