Add local_campaign_id extraction and storage for complete campaign tracking
Database Schema: ✅ Added local_campaign_id VARCHAR(50) column ✅ Stores the immediate campaign the asset belongs to (C000000551) Enhanced Extraction: ✅ extract_global_campaign_reference() now returns 3 values: - global_master_campaign_id (C000000068) - global_master_folder_id (676f2bcde4c7...) - local_campaign_id (C000000551) ✅ Extracts FERRERO.FIELD.CAMPAIGN ID from same collection ✅ Only sets local_campaign_id if that collection has global reference ✅ Logs all three IDs when found A1→A2 Script: ✅ Passes local_campaign_id to store_master_asset() ✅ Stores complete campaign relationship Database Now Stores: - tracking_id: ABC123 (unique 6-char) - opentext_id: 0008a50... (DAM asset ID) - local_campaign_id: C000000551 (immediate campaign) - global_master_campaign_id: C000000068 (global master) - global_master_folder_id: 676f2bcde4c7... (global folder) Example Relationship: - Asset downloaded from Local Campaign C000000551 - That campaign references Global Master C000000068 - All three IDs stored for complete traceability Database schema now complete with full campaign relationship tracking! 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
92ad76faae
commit
eebfc8f189
2 changed files with 32 additions and 14 deletions
|
|
@ -111,10 +111,10 @@ def process_campaign(campaign, dam, box, db, notifier, config):
|
|||
tracking_id=tracking_id
|
||||
)
|
||||
|
||||
# 4. Extract Global Campaign Reference from asset metadata
|
||||
# 4. Extract Global Campaign Reference and Local Campaign ID from asset metadata
|
||||
global_ref = db.extract_global_campaign_reference(asset)
|
||||
|
||||
# 5. Store in database with FULL metadata and global campaign reference
|
||||
# 5. Store in database with FULL metadata and campaign references
|
||||
db_result = db.store_master_asset(
|
||||
tracking_id=tracking_id,
|
||||
opentext_id=asset_id,
|
||||
|
|
@ -123,7 +123,8 @@ def process_campaign(campaign, dam, box, db, notifier, config):
|
|||
box_url=box_result['url'],
|
||||
upload_folder_id=final_folder_id,
|
||||
global_master_campaign_id=global_ref['global_master_campaign_id'],
|
||||
global_master_folder_id=global_ref['global_master_folder_id']
|
||||
global_master_folder_id=global_ref['global_master_folder_id'],
|
||||
local_campaign_id=global_ref['local_campaign_id']
|
||||
)
|
||||
|
||||
if db_result['success']:
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ class Database:
|
|||
cursor.close()
|
||||
self.put_connection(conn)
|
||||
|
||||
def store_master_asset(self, tracking_id, opentext_id, asset_data, box_file_id, box_url, upload_folder_id, global_master_campaign_id=None, global_master_folder_id=None):
|
||||
def store_master_asset(self, tracking_id, opentext_id, asset_data, box_file_id, box_url, upload_folder_id, global_master_campaign_id=None, global_master_folder_id=None, local_campaign_id=None):
|
||||
"""
|
||||
Store master asset with FULL metadata in JSONB column
|
||||
|
||||
|
|
@ -89,6 +89,7 @@ class Database:
|
|||
upload_folder_id: Final Assets folder ID for upload
|
||||
global_master_campaign_id: Global master campaign ID (from GLOBAL CAMPAIGN REFERENCE)
|
||||
global_master_folder_id: Global master folder ID
|
||||
local_campaign_id: Local campaign ID (immediate campaign this asset belongs to)
|
||||
|
||||
Returns:
|
||||
dict with success boolean
|
||||
|
|
@ -117,9 +118,9 @@ class Database:
|
|||
tracking_id, opentext_id, original_filename, file_extension,
|
||||
file_size_bytes, mime_type, upload_directory,
|
||||
description, full_metadata, status,
|
||||
global_master_campaign_id, global_master_folder_id
|
||||
global_master_campaign_id, global_master_folder_id, local_campaign_id
|
||||
) VALUES (
|
||||
%s, %s, %s, %s, %s, %s, %s, %s, %s, 'active', %s, %s
|
||||
%s, %s, %s, %s, %s, %s, %s, %s, %s, 'active', %s, %s, %s
|
||||
)
|
||||
ON CONFLICT (tracking_id) DO UPDATE SET
|
||||
upload_directory = EXCLUDED.upload_directory,
|
||||
|
|
@ -127,6 +128,7 @@ class Database:
|
|||
full_metadata = EXCLUDED.full_metadata,
|
||||
global_master_campaign_id = EXCLUDED.global_master_campaign_id,
|
||||
global_master_folder_id = EXCLUDED.global_master_folder_id,
|
||||
local_campaign_id = EXCLUDED.local_campaign_id,
|
||||
updated_at = CURRENT_TIMESTAMP
|
||||
""", (
|
||||
tracking_id,
|
||||
|
|
@ -139,7 +141,8 @@ class Database:
|
|||
description,
|
||||
full_metadata_json,
|
||||
global_master_campaign_id,
|
||||
global_master_folder_id
|
||||
global_master_folder_id,
|
||||
local_campaign_id
|
||||
))
|
||||
|
||||
conn.commit()
|
||||
|
|
@ -319,16 +322,17 @@ class Database:
|
|||
|
||||
def extract_global_campaign_reference(self, asset_data):
|
||||
"""
|
||||
Extract Global Campaign Reference from asset metadata
|
||||
Extract Global Campaign Reference and Local Campaign ID from asset metadata
|
||||
|
||||
Args:
|
||||
asset_data: Complete DAM asset JSON
|
||||
|
||||
Returns:
|
||||
dict with global_master_campaign_id and global_master_folder_id
|
||||
dict with global_master_campaign_id, global_master_folder_id, local_campaign_id
|
||||
"""
|
||||
global_master_campaign_id = None
|
||||
global_master_folder_id = None
|
||||
local_campaign_id = None
|
||||
|
||||
# Look in inherited_metadata_collections
|
||||
collections = asset_data.get('inherited_metadata_collections', [])
|
||||
|
|
@ -338,20 +342,32 @@ class Database:
|
|||
if collection.get('container_type_name') == 'L7+ - CAMPAIGN':
|
||||
inherited_metadata = collection.get('inherited_metadata_values', [])
|
||||
|
||||
campaign_id_in_collection = None
|
||||
has_global_reference = False
|
||||
|
||||
for inherited in inherited_metadata:
|
||||
metadata_element = inherited.get('metadata_element', {})
|
||||
|
||||
# Extract Campaign ID
|
||||
if metadata_element.get('id') == 'FERRERO.FIELD.CAMPAIGN ID':
|
||||
campaign_id_value = metadata_element.get('value', {}).get('value', {}).get('value')
|
||||
if campaign_id_value:
|
||||
campaign_id_in_collection = campaign_id_value
|
||||
|
||||
# Look for GLOBAL CAMPAIGN REFERENCE field
|
||||
if metadata_element.get('id') == 'FERRERO.FIELD.GLOBAL CAMPAIGN REFERENCE':
|
||||
value = metadata_element.get('value', {}).get('value', {}).get('value')
|
||||
if value:
|
||||
global_master_campaign_id = value
|
||||
has_global_reference = True
|
||||
logger.info("Found Global Campaign Reference: {}".format(value))
|
||||
|
||||
# If this collection has a global reference, it might also have the folder ID
|
||||
# The container itself might be the global master folder
|
||||
if global_master_campaign_id:
|
||||
# Get the container ID if available
|
||||
# If this campaign has a global reference, it's the local campaign
|
||||
if has_global_reference and campaign_id_in_collection:
|
||||
local_campaign_id = campaign_id_in_collection
|
||||
logger.info("Local Campaign ID: {}".format(local_campaign_id))
|
||||
|
||||
# Get the container ID (global master folder)
|
||||
container_id = collection.get('container_id')
|
||||
if container_id:
|
||||
global_master_folder_id = container_id
|
||||
|
|
@ -359,7 +375,8 @@ class Database:
|
|||
|
||||
return {
|
||||
'global_master_campaign_id': global_master_campaign_id,
|
||||
'global_master_folder_id': global_master_folder_id
|
||||
'global_master_folder_id': global_master_folder_id,
|
||||
'local_campaign_id': local_campaign_id
|
||||
}
|
||||
|
||||
def close(self):
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue