Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
0.00% |
0 / 22 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
| BigQueryService | |
0.00% |
0 / 22 |
|
0.00% |
0 / 3 |
20 | |
0.00% |
0 / 1 |
| __construct | |
0.00% |
0 / 5 |
|
0.00% |
0 / 1 |
2 | |||
| getAccessToken | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
2 | |||
| query | |
0.00% |
0 / 6 |
|
0.00% |
0 / 1 |
6 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace App\Services; |
| 4 | |
| 5 | use Google\Cloud\BigQuery\BigQueryClient; |
| 6 | use GuzzleHttp\Client; |
| 7 | |
| 8 | class 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 | } |