feat: columna ad_daily.link_clicks (Meta clics enlace reales)

Persistimos link_clicks en warehouse (con backfill desde __lc), sync escribe la columna y creatividades la leen sin romper si falta.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
4Ventures
2026-09-29 10:50:55 +02:00
parent 82a910330d
commit 8c5acb626f
5 changed files with 176 additions and 22 deletions

View File

@@ -76,23 +76,39 @@ export async function GET(req: NextRequest) {
const agency = isAgencyRole(userRole(user));
let daily: AdDailyRow[] = [];
const selectWithLc =
'date,platform,campaign_name,ad_id,ad_name,impressions,clicks,link_clicks,spend,platform_leads';
const selectNoLc =
'date,platform,campaign_name,ad_id,ad_name,impressions,clicks,spend,platform_leads';
if (agency && ctx.viaView) {
const tid = encodeURIComponent(ctx.tenantId);
const d = await restGet<AdDailyRow[]>(
`/rest/v1/ad_daily?tenant_id=eq.${tid}&date=gte.${since}&date=lte.${until}&select=date,platform,campaign_name,ad_id,ad_name,impressions,clicks,spend,platform_leads&order=date.desc&limit=5000`
let d = await restGet<AdDailyRow[]>(
`/rest/v1/ad_daily?tenant_id=eq.${tid}&date=gte.${since}&date=lte.${until}&select=${selectWithLc}&order=date.desc&limit=5000`
);
if (!d.ok && /link_clicks/i.test(String(d.error || ''))) {
d = await restGet<AdDailyRow[]>(
`/rest/v1/ad_daily?tenant_id=eq.${tid}&date=gte.${since}&date=lte.${until}&select=${selectNoLc}&order=date.desc&limit=5000`
);
}
daily = d.data || [];
} else {
const { data } = await supabase
let q = await supabase
.from('ad_daily')
.select(
'date,platform,campaign_name,ad_id,ad_name,impressions,clicks,spend,platform_leads'
)
.select(selectWithLc)
.gte('date', since)
.lte('date', until)
.order('date', { ascending: false })
.limit(5000);
daily = (data as AdDailyRow[]) || [];
if (q.error && /link_clicks/i.test(q.error.message || '')) {
q = await supabase
.from('ad_daily')
.select(selectNoLc)
.gte('date', since)
.lte('date', until)
.order('date', { ascending: false })
.limit(5000);
}
daily = (q.data as AdDailyRow[]) || [];
}
const warnings: string[] = [];