1
0
mirror of synced 2024-11-21 21:06:07 +03:00

Add product batch edit request (#127)

This commit is contained in:
Сергей Чазов 2021-11-22 17:06:00 +03:00 committed by GitHub
parent 649b60b392
commit f0a1adfb3d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 401 additions and 0 deletions

View File

@ -0,0 +1,23 @@
<?php
/**
* Class ProductEditGroupInput
*
* @category ProductEditGroupInput
* @package RetailCrm\Api\Model\Response\Store
*/
namespace RetailCrm\Api\Model\Entity\Store;
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
use RetailCrm\Api\Model\Entity\FixExternalRow;
/**
* Class ProductEditGroupInput
*
* @category ProductEditGroupInput
* @package RetailCrm\Api\Model\Response\Store
*/
class ProductEditGroupInput extends FixExternalRow
{
}

View File

@ -0,0 +1,149 @@
<?php
/**
* PHP version 7.3
*
* @category ProductEditInput
* @package RetailCrm\Api\Model\Request\Store
*/
namespace RetailCrm\Api\Model\Entity\Store;
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
/**
* Class ProductEditInput
*
* @category ProductEditInput
* @package RetailCrm\Api\Model\Response\Store
*/
class ProductEditInput
{
/**
* @var int
*
* @JMS\Type("int")
* @JMS\SerializedName("id")
*/
public $id;
/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("article")
*/
public $article;
/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("name")
*/
public $name;
/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("url")
*/
public $url;
/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("description")
*/
public $description;
/**
* @var bool
*
* @JMS\Type("bool")
* @JMS\SerializedName("popular")
*/
public $popular;
/**
* @var bool
*
* @JMS\Type("bool")
* @JMS\SerializedName("stock")
*/
public $stock;
/**
* @var bool
*
* @JMS\Type("bool")
* @JMS\SerializedName("novelty")
*/
public $novelty;
/**
* @var bool
*
* @JMS\Type("bool")
* @JMS\SerializedName("recommended")
*/
public $recommended;
/**
* @var \RetailCrm\Api\Model\Entity\Store\ProductEditGroupInput[]
*
* @JMS\Type("array<RetailCrm\Api\Model\Entity\Store\ProductEditGroupInput>")
* @JMS\SerializedName("groups")
*/
public $groups;
/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("externalId")
*/
public $externalId;
/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("manufacturer")
*/
public $manufacturer;
/**
* @var bool
*
* @JMS\Type("bool")
* @JMS\SerializedName("active")
*/
public $active;
/**
* @var bool
*
* @JMS\Type("bool")
* @JMS\SerializedName("markable")
*/
public $markable;
/**
* @var string
*
* @JMS\Type("string")
* @JMS\SerializedName("site")
*/
public $site;
/**
* @var int
*
* @JMS\Type("int")
* @JMS\SerializedName("catalogId")
*/
public $catalogId;
}

View File

@ -0,0 +1,23 @@
<?php
/**
* PHP version 7.3
*
* @category ProductEditNotFoundResponse
* @package RetailCrm\Api\Model\Request\Store
*/
namespace RetailCrm\Api\Model\Entity\Store;
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
use RetailCrm\Api\Model\Entity\FixExternalRow;
/**
* Class ProductEditNotFoundResponse
*
* @category ProductEditNotFoundResponse
* @package RetailCrm\Api\Model\Entity\Store
*/
class ProductEditNotFoundResponse extends FixExternalRow
{
}

View File

@ -0,0 +1,43 @@
<?php
/**
* PHP version 7.3
*
* @category ProductBatchEditRequest
* @package RetailCrm\Api\Model\Request\Store
*/
namespace RetailCrm\Api\Model\Request\Store;
use RetailCrm\Api\Component\FormData\Mapping as Form;
use RetailCrm\Api\Interfaces\RequestInterface;
/**
* Class ProductBatchEditRequest
*
* @category ProductBatchEditRequest
* @package RetailCrm\Api\Model\Response\Store
*/
class ProductBatchEditRequest implements RequestInterface
{
/**
* @var \RetailCrm\Api\Model\Entity\Store\ProductEditInput[]
*
* @Form\Type("RetailCrm\Api\Model\Entity\Store\ProductEditInput[]")
* @Form\SerializedName("products")
* @Form\JsonField()
*/
public $products;
/**
* ProductBatchEditRequest constructor.
*
* @param \RetailCrm\Api\Model\Entity\Store\ProductEditInput[] $products
*/
public function __construct(array $products = [])
{
if (count($products) > 0) {
$this->products = $products;
}
}
}

View File

@ -0,0 +1,39 @@
<?php
/**
* PHP version 7.3
*
* @category ProductBatchEditResponse
* @package RetailCrm\Api\Model\Request\Store
*/
namespace RetailCrm\Api\Model\Response\Store;
use RetailCrm\Api\Model\Response\SuccessResponse;
use RetailCrm\Api\Component\Serializer\Annotation as JMS;
/**
* Class ProductBatchEditResponse
*
* @category ProductBatchEditResponse
* @package RetailCrm\Api\Model\Response\Store
* @SuppressWarnings(PHPMD.LongVariable)
*/
class ProductBatchEditResponse extends SuccessResponse
{
/**
* @var int
*
* @JMS\Type("int")
* @JMS\SerializedName("processedProductsCount")
*/
public $processedProductsCount;
/**
* @var \RetailCrm\Api\Model\Entity\Store\ProductEditNotFoundResponse[]
*
* @JMS\Type("array<RetailCrm\Api\Model\Entity\Store\ProductEditNotFoundResponse>")
* @JMS\SerializedName("notFoundProducts")
*/
public $notFoundProducts;
}

View File

@ -13,12 +13,14 @@ use RetailCrm\Api\Enum\RequestMethod;
use RetailCrm\Api\Model\Request\Store\InventoriesRequest;
use RetailCrm\Api\Model\Request\Store\InventoriesUploadRequest;
use RetailCrm\Api\Model\Request\Store\PricesUploadRequest;
use RetailCrm\Api\Model\Request\Store\ProductBatchEditRequest;
use RetailCrm\Api\Model\Request\Store\ProductGroupsRequest;
use RetailCrm\Api\Model\Request\Store\ProductPropertiesRequest;
use RetailCrm\Api\Model\Request\Store\ProductsRequest;
use RetailCrm\Api\Model\Response\Store\InventoriesResponse;
use RetailCrm\Api\Model\Response\Store\InventoriesUploadResponse;
use RetailCrm\Api\Model\Response\Store\PricesUploadResponse;
use RetailCrm\Api\Model\Response\Store\ProductBatchEditResponse;
use RetailCrm\Api\Model\Response\Store\ProductGroupsResponse;
use RetailCrm\Api\Model\Response\Store\ProductPropertiesResponse;
use RetailCrm\Api\Model\Response\Store\ProductsResponse;
@ -413,4 +415,81 @@ class Store extends AbstractApiResourceGroup
);
return $response;
}
/**
* Makes GET "/api/v5/store/store/products/batch/edit" request.
*
* Example:
* ```php
* use RetailCrm\Api\Model\Entity\Store\ProductEditGroupInput;
* use RetailCrm\Api\Model\Entity\Store\ProductEditInput;
* use RetailCrm\Api\Model\Request\Store\ProductBatchEditRequest;
* use RetailCrm\Api\Factory\SimpleClientFactory;
* use RetailCrm\Api\Interfaces\ApiExceptionInterface;
*
* $client = SimpleClientFactory::createClient('https://test.retailcrm.pro', 'apiKey');
*
* $productInput = new ProductEditInput();
* $productInput->name = 'testName';
* $productInput->description = 'testDescription';
* $productInput->active = true;
* $productInput->id = 10;
* $productInput->url = 'testUrl';
* $productInput->article = 'testArticle';
* $productInput->catalogId = 10;
* $productInput->externalId = 'testExternalId';
* $productInput->manufacturer = 'testManufacturer';
* $productInput->markable = true;
* $productInput->novelty = true;
* $productInput->popular = true;
* $productInput->recommended = true;
* $productInput->site = 'testSite';
* $productInput->stock = true;
* $productEditGroupInput = new ProductEditGroupInput();
* $productEditGroupInput->externalId = 'testExternalId';
* $productEditGroupInput->id = 10;
* $productInput->groups[] = $productEditGroupInput;
*
* try {
* $response = $client->store->productBatchEdit(new ProductBatchEditRequest([$productInput]));
* } catch (ApiExceptionInterface $exception) {
* echo sprintf(
* 'Error from RetailCRM API (status code: %d): %s',
* $exception->getStatusCode(),
* $exception->getMessage()
* );
* if (count($exception->getErrorResponse()->errors) > 0) {
* echo PHP_EOL . 'Errors: ' . implode(', ', $exception->getErrorResponse()->errors);
* }
* return;
* }
*
* echo 'Processed product count: ' . $response->processedProductsCount;
* ```
*
* @param \RetailCrm\Api\Model\Request\Store\ProductBatchEditRequest $request
*
* @return \RetailCrm\Api\Model\Response\Store\ProductBatchEditResponse
* @throws \RetailCrm\Api\Exception\Api\AccountDoesNotExistException
* @throws \RetailCrm\Api\Exception\Api\ApiErrorException
* @throws \RetailCrm\Api\Exception\Api\MissingCredentialsException
* @throws \RetailCrm\Api\Exception\Api\MissingParameterException
* @throws \RetailCrm\Api\Exception\Api\ValidationException
* @throws \RetailCrm\Api\Exception\Client\HandlerException
* @throws \RetailCrm\Api\Exception\Client\HttpClientException
* @throws \RetailCrm\Api\Interfaces\ApiExceptionInterface
* @throws \RetailCrm\Api\Interfaces\ClientExceptionInterface
*/
public function productBatchEdit(ProductBatchEditRequest $request): ProductBatchEditResponse
{
/** @var ProductBatchEditResponse $response */
$response = $this->sendRequest(
RequestMethod::POST,
'store/products/batch/edit',
$request,
ProductBatchEditResponse::class
);
return $response;
}
}

View File

@ -16,6 +16,8 @@ use RetailCrm\Api\Model\Entity\Store\Inventory;
use RetailCrm\Api\Model\Entity\Store\Offer;
use RetailCrm\Api\Model\Entity\Store\PriceUploadInput;
use RetailCrm\Api\Model\Entity\Store\PriceUploadPricesInput;
use RetailCrm\Api\Model\Entity\Store\ProductEditGroupInput;
use RetailCrm\Api\Model\Entity\Store\ProductEditInput;
use RetailCrm\Api\Model\Filter\Store\InventoryFilterType;
use RetailCrm\Api\Model\Filter\Store\ProductFilterType;
use RetailCrm\Api\Model\Filter\Store\ProductGroupFilterType;
@ -23,6 +25,7 @@ use RetailCrm\Api\Model\Filter\Store\ProductPropertiesFilterType;
use RetailCrm\Api\Model\Request\Store\InventoriesRequest;
use RetailCrm\Api\Model\Request\Store\InventoriesUploadRequest;
use RetailCrm\Api\Model\Request\Store\PricesUploadRequest;
use RetailCrm\Api\Model\Request\Store\ProductBatchEditRequest;
use RetailCrm\Api\Model\Request\Store\ProductGroupsRequest;
use RetailCrm\Api\Model\Request\Store\ProductPropertiesRequest;
use RetailCrm\Api\Model\Request\Store\ProductsRequest;
@ -622,4 +625,46 @@ EOF;
self::assertModelEqualsToResponse($json, $response);
}
public function testProductBatchEdit(): void
{
$json = <<<'EOF'
{
"success": true
}
EOF;
$productInput = new ProductEditInput();
$productInput->name = 'testName';
$productInput->description = 'testDescription';
$productInput->active = true;
$productInput->id = 10;
$productInput->url = 'testUrl';
$productInput->article = 'testArticle';
$productInput->catalogId = 10;
$productInput->externalId = 'testExternalId';
$productInput->manufacturer = 'testManufacturer';
$productInput->markable = true;
$productInput->novelty = true;
$productInput->popular = true;
$productInput->recommended = true;
$productInput->site = 'testSite';
$productInput->stock = true;
$productEditGroupInput = new ProductEditGroupInput();
$productEditGroupInput->externalId = 'testExternalId';
$productEditGroupInput->id = 10;
$productInput->groups[] = $productEditGroupInput;
$request = new ProductBatchEditRequest([$productInput]);
$mock = static::createApiMockBuilder('store/products/batch/edit');
$mock->matchMethod(RequestMethod::POST)
->matchBody(self::encodeForm($request))
->reply(200)
->withBody($json);
$client = TestClientFactory::createClient($mock->getClient());
$response = $client->store->productBatchEdit($request);
self::assertModelEqualsToResponse($json, $response);
}
}