From 3e9ad2dcb1e99575d6bdc4a89c733bee1777d288 Mon Sep 17 00:00:00 2001 From: lasse Date: Fri, 30 May 2025 10:55:42 +0200 Subject: [PATCH] fix trigger creation bug --- backend/database_init.py | 27 ++++++++++++++++++++++++++- backend/models.py | 8 ++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/backend/database_init.py b/backend/database_init.py index b00d202..6381534 100644 --- a/backend/database_init.py +++ b/backend/database_init.py @@ -28,11 +28,36 @@ def init_database(): print(f"📍 Database URL: {database_url}") try: - # Create all tables + # Create all tables first print("📊 Creating tables...") Base.metadata.create_all(bind=engine) print("✅ Tables created successfully") + # Verify critical tables exist before creating triggers + print("🔍 Verifying tables exist...") + with engine.connect() as connection: + # Check if products and products_history tables exist + products_exists = connection.execute(text(""" + SELECT EXISTS ( + SELECT 1 FROM information_schema.tables + WHERE table_name = 'products' + ); + """)).scalar() + + history_exists = connection.execute(text(""" + SELECT EXISTS ( + SELECT 1 FROM information_schema.tables + WHERE table_name = 'products_history' + ); + """)).scalar() + + if not products_exists: + raise Exception("Products table was not created") + if not history_exists: + raise Exception("Products history table was not created") + + print("✅ Required tables verified") + # Create triggers (if not already created by event listener) print("⚙️ Ensuring triggers are created...") with engine.connect() as connection: diff --git a/backend/models.py b/backend/models.py index 2f9b88d..eaa4f4c 100644 --- a/backend/models.py +++ b/backend/models.py @@ -199,10 +199,10 @@ class ProductHistory(Base): operation = Column(String(1), nullable=False) # 'U' for Update, 'D' for Delete archived_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) -# Create trigger after ProductHistory table is created -@event.listens_for(ProductHistory.__table__, 'after_create') -def create_products_versioning_trigger(target, connection, **kw): - """Create the products versioning trigger after the history table is created""" +# Create trigger after ALL tables are created +@event.listens_for(Base.metadata, 'after_create') +def create_products_versioning_trigger_after_all_tables(target, connection, **kw): + """Create the products versioning trigger after all tables are created""" try: connection.execute(text(PRODUCTS_VERSIONING_TRIGGER_SQL)) print("✅ Products versioning trigger created successfully")