reachify-ai-service / scripts /snapshot_daily_stats.py
amitbhatt6075's picture
Complete fresh start - FINAL UPLOAD
0914e96
raw
history blame
2.01 kB
# File: ai-service/scripts/snapshot_daily_stats.py (NEW FILE)
# This is a backend script, no AI model yet.
import pandas as pd
from sqlalchemy import create_engine, text
from datetime import date, timedelta
import os, sys
# ... (Setup code to get ROOT_DIR and load_dotenv, like in our other scripts)
def take_daily_snapshot():
print("--- πŸ“Έ Starting Daily Influencer Stat Snapshot Process ---")
db_url = os.getenv("DATABASE_URL")
if not db_url: return
engine = create_engine(db_url)
today = date.today()
yesterday = today - timedelta(days=1)
# SQL to calculate yesterday's average stats for all influencers who made submissions
sql = text("""
WITH daily_agg AS (
SELECT
cs.influencer_id,
AVG(cs.likes) as avg_likes,
AVG(cs.comments) as avg_comments,
AVG(cs.engagement_rate) as avg_engagement_rate,
-- Get the latest follower count for the influencer
(SELECT ip.follower_count FROM public.influencer_profiles ip WHERE ip.profile_id = cs.influencer_id LIMIT 1) as follower_count
FROM public.campaign_submissions cs
WHERE DATE(cs.created_at) = :yesterday_date
GROUP BY cs.influencer_id
)
INSERT INTO public.daily_influencer_stats (profile_id, date, avg_likes, avg_comments, avg_engagement_rate, follower_count)
SELECT influencer_id, :yesterday_date, avg_likes, avg_comments, avg_engagement_rate, follower_count
FROM daily_agg
ON CONFLICT (profile_id, date) DO NOTHING; -- Avoid duplicates
""")
try:
with engine.connect() as connection:
result = connection.execute(sql, {'yesterday_date': yesterday})
print(f"βœ… Snapshot complete. {result.rowcount} influencers' stats were updated for {yesterday}.")
except Exception as e:
print(f"πŸ”΄ ERROR during daily snapshot: {e}")
if __name__ == '__main__':
take_daily_snapshot()