Skip to content

Commit

Permalink
Record Format (#23)
Browse files Browse the repository at this point in the history
* Объектный подход Record к работе с сущностями Моего Склада.
* Метод massCreateUpdate().
* Метод fromUrl($url, $withParams).
* Методы получения объектов HTTP запроса и ответа в RequestException.
  • Loading branch information
evgeek authored Jun 4, 2023
1 parent 0ecaa8e commit 69d2233
Show file tree
Hide file tree
Showing 257 changed files with 8,900 additions and 2,614 deletions.
54 changes: 53 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,62 @@
# Changelog

Все заметные изменения в проекте будут задокументированы в этом файле. Формат основан на [Keep a Changelog](https://keepachangelog.com/ru), и этот проект придерживается семантического версионирования ([semver](https://semver.org/lang/ru/)).
Все существенные изменения в проекте будут задокументированы в этом файле. Формат основан на [Keep a Changelog](https://keepachangelog.com/), и этот проект придерживается семантического версионирования ([semver](https://semver.org/)).

## v0.8.0 [[Upgrade guide](/UPGRADE.md#v080-changelog)]

### Added

- Реализована работа с API через [Active Record объекты](/docs/active_record.md).

```php
use Evgeek\Moysklad\Api\Record\Objects\Entities\Product;
use Evgeek\Moysklad\MoySklad;

$ms = new MoySklad(['token'])
$product = Product::make($ms, ['name' => 'orange'])->create();
$product->code = '1234567';
$product->update();
```

- В конструктор запросов добавлен метод `massCreateUpdate()`, позволяющий создавать и/или обновлять по нескольку объектов за раз.

- В конструктор запросов добавлен метод `fromUrl($url, $withParams)`, позволяющий строить запросы из уже имеющегося url:

```php
$orderUrl = 'https://online.moysklad.ru/api/remap/1.2/entity/customerorder/3aba2611-c64f-11ed-0a80-108a00230a9c';
$orderPositions = $ms
->query()
->fromUrl($orderUrl)
->positions()
->get();
```

- В ошибку запроса `Evgeek\Moysklad\Exceptions\RequestException` добавлены методы:
- `getRequest()` - возвращает PSR-7 объект HTTP запроса, если он существует.
- `getResponse()` - возвращает PSR-7 объект HTTP ответа, если он существует.
- `getContent()` - Возвращает содержимое HTTP ответа, отформатированное текущим форматтером, или `null` в случае отсутствия содержимого.

### Changed

- Переписана документация.
- Реорганизация namespace `Evgeek\Moysklad\Api`.
- Методы `Evgeek\Moysklad\Formatters\JsonFormatterInterface` теперь динамические.
- Аргументы в методе `Meta::state()` приведены к общей логике.
- Максимальное количество символов ответа от API по умолчанию в `Evgeek\Moysklad\Http\GuzzleSenderFactory` увеличено до 4000.

### Removed

- Удалён устаревший метод `filters()`. Его функциональность теперь целиком возложена на `filter()`.

### Deprecated

- Явная установка форматирования в хелпере `Meta`.
- `Meta::entity()`. Вместо этого метода используйте `Meta::create()`.

## v0.7.0 [[Upgrade guide](/UPGRADE.md#v070-changelog)]

### Added

- В методы для формирования query-параметров запроса, подразумеющих возможность передачи нескольких значений (`filter()`, `order()`, `expand()` и `params()`) можно передавать несколько наборов значений за раз при помощи массива массивов. Примеры есть в [README](/##параметры-запроса) и PHPDoc методов.
- Полное покрытие проекта unit тестами.

Expand Down
254 changes: 45 additions & 209 deletions README.md

Large diffs are not rendered by default.

71 changes: 71 additions & 0 deletions UPGRADE.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,76 @@
# Upgrade guide

## v0.8.0 [[Changelog](/CHANGELOG.md#v080-upgrade-guide)]

### Реорганизация namespace `Evgeek\Moysklad\Api`.

Данный namespace используется fluent-цепочкой билдера запросов (`$ms->query()->...`), поэтому изменения в нём не влияют на работу библиотеки. Однако, если ваш проект явно использует этот namespace, проверьте следующее:

До:

- `Evgeek\Moysklad\Api\Query`
- `Evgeek\Moysklad\Api\Segments\Special\MassDelete`
- `Evgeek\Moysklad\Api\Segments\...`
- `Evgeek\Moysklad\Api\Traits\Segments\...`

После:

- `Evgeek\Moysklad\Api\Query\QueryBuilder`
- `Evgeek\Moysklad\Api\Query\Segments\Special\MassDelete`
- `Evgeek\Moysklad\Api\Query\Segments\...`
- `Evgeek\Moysklad\Api\Query\Traits\Segments\...`

### Аргументы в методе `Meta::state()` приведены к общей логике.

До:

```php
Meta::state('25cf41f2-b068-11ed-0a80-0e9700500d7e', 'counterparty');
```

После:

```php
Meta::state('counterparty', '25cf41f2-b068-11ed-0a80-0e9700500d7e');
```

### Deprecated установки форматирования в хелпере `Meta`

До:

```php
Meta::setFormat(new ArrayFormat());
Meta::product('25cf41f2-b068-11ed-0a80-0e9700500d7e');
```

После:

```php
//Создание меты через основной объект MoySklad применит форматирование, заданное в MoySklad
$ms->meta()->product('25cf41f2-b068-11ed-0a80-0e9700500d7e');

//Альтернатива - явная передача форматтера в хелпер (по умолчанию - StdClassFormat)
Meta::product('25cf41f2-b068-11ed-0a80-0e9700500d7e', new ArrayFormat())
```

### Методы `Evgeek\Moysklad\Formatters\JsonFormatterInterface` теперь динамические.

Не требуется ничего менять, если вы не работали с форматтерами напрямую.

До:

```php
ArrayFormat::encode($entity);
StdClassFormat::decode($entity);
```

После:

```php
(new ArrayFormat())->encode($entity);
(new StdClassFormat())->decode($entity);
```

## v0.7.0 [[Changelog](/CHANGELOG.md#v070-upgrade-guide)]

### Приведение метода `expand()` к общей логике.
Expand Down
6 changes: 3 additions & 3 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
"guzzlehttp/guzzle": "^7.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.13",
"phpstan/phpstan": "^1.9",
"phpunit/phpunit": "^9.5"
"phpstan/phpstan": "^1.10",
"friendsofphp/php-cs-fixer": "^3.15",
"phpunit/phpunit": "^10.0"
},
"autoload": {
"psr-4": {
Expand Down
Loading

0 comments on commit 69d2233

Please sign in to comment.