Recovered state: integrated TrendSurferAgent, restored frontend/backend files, and cleaned up recovery scripts
This commit is contained in:
94
backend/services/seo/advertools_task_manager.py
Normal file
94
backend/services/seo/advertools_task_manager.py
Normal file
@@ -0,0 +1,94 @@
|
||||
"""
|
||||
Advertools Task Restoration Utility
|
||||
Handles creation and restoration of Advertools intelligence tasks for users.
|
||||
"""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any
|
||||
from loguru import logger
|
||||
from sqlalchemy import func
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from models.onboarding import WebsiteAnalysis, OnboardingSession
|
||||
from models.advertools_monitoring_models import AdvertoolsTask
|
||||
from services.database import get_all_user_ids, get_session_for_user
|
||||
|
||||
async def restore_advertools_tasks(scheduler: Any) -> int:
|
||||
"""
|
||||
Restore/create Advertools tasks for all users who have completed Step 2.
|
||||
|
||||
Returns:
|
||||
Number of tasks created/restored
|
||||
"""
|
||||
logger.info("Restoring Advertools intelligence tasks...")
|
||||
total_created = 0
|
||||
|
||||
user_ids = get_all_user_ids()
|
||||
for user_id in user_ids:
|
||||
try:
|
||||
db = get_session_for_user(user_id)
|
||||
if not db:
|
||||
continue
|
||||
|
||||
try:
|
||||
# Check if user has completed Step 2 (has WebsiteAnalysis)
|
||||
session = db.query(OnboardingSession).filter(OnboardingSession.user_id == user_id).first()
|
||||
if not session:
|
||||
continue
|
||||
|
||||
analysis = db.query(WebsiteAnalysis).filter(WebsiteAnalysis.session_id == session.id).first()
|
||||
if not analysis or not analysis.website_url:
|
||||
continue
|
||||
|
||||
# Check for existing Advertools tasks
|
||||
existing_audit = db.query(AdvertoolsTask).filter(
|
||||
AdvertoolsTask.user_id == user_id,
|
||||
func.json_extract(AdvertoolsTask.payload, '$.type') == 'content_audit'
|
||||
).first()
|
||||
|
||||
if not existing_audit:
|
||||
# Create weekly content audit task
|
||||
new_audit = AdvertoolsTask(
|
||||
user_id=user_id,
|
||||
website_url=analysis.website_url,
|
||||
status='active',
|
||||
next_execution=datetime.utcnow() + timedelta(days=1), # Start tomorrow
|
||||
frequency_days=7,
|
||||
payload={
|
||||
"type": "content_audit",
|
||||
"website_url": analysis.website_url
|
||||
}
|
||||
)
|
||||
db.add(new_audit)
|
||||
total_created += 1
|
||||
logger.info(f"Created weekly content audit task for user {user_id}")
|
||||
|
||||
existing_health = db.query(AdvertoolsTask).filter(
|
||||
AdvertoolsTask.user_id == user_id,
|
||||
func.json_extract(AdvertoolsTask.payload, '$.type') == 'site_health'
|
||||
).first()
|
||||
|
||||
if not existing_health:
|
||||
# Create weekly site health task
|
||||
new_health = AdvertoolsTask(
|
||||
user_id=user_id,
|
||||
website_url=analysis.website_url,
|
||||
status='active',
|
||||
next_execution=datetime.utcnow() + timedelta(days=2), # Start in 2 days
|
||||
frequency_days=7,
|
||||
payload={
|
||||
"type": "site_health",
|
||||
"website_url": analysis.website_url
|
||||
}
|
||||
)
|
||||
db.add(new_health)
|
||||
total_created += 1
|
||||
logger.info(f"Created weekly site health task for user {user_id}")
|
||||
|
||||
db.commit()
|
||||
finally:
|
||||
db.close()
|
||||
except Exception as e:
|
||||
logger.error(f"Error restoring Advertools tasks for user {user_id}: {e}")
|
||||
|
||||
return total_created
|
||||
Reference in New Issue
Block a user