Commit graph

3 commits

Author SHA1 Message Date
DJP
92ad76faae Add comprehensive database schema documentation - DATABASE_SCHEMA.md
Created complete database reference guide:

Schema Documentation:
 Full table definitions (master_assets, derivative_assets)
 All column descriptions with types and purposes
 Index definitions and purposes
 Foreign key constraints
 Trigger definitions

Migration History:
 Session 1: Initial setup
 Session 2: Add full_metadata JSONB (Oct 30)
 Session 3: Add global_master_campaign_id and global_master_folder_id (Nov 3)
 Complete migration SQL for each change
 Before/after comparison
 Impact assessment

Column Reference Table:
 All 30+ columns documented
 Data types and nullability
 Default values
 Purpose and usage notes
 Highlights new columns with 

Query Examples:
 Common queries (recent assets, by tracking ID, etc.)
 Global Master relationship queries
 Campaign completion checks
 Statistics and reporting queries
 Dashboard queries

Operations:
 Backup and restore procedures
 Maintenance tasks (VACUUM, size checks)
 Performance optimization
 Security and permissions
 Troubleshooting guide

Key Features Documented:
- full_metadata JSONB (no truncation!)
- global_master_campaign_id (campaign relationships)
- global_master_folder_id (folder tracking)
- Tracking ID system
- Connection pooling
- Index strategy

Ready for production deployment with complete DB documentation!

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 10:24:44 -05:00
DJP
8b576bb598 Add A2→A3 polling version and fix database to use existing columns
Created a2_to_a3_upload_polling.py:
- Polls Box folder (348526703108) instead of webhook
- Works locally (no need for public URL)
- Single-run mode (process one file and exit)
- Can be run via cron every 5 minutes

Why Polling Instead of Webhook:
- Webhooks require public URL (doesn't work on localhost)
- Polling works everywhere (local and server)
- Same functionality, different trigger mechanism

Database Fix:
- Don't create new columns (dam_asset_id, upload_status)
- Use existing schema: tracking_id, derivative_filename, file_extension, status
- Simplified store_derivative_asset() to use existing columns only
- Database now compatible with existing schema

Test Results - A2→A3 Polling:
 Polls Box folder 348526703108
 Finds V2 files with tracking IDs
 Downloads from Box
 Loads master metadata from PostgreSQL
 Builds 27 MVP fields
 Updates Description, State, Language from filename
 Uploads to DAM successfully (Asset ID: 214924)
 Stores derivative record
 Processes one file and exits

Both Scripts Working:
 A1→A2: Downloads from DAM → Box (folder 348304357505)
 A2→A3: Uploads from Box → DAM (folder 348526703108)

Cron Setup:
*/5 * * * * python scripts/a1_to_a2_download.py
*/5 * * * * python scripts/a2_to_a3_upload_polling.py

Complete automation ready for production!

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 19:21:13 -04:00
DJP
363560c06f Fix boxsdk version and add .env file
Changes:
- Downgraded boxsdk to 3.x (compatible API)
- Created .env file with all credentials
- Fixed requirements.txt versions

Python automation now ready for testing:
 Virtual environment created
 All dependencies installed
 Box connection working
 Database connection working
⚠️ DAM OAuth (same creds as PHP, might be temp server issue)

Next steps:
1. Test DAM connection (may need to retry)
2. Run A1→A2 script
3. Monitor logs

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 17:09:49 -04:00