Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
BigQueryService
0.00% covered (danger)
0.00%
0 / 22
0.00% covered (danger)
0.00%
0 / 3
20
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 getAccessToken
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
2
 query
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2
3namespace App\Services;
4
5use Google\Cloud\BigQuery\BigQueryClient;
6use GuzzleHttp\Client;
7
8class BigQueryService
9{
10    protected $bigQuery;
11
12    public function __construct()
13    {
14        $accessToken = $this->getAccessToken();
15
16        $this->bigQuery = new BigQueryClient([
17            'projectId' => env('GOOGLE_PROJECT_ID'),
18            'accessToken' => $accessToken,
19        ]);
20    }
21
22    private function getAccessToken()
23    {
24        $client = new Client;
25
26        $response = $client->post('https://oauth2.googleapis.com/token', [
27            'form_params' => [
28                'client_id' => env('GOOGLE_CLIENT_ID'),
29                'client_secret' => env('GOOGLE_CLIENT_SECRET'),
30                'refresh_token' => env('GOOGLE_REFRESH_TOKEN'),
31                'grant_type' => 'refresh_token',
32            ],
33        ]);
34
35        $data = json_decode($response->getBody(), true);
36
37        return $data['access_token'];
38    }
39
40    public function query($sql)
41    {
42        $queryJobConfig = $this->bigQuery->query($sql);
43
44        $queryResults = $this->bigQuery->runQuery($queryJobConfig);
45
46        $rows = [];
47
48        foreach ($queryResults as $row) {
49            $rows[] = $row;
50        }
51
52        return $rows;
53    }
54}