feat: Add Analytics, Odoo Integration, A/B Testing, and Content features

Phase 1 - Analytics y Reportes:
- PostMetrics and AnalyticsReport models for tracking engagement
- Analytics service with dashboard stats, top posts, optimal times
- 8 API endpoints at /api/analytics/*
- Interactive dashboard with Chart.js charts
- Celery tasks for metrics fetch (15min) and weekly reports

Phase 2 - Integración Odoo:
- Lead and OdooSyncLog models for CRM integration
- Odoo fields added to Product and Service models
- XML-RPC service for bidirectional sync
- Lead management API at /api/leads/*
- Leads dashboard template
- Celery tasks for product/service sync and lead export

Phase 3 - A/B Testing y Recycling:
- ABTest, ABTestVariant, RecycledPost models
- Statistical winner analysis using chi-square test
- Content recycling with engagement-based scoring
- APIs at /api/ab-tests/* and /api/recycling/*
- Automated test evaluation and content recycling tasks

Phase 4 - Thread Series y Templates:
- ThreadSeries and ThreadPost models for multi-post threads
- AI-powered thread generation
- Enhanced ImageTemplate with HTML template support
- APIs at /api/threads/* and /api/templates/*
- Thread scheduling with reply chain support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-28 03:10:42 +00:00
parent 03b5f9f2e2
commit ecc2ca73ea
31 changed files with 6067 additions and 6 deletions

View File

@@ -49,6 +49,12 @@ celery_app.conf.update(
"schedule": 60.0, # Every minute
},
# Check and publish thread series posts every minute
"check-thread-schedules": {
"task": "app.worker.tasks.check_thread_schedules",
"schedule": 60.0, # Every minute
},
# Generate daily content at 6 AM
"generate-daily-content": {
"task": "app.worker.tasks.generate_daily_content",
@@ -72,5 +78,53 @@ celery_app.conf.update(
"task": "app.worker.tasks.cleanup_old_data",
"schedule": crontab(hour=3, minute=0, day_of_week=0), # Sunday 3 AM
},
# Fetch post metrics every 15 minutes
"fetch-post-metrics": {
"task": "app.worker.tasks.fetch_post_metrics",
"schedule": crontab(minute="*/15"),
},
# Generate weekly analytics report on Sunday at 9 AM
"generate-weekly-report": {
"task": "app.worker.tasks.generate_weekly_analytics_report",
"schedule": crontab(hour=9, minute=0, day_of_week=0), # Sunday 9 AM
},
# Recalculate optimal times weekly on Monday at 2 AM
"recalculate-optimal-times": {
"task": "app.worker.tasks.recalculate_optimal_times",
"schedule": crontab(hour=2, minute=0, day_of_week=1), # Monday 2 AM
},
# Sync products from Odoo daily at 6 AM
"sync-products-odoo": {
"task": "app.worker.tasks.sync_products_from_odoo",
"schedule": crontab(hour=6, minute=0),
},
# Sync services from Odoo daily at 6:05 AM
"sync-services-odoo": {
"task": "app.worker.tasks.sync_services_from_odoo",
"schedule": crontab(hour=6, minute=5),
},
# Export leads to Odoo every hour
"export-leads-odoo": {
"task": "app.worker.tasks.export_leads_to_odoo",
"schedule": crontab(minute=30), # Every hour at :30
},
# Evaluate A/B tests every hour
"evaluate-ab-tests": {
"task": "app.worker.tasks.evaluate_ab_tests",
"schedule": crontab(minute=0), # Every hour at :00
},
# Auto-recycle content daily at 2 AM
"auto-recycle-content": {
"task": "app.worker.tasks.auto_recycle_content",
"schedule": crontab(hour=2, minute=0),
},
},
)