Skip to content

Commit 4297ff6

Browse files
authored
Merge pull request #1 from always-open/dev-sessions
Add Sessionstatus code
2 parents c21509e + 74ec565 commit 4297ff6

File tree

10 files changed

+66
-16
lines changed

10 files changed

+66
-16
lines changed

config/bwt-api.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

33
return [
4-
'base_url' => env('BWT_API_BASE_URL', 'https://bwt.com/api/'),
4+
'base_url' => env('BWT_API_BASE_URL', 'https://bwt.com/api'),
55
'api_key' => env('BWT_API_KEY'),
66
];

phpstan.neon.dist

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ parameters:
55
level: 5
66
paths:
77
- src
8-
- database
98
tmpDir: build/phpstan
109
checkOctaneCompatibility: true
11-
checkModelProperties: true
10+
checkModelProperties: true
11+
ignoreErrors:
12+
- '#Call to an undefined method Illuminate\\Http\\Client\\Response::getStatusCode\(\)#'

src/BwtApi.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@
22

33
namespace AlwaysOpen\BwtApi;
44

5-
class BwtApi {}
5+
class BwtApi
6+
{
7+
public const BWT_AMAZON_ENGINE = 'bwt_amazon_product';
8+
}

src/BwtApiClient.php

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use AlwaysOpen\BwtApi\DTOs\Amazon\AmazonRequestCreationResponse;
66
use AlwaysOpen\BwtApi\DTOs\Amazon\AmazonResults;
7+
use AlwaysOpen\BwtApi\DTOs\Amazon\AmazonSessionStatusResponse;
78
use AlwaysOpen\BwtApi\DTOs\BatchRequest;
89
use GuzzleHttp\Exception\GuzzleException;
910
use GuzzleHttp\Promise\PromiseInterface;
@@ -23,8 +24,8 @@ public function __construct(
2324
?string $baseUrl = null,
2425
?string $apiKey = null,
2526
) {
26-
$this->baseUrl = $baseUrl ?? config('bwt-api.base_url', 'https://bwt.com/api/');
27-
$this->apiKey = $apiKey ?? config('bwt-api.username') ?? '';
27+
$this->baseUrl = $baseUrl ?? config('bwt-api.base_url', 'https://bwt.com/api');
28+
$this->apiKey = $apiKey ?? config('bwt-api.api_key') ?? '';
2829
}
2930

3031
protected function getAuthHeader(): array
@@ -61,6 +62,27 @@ protected function makeRequest(
6162
}, 2000);
6263
}
6364

65+
public function getAmazonSessionStatus(
66+
string $id,
67+
): AmazonSessionStatusResponse {
68+
try {
69+
$response = $this->makeRequest(
70+
'get',
71+
$this->baseUrl .= "/$id",
72+
null,
73+
3,
74+
);
75+
} catch (Throwable $e) {
76+
throw new RuntimeException('API request failed: '.$e->getMessage(), $e->getCode(), $e);
77+
}
78+
79+
if (! $response->successful()) {
80+
throw new RuntimeException('API request failed: '.$response->body(), $response->getStatusCode());
81+
}
82+
83+
return AmazonSessionStatusResponse::from($response->json());
84+
}
85+
6486
public function getAmazonResults(
6587
string $id,
6688
int $limit = 1,
@@ -69,7 +91,7 @@ public function getAmazonResults(
6991
try {
7092
$response = $this->makeRequest(
7193
'get',
72-
$this->baseUrl .= "$id/results?limit=$limit&offset=$offset",
94+
$this->baseUrl .= "/$id/results?limit=$limit&offset=$offset",
7395
null,
7496
3,
7597
);

src/DTOs/Amazon/AmazonResult.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@ public function __construct(
2525
public readonly array $additional_details,
2626
public readonly array $additional_information,
2727
public readonly array $additional_technical_details,
28-
public readonly string $manufacturer,
28+
public readonly ?string $manufacturer,
2929
public readonly array $best_sellers_rank,
3030
public readonly array $category,
3131
public readonly string|int|null $variations,
3232
public readonly string|int|null $past_month_sales,
33-
public readonly array $images,
34-
public readonly string $storefront,
33+
public readonly ?array $images,
34+
public readonly ?string $storefront,
3535
public readonly ?string $merchant_id,
3636
public readonly ?string $storefront_url,
37-
public readonly string $stock,
37+
public readonly ?string $stock,
3838
public readonly string $condition,
3939
public readonly string|int|float|null $price,
4040
public readonly string|int|float|null $sale_price,
@@ -52,7 +52,7 @@ public function __construct(
5252
/* @var AmazonResultOffer[] $offers */
5353
#[DataCollectionOf(AmazonResultOffer::class)]
5454
public readonly ?array $offers,
55-
#[WithCast(DateTimeInterfaceCast::class, format: ['Y-m-d H:i:s', 'Y-m-d\TH:i:s\+H:i', 'Y-m-d H:i:s.u'])]
55+
#[WithCast(DateTimeInterfaceCast::class, format: ['Y-m-d H:i:s', 'Y-m-d\TH:i:s', 'Y-m-d\TH:i:s\+H:i', 'Y-m-d H:i:s.u'])]
5656
public readonly ?Carbon $collected_at,
5757
public readonly ?string $exception,
5858
) {}

src/DTOs/Amazon/AmazonResults.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
namespace AlwaysOpen\BwtApi\DTOs\Amazon;
44

5+
use Spatie\LaravelData\Attributes\DataCollectionOf;
56
use Spatie\LaravelData\Data;
67

78
class AmazonResults extends Data
89
{
910
public function __construct(
11+
#[DataCollectionOf(AmazonResult::class)]
1012
public readonly ?array $items,
1113
public readonly ?int $limit,
1214
public readonly ?int $offset,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace AlwaysOpen\BwtApi\DTOs\Amazon;
4+
5+
use Carbon\Carbon;
6+
use Spatie\LaravelData\Attributes\WithCast;
7+
use Spatie\LaravelData\Casts\DateTimeInterfaceCast;
8+
use Spatie\LaravelData\Data;
9+
10+
class AmazonSessionStatusResponse extends Data
11+
{
12+
public function __construct(
13+
public readonly int $status,
14+
public readonly string $message,
15+
#[WithCast(DateTimeInterfaceCast::class, format: ['Y-m-d H:i:s', 'Y-m-d\TH:i:s\+H:i', 'Y-m-d H:i:s.u'])]
16+
public readonly ?Carbon $created_at,
17+
#[WithCast(DateTimeInterfaceCast::class, format: ['Y-m-d H:i:s', 'Y-m-d\TH:i:s\+H:i', 'Y-m-d H:i:s.u'])]
18+
public readonly ?Carbon $finished_at,
19+
) {}
20+
}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
<?php
22

3-
namespace AlwaysOpen\BwtApi\DTOs;
3+
namespace AlwaysOpen\BwtApi\DTOs\Amazon;
44

5+
use AlwaysOpen\BwtApi\Enums\ScrapingModes;
56
use Spatie\LaravelData\Data;
67

78
class ProductRequestItem extends Data
89
{
910
public function __construct(
1011
public readonly string $requested_asin,
1112
public readonly string $region,
12-
public readonly string $postal_code,
13-
public readonly int $scraping_mode,
13+
public readonly string $postal_code = '00000',
14+
public readonly int $scraping_mode = ScrapingModes::INVENTORY->value,
1415
public readonly ?int $max_offer_pages = null,
1516
) {}
1617
}

src/DTOs/BatchRequest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace AlwaysOpen\BwtApi\DTOs;
44

5+
use AlwaysOpen\BwtApi\DTOs\Amazon\ProductRequestItem;
56
use Spatie\LaravelData\Data;
67

78
class BatchRequest extends Data

tests/Feature/BwtApiClientTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class BwtApiClientTest extends BaseTest
1111
public function test_amazon_response()
1212
{
1313
Http::fake([
14-
'bwt.com/api/123/results?limit=1&offset=0' => Http::response($this->getFixtureJsonContent('job_results.json'), 200),
14+
'https://bwt.com/api/123/results?limit=1&offset=0' => Http::response($this->getFixtureJsonContent('job_results.json'), 200),
1515
]);
1616

1717
$client = new BwtApiClient;

0 commit comments

Comments
 (0)