Sylius/UPGRADE-API-2.0.md

170 lines
6.8 KiB
Markdown

# UPGRADE FROM `1.13` TO `2.0`
* API Platform has dropped `DataProviders` and `DataPersisters` in favor of `Providers` and `Processors`, respectively.
Due to this change, Sylius custom `DataProviders` and `DataPersisters` have been adapted to the new API Platform interfaces
and their namespaced have been changed to `StateProvider` and `StateProcessor` respectively:
- `Sylius\Bundle\ApiBundle\DataPersister\*DataPersister` => `Sylius\Bundle\ApiBundle\StateProcessor\*Processor`
- `Sylius\Bundle\ApiBundle\DataProvider\*DataProvider` => `Sylius\Bundle\ApiBundle\StateProvider\*Provider`
* API Platform has also dropped `DataTransformers` in favor of which `some of them` have been refactored into `SerializerContextBuilders` as follows:
- `Sylius\Bundle\ApiBundle\DataTransformer\ChannelCodeAwareInputCommandDataTransformer` => `Sylius\Bundle\ApiBundle\SerializerContextBuilder\ChannelCodeAwareContextBuilder`
- `Sylius\Bundle\ApiBundle\DataTransformer\LocaleCodeAwareInputCommandDataTransformer` => `Sylius\Bundle\ApiBundle\SerializerContextBuilder\LocaleCodeAwareContextBuilder`
- `Sylius\Bundle\ApiBundle\DataTransformer\LoggedInCustomerEmailIfNotSetAwareCommandDataTransformer` => `Sylius\Bundle\ApiBundle\SerializerContextBuilder\LoggedInCustomerEmailIfNotSetAwareContextBuilder`
- `Sylius\Bundle\ApiBundle\DataTransformer\LoggedInShopUserIdAwareCommandDataTransformer` => `Sylius\Bundle\ApiBundle\SerializerContextBuilder\ChannelCodeAwareContextBuilder`
* The constructor of `Sylius\Bundle\ApiBundle\Command\Account\RegisterShopUser` has been changed:
```php
public function __construct(
- public string $firstName,
- public string $lastName,
- public string $email,
- public string $password,
- public bool $subscribedToNewsletter = false,
+ protected string $firstName,
+ protected string $lastName,
+ protected string $email,
+ protected string $password,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
+ protected bool $subscribedToNewsletter = false,
) {
}
```
* The constructor of `Sylius\Bundle\ApiBundle\Command\Account\RequestResetPasswordToken` has been changed:
```php
public function __construct(
- public string $email,
+ protected string $email,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
) {
}
```
* The constructor of `Sylius\Bundle\ApiBundle\Command\SendContactRequest` has been changed:
```php
public function __construct(
- private ?string $email = null,
- private ?string $message = null,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
+ protected ?string $email = null,
+ protected ?string $message = null,
) {
}
```
* The constructor of `Sylius\Bundle\ApiBundle\Command\Account\VerifyShopUser` has been changed:
```php
public function __construct(
- public string $token,
- private ?string $localeCode = null,
- private ?string $channelCode = null,
+ protected string $token,
+ protected string $channelCode,
+ protected string $localeCode,
) {
}
```
* The constructor of `Sylius\Bundle\ApiBundle\Command\Account\ChangeShopUserPassword` has been changed:
```php
public function __construct(
- public ?string $newPassword,
- public ?string $confirmNewPassword,
- public ?string $currentPassword,
+ protected mixed $shopUserId,
+ protected string $newPassword,
+ protected string $confirmNewPassword,
+ protected string $currentPassword,
) {
}
```
* The constructor of `Sylius\Bundle\ApiBundle\Command\Account\RequestShopUserVerification` has been created:
```php
public function __construct(
+ protected string|int|null $shopUserId,
+ protected ?string $channelCode,
+ protected ?string $localeCode,
) {
}
```
All the `setter` methods have been removed from the commands above and also there are some new `getter` methods accordingly to arguments visibility changes.
* The parameter type and order of the `Sylius\Bundle\ApiBundle\Controller\UploadAvatarImageAction::__construct` has been changed:
```php
public function __construct(
private FactoryInterface $avatarImageFactory,
private AvatarImageRepositoryInterface $avatarImageRepository,
- private ImageUploaderInterface $imageUploader,
- private IriConverterInterface $iriConverter,
+ private RepositoryInterface $adminUserRepository,
+ private ImageUploaderInterface $imageUploader,
)
```
* Updated API routes related to avatar management:
Previous Routes:
* `'GET' - /api/v2/admin/avatar-images/{id}`
* `'POST' - /api/v2/admin/avatar-images`
* `'DELETE' - /api/v2/admin/avatar-images/{id}`
New Routes:
* `'GET' - /api/v2/admin/administrators/{id}/avatar-image`
* `'POST' - /api/v2/admin/administrators/{id}/avatar-image`
* `'DELETE' - /api/v2/admin/administrators/{id}/avatar-image`
* Updated API routes related to shop user management:
Previous Routes:
* `'POST' - /api/v2/shop/reset-password-requests`
* `'PATCH' - /api/v2/shop/reset-password-requests/{resetPasswordToken}`
* `'POST' - /api/v2/shop/account-verification-requests`
* `'PATCH - /api/v2/shop/account-verification-requests/{token}`
New Routes:
* `'POST' - /api/v2/shop/reset-password`
* `'PATCH' - /api/v2/shop/reset-password/{resetPasswordToken}`
* `'POST' - /api/v2/shop/verify-shop-user`
* `'PATCH' - /api/v2/shop/verify-shop-user/{token}`
* Updated API routes related to admin user management:
Previous Routes:
* `'POST' - /api/v2/admin/reset-password-requests`
* `'PATCH' - /api/v2/admin/reset-password-requests/{resetPasswordToken}`
New Routes:
* `'POST' - /api/v2/admin/reset-password`
* `'PATCH' - /api/v2/admin/reset-password/{resetPasswordToken}`
* The `getCurrentPrefix` method has been removed from the `Sylius\Bundle\ApiBundle\Provider\PathPrefixProviderInterface`.
* The `Sylius\Bundle\ApiBundle\Provider\PathPrefixProvider` constructor has been changed due to refactor.
Now, we provide the list of possible prefixes that we check in this service. This list can be set under
the parameter: `sylius.api_path_prefixes`.
```diff
public function __construct(
- private UserContextInterface $userContext,
private string $apiRoute,
+ private array $pathPrefixes,
) {
...
}
```
1. There has been introduced a new parameter:
```yaml
sylius_api:
non_archived_classes:
- "%sylius.model.shipping_method.class%"
- "%sylius.model.promotion.class%"
```
That avoids duplication of logic and is used in one `Sylius\Bundle\ApiBundle\Doctrine\ORM\QueryExtension\Common\NonArchivedExtension` rather than dedicated extensions for each entity.