Add more object types
This commit is contained in:
		| @@ -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,9 +4,11 @@ | ||||
| namespace Ardent\PicnicApi\Objects; | ||||
|  | ||||
|  | ||||
| use Ardent\PicnicApi\Client; | ||||
|  | ||||
| class SingleArticle extends AbstractApiObject | ||||
| { | ||||
|     static public  function getType(): string | ||||
|     static public function getType(): string | ||||
|     { | ||||
|         return 'SINGLE_ARTICLE'; | ||||
|     } | ||||
| @@ -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. | ||||
|      * | ||||
|   | ||||
		Reference in New Issue
	
	Block a user