Add more object types
This commit is contained in:
parent
f45ebf24f1
commit
fe38c9c3f5
@ -11,6 +11,7 @@ class ApiListTransformer
|
||||
return match ($type) {
|
||||
Category::getType() => Category::class,
|
||||
SingleArticle::getType() => SingleArticle::class,
|
||||
SingleArticleDetails::getType() => SingleArticleDetails::class,
|
||||
Order::getType() => Order::class,
|
||||
OrderLine::getType() => OrderLine::class,
|
||||
OrderArticle::getType() => OrderArticle::class,
|
||||
@ -38,6 +39,7 @@ class ApiListTransformer
|
||||
/** @var AbstractApiObject $name */
|
||||
return $name::fromApi($item);
|
||||
} else {
|
||||
return [];
|
||||
printf('Unknown object with type "%s"' . PHP_EOL, $item['type']);
|
||||
dd($item);
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ class Category extends AbstractApiObject
|
||||
/**
|
||||
* @return SingleArticle[]
|
||||
*/
|
||||
public function getItems(): array
|
||||
public function getArticles(): array
|
||||
{
|
||||
return $this->items;
|
||||
}
|
||||
|
@ -4,6 +4,8 @@
|
||||
namespace Ardent\PicnicApi\Objects;
|
||||
|
||||
|
||||
use Ardent\PicnicApi\Client;
|
||||
|
||||
class SingleArticle extends AbstractApiObject
|
||||
{
|
||||
static public function getType(): string
|
||||
@ -22,6 +24,8 @@ class SingleArticle extends AbstractApiObject
|
||||
private string $imageId,
|
||||
private int $maxCount,
|
||||
private string $unitQuantity,
|
||||
private string $unitQuantitySub,
|
||||
private array $decorators,
|
||||
)
|
||||
{
|
||||
}
|
||||
@ -31,11 +35,13 @@ class SingleArticle extends AbstractApiObject
|
||||
return new self(
|
||||
$apiObject['id'],
|
||||
$apiObject['name'],
|
||||
$apiObject['price'],
|
||||
$apiObject['price'] ?? 0,
|
||||
$apiObject['display_price'],
|
||||
$apiObject['image_id'],
|
||||
$apiObject['max_count'],
|
||||
$apiObject['unit_quantity'],
|
||||
$apiObject['unit_quantity_sub'] ?? 'n/a',
|
||||
$apiObject['decorators']
|
||||
);
|
||||
}
|
||||
|
||||
@ -58,17 +64,17 @@ class SingleArticle extends AbstractApiObject
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getPrice(): int
|
||||
public function getPrice(): float
|
||||
{
|
||||
return $this->price;
|
||||
return $this->price / 100.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getDisplayPrice(): int
|
||||
public function getDisplayPrice(): float
|
||||
{
|
||||
return $this->displayPrice;
|
||||
return $this->displayPrice / 100.0;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -79,6 +85,11 @@ class SingleArticle extends AbstractApiObject
|
||||
return $this->imageId;
|
||||
}
|
||||
|
||||
public function getImageUrl(string $size = 'medium'): string
|
||||
{
|
||||
return Client::getImageUri($this->imageId, $size);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
@ -95,4 +106,19 @@ class SingleArticle extends AbstractApiObject
|
||||
return $this->unitQuantity;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getUnitQuantitySub(): string
|
||||
{
|
||||
return $this->unitQuantitySub;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getDecorators(): array
|
||||
{
|
||||
return $this->decorators;
|
||||
}
|
||||
}
|
153
src/Objects/SingleArticleDetails.php
Normal file
153
src/Objects/SingleArticleDetails.php
Normal file
@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Ardent\PicnicApi\Objects;
|
||||
|
||||
|
||||
use Ardent\PicnicApi\Client;
|
||||
|
||||
class SingleArticleDetails extends AbstractApiObject
|
||||
{
|
||||
static public function getType(): string
|
||||
{
|
||||
return 'SINGLE_ARTICLE_DETAILS';
|
||||
}
|
||||
|
||||
public function __construct(
|
||||
private string $id,
|
||||
private string $name,
|
||||
private int $price,
|
||||
private int $displayPrice,
|
||||
private int $deposit,
|
||||
private string $imageId,
|
||||
private array $imageIds,
|
||||
private int $maxCount,
|
||||
private string $unitQuantity,
|
||||
private string $unitQuantitySub,
|
||||
private array $decorators,
|
||||
private array $nutritionalValues,
|
||||
private string $ingredientsBlob,
|
||||
private string $additionalInfo,
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
static public function fromApi(array $apiObject): self
|
||||
{
|
||||
return new self(
|
||||
$apiObject['id'],
|
||||
$apiObject['name'],
|
||||
$apiObject['price'] ?? 0,
|
||||
$apiObject['display_price'],
|
||||
$apiObject['deposit'] ?? 0,
|
||||
$apiObject['image_id'],
|
||||
$apiObject['image_ids'],
|
||||
$apiObject['max_count'],
|
||||
$apiObject['unit_quantity'],
|
||||
$apiObject['unit_quantity_sub'] ?? 'n/a',
|
||||
$apiObject['decorators'],
|
||||
$apiObject['nutritional_values'],
|
||||
$apiObject['ingredients_blob'],
|
||||
$apiObject['additional_info'],
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getId(): string
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
|
||||
public function getPrice(): float
|
||||
{
|
||||
return $this->price / 100.0;
|
||||
}
|
||||
|
||||
public function getDisplayPrice(): float
|
||||
{
|
||||
return $this->displayPrice / 100.0;
|
||||
}
|
||||
|
||||
public function getDeposit(): float
|
||||
{
|
||||
return $this->deposit / 100.0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getImageId(): string
|
||||
{
|
||||
return $this->imageId;
|
||||
}
|
||||
|
||||
public function getImageUrl(string $size = 'medium'): string
|
||||
{
|
||||
return Client::getImageUri($this->imageId, $size);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getImageIds(): array
|
||||
{
|
||||
return $this->imageIds;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $size one of tiny/small/medium/large/extra-large
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function getImageUrls(string $size = 'medium'): array
|
||||
{
|
||||
return array_map(function ($id) use ($size) {
|
||||
return Client::getImageUri($id, $size);
|
||||
}, $this->imageIds);
|
||||
}
|
||||
|
||||
public function getMaxCount(): int
|
||||
{
|
||||
return $this->maxCount;
|
||||
}
|
||||
|
||||
public function getUnitQuantity(): string
|
||||
{
|
||||
return $this->unitQuantity;
|
||||
}
|
||||
|
||||
public function getUnitQuantitySub(): string
|
||||
{
|
||||
return $this->unitQuantitySub;
|
||||
}
|
||||
|
||||
public function getDecorators(): array
|
||||
{
|
||||
return $this->decorators;
|
||||
}
|
||||
|
||||
public function getNutritionalValues(): array
|
||||
{
|
||||
return $this->nutritionalValues;
|
||||
}
|
||||
|
||||
public function getIngredientsBlob(): string
|
||||
{
|
||||
return $this->ingredientsBlob;
|
||||
}
|
||||
|
||||
public function getAdditionalInfo(): string
|
||||
{
|
||||
return $this->additionalInfo;
|
||||
}
|
||||
}
|
@ -8,6 +8,8 @@ use Ardent\PicnicApi\Objects\ApiListTransformer;
|
||||
use Ardent\PicnicApi\Objects\Category;
|
||||
use Ardent\PicnicApi\Objects\Delivery;
|
||||
use Ardent\PicnicApi\Objects\Order;
|
||||
use Ardent\PicnicApi\Objects\SingleArticle;
|
||||
use Ardent\PicnicApi\Objects\SingleArticleDetails;
|
||||
|
||||
class PicnicClient
|
||||
{
|
||||
@ -28,6 +30,11 @@ class PicnicClient
|
||||
return ApiListTransformer::getObject($this->client->get('cart'));
|
||||
}
|
||||
|
||||
public function getProduct(string $productId): SingleArticleDetails
|
||||
{
|
||||
return ApiListTransformer::getObject($this->client->get(sprintf('product/%s', $productId))['product_details']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all past and current deliveries of the user.
|
||||
*
|
||||
|
Loading…
Reference in New Issue
Block a user