Skip to content

Commit

Permalink
Рефакторинг заказов: бросаем исключения при чтении и редактировании
Browse files Browse the repository at this point in the history
  • Loading branch information
jhaoda committed May 13, 2020
1 parent 5f23dd1 commit ced4290
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 40 deletions.
24 changes: 24 additions & 0 deletions src/Dispatching/Endpoints/Orders/Exceptions/NotFound.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

/**
* This file is part of RussianPost SDK package.
*
* © Appwilio (http://appwilio.com), greabock (https://github.com/greabock), JhaoDa (https://github.com/jhaoda)
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Appwilio\RussianPostSDK\Dispatching\Endpoints\Orders\Exceptions;

use Appwilio\RussianPostSDK\Dispatching\Contracts\DispatchingException;

final class NotFound extends \InvalidArgumentException implements DispatchingException
{
public function __construct(string $id)
{
parent::__construct("Заказ #{$id} не найден.");
}
}
92 changes: 52 additions & 40 deletions src/Dispatching/Endpoints/Orders/Orders.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@

namespace Appwilio\RussianPostSDK\Dispatching\Endpoints\Orders;

use Appwilio\RussianPostSDK\Core\Arrayable;
use Appwilio\RussianPostSDK\Core\ArrayOf;
use Appwilio\RussianPostSDK\Dispatching\Http\ApiClient;
use Appwilio\RussianPostSDK\Dispatching\Exceptions\BadRequest;
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Orders\Entites\Order;
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Orders\Exceptions\NotFound;
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Orders\Requests\OrderRequest;
use Appwilio\RussianPostSDK\Dispatching\Endpoints\Orders\Exceptions\OrderException;

Expand All @@ -23,7 +25,7 @@ public function __construct(ApiClient $client)
/**
* Создание заказа.
*
* @link https://otpravka.pochta.ru/specification#/orders-creating_order
* @see https://otpravka.pochta.ru/specification#/orders-creating_order
*
* @param OrderRequest $request
*
Expand All @@ -46,53 +48,63 @@ public function create(OrderRequest $request): string
return $response;
}

public function getByPostalId(string $id): Order
{
return $this->client->get("/1.0/backlog/{$id}", null, Order::class);
}

public function findByShopId(string $id)
/**
* Получение заказа по внутрипочтовому идентификатору.
*
* @see https://otpravka.pochta.ru/specification#/orders-search_order_byid
*
* @param string $id внутрипочтовый идентификатор
*
* @throws NotFound
*
* @return Order
*/
public function getById(string $id)
{
return $this->client->get('backlog/search', new class($id) implements Arrayable {
private $query;

public function __construct(string $query)
{
$this->query = $query;
}

public function toArray(): array
{
return ['query' => $this->query];
}
}, Order::class);
try {
return $this->client->get("/1.0/backlog/{$id}", null, Order::class);
} catch (BadRequest $e) {
throw new NotFound($id);
}
}

public function findByTrackingNumber(string $number)
/**
* Поиск заказов по идентификатору в системе отправителя.
*
* @see https://otpravka.pochta.ru/specification#/orders-search_order
*
* @param string $number идентификатор в системе отправителя
*
* @return iterable|Order[]|null
*/
public function findByShopNumber(string $number): ?iterable
{
return $this->client->get('/1.0/shipment/search', new class($number) implements Arrayable {
private $query;

public function __construct(string $query)
{
$this->query = $query;
}
$response = $this->client->get(
'/1.0/backlog/search?'.\http_build_query(['query' => $number]), null, new ArrayOf(Order::class)
);

public function toArray(): array
{
return ['query' => $this->query];
}
}, Order::class);
}

public function read(string $id)
{
return $this->client->get("/1.0/user/backlog/{$id}");
return empty($response) ? null : $response;
}

/**
* Редактирование заказа.
*
* @see https://otpravka.pochta.ru/specification#/orders-editing_order
*
* @param string $id внутрипочтовый идентификатор
* @param OrderRequest $request
*
* @throws NotFound
*
* @return Order
*/
public function update(string $id, OrderRequest $request)
{
return $this->client->put("/1.0/user/backlog/{$id}", $request);
try {
return $this->client->put("/1.0/backlog/{$id}", $request);
} catch (BadRequest $e) {
throw new NotFound($id);
}
}

public function delete(array $ids)
Expand Down

0 comments on commit ced4290

Please sign in to comment.