From 638b466daf6f86ccc7426521c29ebc2df7e77041 Mon Sep 17 00:00:00 2001 From: Jonas Linter Date: Tue, 28 Oct 2025 15:41:36 +0100 Subject: [PATCH] Fixed erroneous upsert --- src/meta_api_grabber/database.py | 34 ++++++++------------------------ 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/src/meta_api_grabber/database.py b/src/meta_api_grabber/database.py index 633bafc..cd1e25a 100644 --- a/src/meta_api_grabber/database.py +++ b/src/meta_api_grabber/database.py @@ -175,17 +175,16 @@ class TimescaleDBClient: status: Campaign status objective: Campaign objective """ - logger.info( - f"upsert_campaign called: campaign_id={campaign_id}, account_id={account_id}, " - f"campaign_name={campaign_name!r}, status={status}, objective={objective}" - ) query = """ INSERT INTO campaigns (campaign_id, account_id, campaign_name, status, objective, updated_at) VALUES ($1, $2, $3, $4, $5, NOW()) ON CONFLICT (campaign_id) DO UPDATE SET - campaign_name = EXCLUDED.campaign_name, + campaign_name = CASE + WHEN EXCLUDED.campaign_name = 'Unknown' THEN campaigns.campaign_name + ELSE EXCLUDED.campaign_name + END, status = COALESCE(EXCLUDED.status, campaigns.status), objective = COALESCE(EXCLUDED.objective, campaigns.objective), updated_at = NOW() @@ -197,16 +196,6 @@ class TimescaleDBClient: result = await conn.execute(query, campaign_id, account_id, campaign_name, status, objective) logger.debug(f"Query result: {result}") - # Query back what was actually stored - stored = await conn.fetchrow( - "SELECT campaign_name, status, objective FROM campaigns WHERE campaign_id = $1", - campaign_id - ) - logger.info( - f"After upsert, database contains: campaign_id={campaign_id}, " - f"campaign_name={stored['campaign_name']!r}, status={stored['status']}, " - f"objective={stored['objective']}" - ) async def upsert_adset( self, @@ -416,17 +405,10 @@ class TimescaleDBClient: """ # Cache metadata if requested and available in the insights data if cache_metadata: - # First ensure campaign exists (adset references campaign) - # We don't have campaign name in adset insights, so only create if needed - await self.upsert_campaign( - campaign_id=campaign_id, - account_id=account_id, - campaign_name='Unknown', # Campaign name not in adset insights - status=None, - objective=None, - ) - - # Then cache adset metadata if available + # Cache adset metadata if available + # Note: Campaign should already exist from cache_campaigns_metadata or grab_campaign_insights + # If it doesn't exist, the foreign key constraint will fail with a clear error + # This is intentional - we should never silently create campaigns with 'Unknown' names if data.get("adset_name"): await self.upsert_adset( adset_id=adset_id,