Files
wevads-platform/scripts/api_xc-dashboard-api.php
2026-02-26 04:53:11 +01:00

39 lines
3.0 KiB
PHP
Executable File

<?php
require_once("/opt/wevads/config/credentials.php");
header('Content-Type: application/json');
$db = pg_connect("host=localhost dbname=adx_system user=admin password=".WEVADS_DB_PASS);
pg_query($db, "SET search_path TO admin");
$action = $_GET['action'] ?? 'dashboard';
switch($action) {
case 'dashboard':
$yt = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as videos, COALESCE(SUM(views_count),0) as views, COUNT(*) FILTER(WHERE status='published') as published FROM yt_jobs"));
$ads = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as campaigns, COALESCE(SUM(budget_spent),0) as spent, COALESCE(SUM(revenue_generated),0) as revenue, COALESCE(SUM(conversions),0) as conversions FROM xc_campaigns"));
$email = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as sent_today FROM unified_send_log WHERE created_at::date=CURRENT_DATE")) ?: ['sent_today'=>0];
$arb = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as total, COUNT(*) FILTER(WHERE decision_type='kill') as kills, COUNT(*) FILTER(WHERE decision_type='boost') as boosts FROM ads_arbitrage_log"));
$spent = (float)($ads['spent'] ?? 0);
$rev = (float)($ads['revenue'] ?? 0);
echo json_encode(['status'=>'success','channels'=>[
'youtube'=>['videos'=>$yt['videos'],'published'=>$yt['published'],'views'=>$yt['views']],
'ads'=>['campaigns'=>$ads['campaigns'],'spent'=>$spent,'revenue'=>$rev,'conversions'=>$ads['conversions'],'roas'=>$spent>0?round($rev/$spent,2):0],
'email'=>['sent_today'=>$email['sent_today']],
'arbitrage'=>['decisions'=>$arb['total'],'kills'=>$arb['kills'],'boosts'=>$arb['boosts']]
],'totals'=>['spent'=>$spent,'revenue'=>$rev,'roas'=>$spent>0?round($rev/$spent,2):0]]);
break;
case 'daily_snapshot':
$today = date('Y-m-d');
$yt = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as v FROM yt_jobs WHERE created_at::date='$today'"));
$ads = pg_fetch_assoc(pg_query($db, "SELECT COALESCE(SUM(budget_spent),0) as s, COALESCE(SUM(revenue_generated),0) as r, COALESCE(SUM(conversions),0) as c FROM xc_campaigns"));
$em = pg_fetch_assoc(pg_query($db, "SELECT COUNT(*) as s FROM unified_send_log WHERE created_at::date='$today'"));
pg_query($db, "INSERT INTO xc_performance_daily(date,yt_videos_published,email_sent,ads_spent,ads_revenue,ads_conversions,total_spent,total_revenue,overall_roas,calculated_at)
VALUES('$today',{$yt['v']},{$em['s']},{$ads['s']},{$ads['r']},{$ads['c']},{$ads['s']},{$ads['r']},CASE WHEN {$ads['s']}>0 THEN round({$ads['r']}::numeric/{$ads['s']},2) ELSE 0 END,NOW())
ON CONFLICT(date) DO UPDATE SET yt_videos_published=EXCLUDED.yt_videos_published,email_sent=EXCLUDED.email_sent,ads_spent=EXCLUDED.ads_spent,ads_revenue=EXCLUDED.ads_revenue,calculated_at=NOW()");
echo json_encode(['status'=>'saved','date'=>$today]);
break;
case 'history':
$days=(int)($_GET['days']??30);
$p=pg_fetch_all(pg_query($db,"SELECT * FROM xc_performance_daily ORDER BY date DESC LIMIT $days"));
echo json_encode(['status'=>'success','data'=>$p?:[]]);
break;
}
?>