adsService = $adsService; } public function campaigns($id) { $campaigns = $this->adsService->listCampaigns($id); return response()->json($campaigns); } public function listCampaignsMetrics(Request $request) { $clientCustomerId = $request->clientCustomerId; $startDate = $request->startDate; $endDate = $request->endDate; $client = Client::where('customer_id', $clientCustomerId)->firstOrFail(); abort_unless($this->hierarchyService->canViewClient(Auth::user(), $client), 403); $campaigns = $this->adsService->listCampaigns($clientCustomerId); $campaignsWithMetrics = []; foreach ($campaigns as $campaign) { $metrics = $this->adsService->listCampaignsMetrics( $clientCustomerId, $campaign['id'], $startDate, $endDate ); $campaign['total_actual_spend'] = 0; $campaign['total_impressions'] = 0; $campaign['total_clicks'] = 0; $campaign['metrics'] = []; foreach ($metrics as $metric) { $campaign['total_actual_spend'] += $metric['actual_spend'] ?? 0; $campaign['total_impressions'] += $metric['impressions'] ?? 0; $campaign['total_clicks'] += $metric['clicks'] ?? 0; } // CPC calculation $campaign['cpc'] = $campaign['total_clicks'] > 0 ? $campaign['total_actual_spend'] / $campaign['total_clicks'] : 0; $campaign['total_actual_spend'] = number_format($campaign['total_actual_spend'], 2, '.', ''); $campaign['metrics'] = $metrics; $campaignsWithMetrics[] = $campaign; } $totalSpend = array_sum(array_column($campaignsWithMetrics, 'total_actual_spend')); $totalClicks = array_sum(array_column($campaignsWithMetrics, 'total_clicks')); return response()->json([ 'campaigns' => $campaignsWithMetrics, 'summary' => [ 'total_actual_spend' => number_format(array_sum(array_column($campaignsWithMetrics, 'total_actual_spend')), 2, '.', ''), 'total_impressions' => array_sum(array_column($campaignsWithMetrics, 'total_impressions')), 'total_clicks' => array_sum(array_column($campaignsWithMetrics, 'total_clicks')), ] ]); } }