Skip to content

Update storefront

Summary

Currently, storefront is compatible to both major versions of the Platform (v2, v3). This document describes how to upgrade Storefront AutoRest-generated clients (for platform and modules) to the latest v3 interfaces. This action allow you to modernize storefront but break compatibility with v2. An example of upgraded storefront (made during creation of this document) resides there: Upgraded storefront branch.

Contents

Preconditions


Upgrading AutoRest-generated clients


Platform

Run Autorest for $modules = @('Platform','Notifications'). Wait while Autorest finishes. 'Notifications' passed because in v3 notifications module was extracted from platform to separate module.

Try to compile solution. Look at the errors. Resolve errors and update code with recommendations below.

file: \Domain\Common\NotificationConverter.cs

Error Recommendation
'TestNotificationRequest' could not be found Notifications were extracted to a separate module, therefore:
  • add
    using VirtoCommerce.Storefront.AutoRestClients.NotificationsModuleApi.Models;
  • remove
    using VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models;
  • rewrite TestNotificationRequest to NotificationRequest (typename was changed).

file: \Controllers\AccountController.cs

Error Recommendation
The type or namespace name 'INotifications' could not be found
  • add
    using VirtoCommerce.Storefront.AutoRestClients.NotificationsModuleApi;
  • remove
    using VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi;
The type or namespace name 'SendNotificationResult' could not be found SendNotificationResult was renamed to NotificationSendResult:
  • add
    using VirtoCommerce.Storefront.AutoRestClients.NotificationsModuleApi.Models;
  • change names SendNotificationResult to NotificationSendResult
Errors with parameter type in call _platformNotificationApi.SendNotificationAsync Change this call to a backward compatible method _platformNotificationApi.SendNotificationByRequestAsync.
'IdentityResult' is an ambiguous reference between 'VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models.IdentityResult' and 'Microsoft.AspNetCore.Identity.IdentityResult' Remove: using VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models;

file: \Controllers\Api\ApiAccountController.cs

Error Recommendation
A lot of errors like:
'IdentityResult' is an ambiguous reference between 'VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models.IdentityResult' and 'Microsoft.AspNetCore.Identity.IdentityResult'
Remove:
  • using VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi;
  • using VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models;
The type or namespace name 'INotifications' could not be found Add using VirtoCommerce.Storefront.AutoRestClients.NotificationsModuleApi;
Errors with parameter type in call _platformNotificationApi.SendNotificationAsync Change this call to a backward compatible method _platformNotificationApi.SendNotificationByRequestAsync.
The type or namespace name 'ChangePasswordInfo' could not be found It was renamed to ChangePasswordRequest, replace ChangePasswordInfo with AutoRestClients.PlatformModuleApi.Models.ChangePasswordRequest

file: \Domain\Common\SettingConverter.cs

Error Recommendation
The type or namespace name 'Setting' does not exist... It was renamed to ObjectSettingEntry:
  • remove
    using platformDto = VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models;
  • add
    using platformDto = VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models;
  • change type name Setting to ObjectSettingEntry.
  • Check ObjectSettingEntry's members for nulls before converting to string.
Issues inside ToSettingEntry
  • There is no Description and Title anymore. Not used, just remove assignments;
  • Convert DefaultValue and Value to string;
  • Set IsArray to false. It's not used;
  • Remove ArrayValues assignment. It's not used;
  • Convert each item of AllowedValues to string.

As a result the method should look like:
    public static SettingEntry ToSettingEntry(this platformDto.ObjectSettingEntry settingDto)
    {
        var retVal = new SettingEntry();
        retVal.DefaultValue = settingDto.DefaultValue.ToString();
        retVal.IsArray = false;
        retVal.Name = settingDto.Name;
        retVal.Value = settingDto.Value.ToString();
        retVal.ValueType = settingDto.ValueType;
        if (settingDto.AllowedValues != null)
        {
            retVal.AllowedValues = settingDto.AllowedValues.Cast<string>().ToList();
        }
        return retVal;
    }

file: \Domain\Security\SecurityConverter.cs

Error Recommendation
The type or namespace name 'SecurityResult' does not exist... Rewrite dto.SecurityResult as dto.IdentityResult, it was renamed.
The type or namespace name 'ApplicationUserExtended' does not exist Rewrite dto.ApplicationUserExtended as dto.ApplicationUser, it was renamed.
Cannot implicitly convert type 'VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models.IdentityError' to 'string' IdentityResult now contains errors as IdentityError. Use member Description (Rewrite Description = x as Description = x.Description).

file: \Domain\Security\UserStoreStub.cs

Error Recommendation
The type or namespace name 'ApplicationUserExtended' does not exist Rewrite ApplicationUserExtended as ApplicationUser, it was renamed.
'ISecurity' does not contain a definition for 'CreateAsyncAsync'... CreateAsyncAsync was renamed to CreateAsync
'ISecurity' does not contain a definition for 'DeleteAsyncAsync'... DeleteAsyncAsync was renamed to DeleteAsync
'ISecurity' does not contain a definition for 'UpdateAsyncAsync'... UpdateAsyncAsync was renamed to UpdateAsync

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommercePlatformRESTAPIdocumentation' could not be found... Rewrite VirtoCommercePlatformRESTAPIdocumentation as PlatformModuleClient
The type or namespace name 'INotifications' could not be found... add using VirtoCommerce.Storefront.AutoRestClients.NotificationsModuleApi;

Warning! Don't forget to register in DI AutoRestClient for newcoming Notifications module! Be sure to have in AddPlatformEndpoint following lines:

    services.AddAutoRestClient((credentials, httpClient, disposeHttpClient, baseUri) => new NotificationsModuleClient(credentials, httpClient, disposeHttpClient) { BaseUri = baseUri });
    services.AddSingleton<INotifications>(sp => new Notifications(sp.GetRequiredService<NotificationsModuleClient>()));

file: \Domain\Security\PermissionAuthorizationPolicyProvider.cs

Error Recommendation
'ISecurity' does not contain a definition for 'GetPermissionsAsync'... Method was renamed to GetAllRegisteredPermissionsAsync

file: \Domain\Security\PollingApiUserChangeToken.cs

Error Recommendation
The type or namespace name 'UserSearchRequest' could not be found... UserSearchRequest was renamed to UserSearchCriteria. Also its fields SkipCount->Skip, TakeCount->Take.
'UserSearchResult' does not contain a definition for 'TotalCount' Search result was incapsulated into a Result property of UserSearchResult. Therefore replace result.TotalCount with result.Result.TotalCount.
'UserSearchResult' does not contain a definition for 'Users' Search result was incapsulated into a Result property of UserSearchResult. Therefore replace result.Users with result.Result.Users.

file: \Domain\Cart\CartConverter.cs

Error Recommendation
The type or namespace name 'Setting' does not exist... Setting was renamed to ObjectSettingEntry

file: \Domain\Stores\StoreConverter.cs

Error Recommendation
The type or namespace name 'Setting' does not exist... Setting was renamed to ObjectSettingEntry

file: \Domain\Stores\StoreService.cs

Error Recommendation
The type or namespace name 'Setting' does not exist... Setting was renamed to ObjectSettingEntry, rewrite as AutoRestClients.PlatformModuleApi.Models.ObjectSettingEntry

file: \Middleware\CreateStorefrontRolesMiddleware.cs

Error Recommendation
The type or namespace name 'RoleSearchRequest' could not be found... RoleSearchRequest was renamed to RoleSearchCriteria. Also field TakeCount->Take.
___
### Catalog module
Run Autorest for $modules = @('Catalog'). Wait while Autorest finishes.

file: \Domain\Catalog\CatalogConverter.cs

Error Recommendation
The type or namespace name 'ProductSearchCriteria' does not exist ProductSearchCriteria was renamed to ProductIndexedSearchCriteria
The type or namespace name 'CategorySearchCriteria' does not exist CategorySearchCriteria was renamed to CategoryIndexedSearchCriteria

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceCatalogRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceCatalogRESTAPIdocumentation as PlatformModuleClient
The type or namespace name 'ICatalogModuleSearch' could not be found... ICatalogModuleSearch was renamed to ICatalogModuleIndexedSearch
The type or namespace name 'CatalogModuleSearch' could not be found... CatalogModuleSearch was renamed to CatalogModuleIndexedSearch

file: \Domain\Catalog\CatalogConverter.cs

Error Recommendation
The type or namespace name 'Product' does not exist Product was renamed to CatalogProduct
Warning! Variations in platform v3 have new type Variation itstead of storefront code where variations is a products. Therefore we need to add in this file additional conversion method to convert AutoRest-generated Variation to the Product in storefront. Let's do it:
        public static Product ToProduct(this catalogDto.Variation variationDto, Language currentLanguage, Currency currentCurrency, Store store)
        {
            return variationDto.JsonConvert<catalogDto.CatalogProduct>().ToProduct(currentLanguage, currentCurrency, store);
        }

file: \Domain\Catalog\CatalogService.cs

Error Recommendation
The type or namespace name 'ICatalogModuleSearch' could not be found... ICatalogModuleSearch was renamed to ICatalogModuleIndexedSearch
The type or namespace name 'ProductSearchResult' could not be found... ProductSearchResult was renamed to ProductIndexedSearchResult
___
### Cart module
Run Autorest for $modules = @('Cart'). Wait while Autorest finishes.

file: \Domain\Cart\CartConverter.cs

Error Recommendation
The type or namespace name 'ShipmentItem' could not be found... ShipmentItem was renamed to CartShipmentItem
The type or namespace name 'Shipment' could not be found... Shipment was renamed to CartShipment
The type or namespace name 'Address' could not be found... Address was renamed to CartAddress
The type or namespace name 'LineItem' could not be found... LineItem was renamed to CartLineItem
'ShippingRate' does not contain a definition for 'OptionDescription' OptionDescription obsolete. Just remove this assignment.
'PaymentMethod' does not contain a definition for 'Description' Description obsolete. Just remove this assignment.
The property or indexer 'ShoppingCart.ObjectType' cannot be used in this context because the set accessor is inaccessible Just remove this assignment. It does not matter because it's equal to .NET type name on the server.
The property or indexer 'CartLineItem.ObjectType' cannot be used in this context because the set accessor is inaccessible Just remove this assignment. It does not matter because it's equal to .NET type name on the server.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceCartRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceCartRESTAPIdocumentation as CartModuleClient

file: \Domain\Cart\CartService.cs

Error Recommendation
'ICartModule' does not contain a definition for 'UpdateAsync'... UpdateAsync was renamed to UpdateShoppingCartAsync
'ICartModule' does not contain a definition for 'SearchAsync'... SearchAsync was renamed to SearchShoppingCartAsync
___
### Content module
Run Autorest for $modules = @('Content'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceContentRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceContentRESTAPIdocumentation as ContentModuleClient

Core and Tax modules

Run Autorest for $modules = @('Core','Tax'). Wait while Autorest finishes. We are running for both modules because a tax-linked part of Core module was moved to Tax module.

file: \Domain\Common\DynamicPropertyConverter.cs

Error Recommendation
A lot of errors like: The type or namespace name 'DynamicObjectProperty' could not be found... DynamicObjectProperty was moved to platform API. Replace coreDto.DynamicObjectProperty with platformDto.DynamicObjectProperty

file: \Domain\Tax\TaxConverter.cs

Error Recommendation
The type or namespace name 'TaxRate' could not be found... TaxRate was moved to Tax module:
  • Add using taxDto = VirtoCommerce.Storefront.AutoRestClients.TaxModuleApi.Models;
  • replace coreDto.TaxRate with taxDto.TaxRate;
  • Remove using coreDto = VirtoCommerce.Storefront.AutoRestClients.CoreModuleApi.Models.
The type or namespace name 'TaxEvaluationContext' could not be found... TaxEvaluationContext was moved to Tax module: replace coreDto.TaxEvaluationContext with taxDto.TaxEvaluationContext
The type or namespace name 'TaxLine' could not be found... TaxLine was moved to Tax module: replace coreDto.TaxLine with taxDto.TaxLine
The type or namespace name 'TaxDetail' could not be found... TaxDetail was moved to Tax module: replace coreDto.TaxDetail with taxDto.TaxDetail
'TaxCustomer' does not contain a definition for 'MemberType' MemberType was removed. Remove assignment.

file: \Domain\Tax\TaxEvaluator.cs

Error Recommendation
The type or namespace name 'TaxRate' does not exist... TaxRate was moved to Tax module:
  • add using taxDto = VirtoCommerce.Storefront.AutoRestClients.TaxModuleApi.Models;
  • replace coreService.TaxRate with taxDto.TaxRate;
  • Remove using coreService = VirtoCommerce.Storefront.AutoRestClients.CoreModuleApi.Models.
'ICommerce' does not contain a definition for 'EvaluateTaxesAsync'... EvaluateTaxesAsync was moved to Tax module:
  • add using VirtoCommerce.Storefront.AutoRestClients.TaxModuleApi;
  • replace ICommerce with ITaxModule to make tax module methods accessible;
  • Rename member _commerceApi to _taxApi;
  • remove using VirtoCommerce.Storefront.AutoRestClients.CoreModuleApi;

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceCoreRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceCoreRESTAPIdocumentation as CoreModuleClient
'TaxModule' does not contain a constructor that takes 3 arguments Rewrite TaxModule as CoreModuleClient.
The type or namespace name 'IStorefrontSecurity' could not be found...
The type or namespace name 'StorefrontSecurity' could not be found...
It's obsolete. Just remove this registration in DI.

file: \Domain\Stores\StoreConverter.cs

Error Recommendation
The type or namespace name 'DynamicObjectProperty' could not be found... DynamicObjectProperty was moved to platform API. Replace coreDto.DynamicObjectProperty with platformDto.DynamicObjectProperty

file: \Domain\Marketing\MarketingConverter.cs

Error Recommendation
The type or namespace name 'DynamicObjectProperty' could not be found... DynamicObjectProperty was moved to platform API. Replace coreDto.DynamicObjectProperty with platformDto.DynamicObjectProperty. Add appropriate using.

file: \Domain\Order\OrderConverter.cs

Error Recommendation
The type or namespace name 'DynamicObjectProperty' could not be found... DynamicObjectProperty was moved to platform API. Replace coreDto.DynamicObjectProperty with platformDto.DynamicObjectProperty. Add appropriate using.

file: \Domain\Cart\CartConverter.cs

Error Recommendation
The type or namespace name 'DynamicObjectProperty' could not be found... DynamicObjectProperty was moved to platform API. Replace coreDto.DynamicObjectProperty with platformDto.DynamicObjectProperty
Cannot implicitly convert type 'VirtoCommerce.Storefront.AutoRestClients.CoreModuleApi.Models.Address' to 'VirtoCommerce.Storefront.AutoRestClients.TaxModuleApi.Models.TaxAddress' Add conversion to TaxAddress thru JsonConvert:
retVal.Address = taxContext.Address.ToCoreAddressDto().JsonConvert<taxDto.TaxAddress>();

file: \Domain\Customer\MemberConverter.cs

Error Recommendation
The type or namespace name 'DynamicObjectProperty' could not be found... DynamicObjectProperty was moved to platform API. Replace coreDto.DynamicObjectProperty with platformDto.DynamicObjectProperty. Add appropriate using.
The type or namespace name 'Contact' does not exist in the namespace Contact was moved to Customer module. Start with next topic: convert Customer module.
___
### Customer module
Run Autorest for $modules = @('Customer'). Wait while Autorest finishes.

file: \Domain\Customer\MemberConverter.cs

Error Recommendation
The type or namespace name 'Contact' does not exist in the namespace Contact was moved to Customer module. Replace coreDto.Contact with customerDto.Contact.
The type or namespace name 'Address' could not be found... Address was renamed to CustomerAddress.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceCustomerRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceCustomerRESTAPIdocumentation as CoreModuleClient

file: \Domain\Customer\MemberService.cs

Error Recommendation
'ICustomerModule' does not contain a definition for 'SearchAsync' and no accessible extension method 'SearchAsync' ... SearchAsync was renamed to SearchMemberAsync.

file: \Domain\Tax\TaxConverter.cs

Error Recommendation
Cannot implicitly convert type 'VirtoCommerce.Storefront.AutoRestClients.CustomerModuleApi.Models.Contact' to 'VirtoCommerce.Storefront.AutoRestClients.TaxModuleApi.Models.TaxCustomer' Add conversion to TaxCustomer thru JsonConvert:
retVal.Customer = taxContext?.Customer?.Contact?.ToCoreContactDto().JsonConvert<taxDto.TaxCustomer>();

file: \Domain\Quote\QuoteConverter.cs

Error Recommendation
The type or namespace name 'DynamicObjectProperty' does not exist... DynamicObjectProperty was moved to platform API. Replace coreDto.DynamicObjectProperty with platformDto.DynamicObjectProperty. Add appropriate using of platform models:
using platformDto = VirtoCommerce.Storefront.AutoRestClients.PlatformModuleApi.Models;
___
### Inventory module
Run Autorest for $modules = @('Inventory'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceInventoryRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceInventoryRESTAPIdocumentation as InventoryModuleClient
___
### Marketing module
Run Autorest for $modules = @('Marketing'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceMarketingRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceMarketingRESTAPIdocumentation as InventoryModuleClient

Orders module

Run Autorest for $modules = @('Orders'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceOrdersRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceOrdersRESTAPIdocumentation as OrdersModuleClient

file: \Controllers\Api\ApiCartController.cs

Error Recommendation
The type or namespace name 'ProcessPaymentResult' does not exist ProcessPaymentResult was renamed to ProcessPaymentRequestResult

file: \Domain\Order\OrderConverter.cs

Error Recommendation
The type or namespace name 'ProcessPaymentResult' does not exist ProcessPaymentResult was renamed to ProcessPaymentRequestResult
The type or namespace name 'Address' does not exist Address was renamed to OrderAddress.
The type or namespace name 'ShipmentItem' does not exist ShipmentItem was renamed to OrderShipmentItem.
The type or namespace name 'Shipment' does not exist Shipment was renamed to OrderShipmentItem.
The type or namespace name 'LineItem' does not exist LineItem was renamed to OrderLineItem.
'ProcessPaymentRequestResult' does not contain a definition for 'Error' Error was renamed to ErrorMessage

file: \Controllers\Api\ApiOrderController.cs

Error Recommendation
IOrderModule' does not contain a definition for 'SearchAsync' and no accessible extension method 'SearchAsync' SearchAsync was renamed to SearchCustomerOrderAsync
IOrderModule' does not contain a definition for 'UpdateAsync' and no accessible extension method 'UpdateAsync' UpdateAsync was renamed to UpdateOrderAsync
A lot of errors: There is no argument given that corresponds to the required formal parameter 'respGroup' of 'OrderModuleExtensions.GetByNumberAsync Write string.Empty to respGroup parameter.
There is no argument given that corresponds to the required formal parameter 'respGroup' of 'OrderModuleExtensions.GetByIdAsync Write string.Empty to respGroup parameter.

file: \Domain\Order\CustomerOrderService.cs

Error Recommendation
There is no argument given that corresponds to the required formal parameter 'respGroup' of 'OrderModuleExtensions.GetByNumberAsync Write string.Empty to respGroup parameter.
There is no argument given that corresponds to the required formal parameter 'respGroup' of 'OrderModuleExtensions.GetByIdAsync Write string.Empty to respGroup parameter.
IOrderModule' does not contain a definition for 'SearchAsync' and no accessible extension method 'SearchAsync' SearchAsync was renamed to SearchCustomerOrderAsync
___
### Pricing module
Run Autorest for $modules = @('Pricing'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommercePricingRESTAPIdocumentation' could not be found... Rewrite VirtoCommercePricingRESTAPIdocumentation as PricingModuleClient
___
### Shipping module
Run Autorest for $modules = @('Shipping'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
'ShippingModule' does not contain a constructor that takes 3 arguments
Rewrite ShippingModule as ShippingModuleClient.
___
### Payment module
Run Autorest for $modules = @('Payment'). Wait while Autorest finishes.
Error Recommendation
'PaymentModule' does not contain a constructor that takes 3 arguments
Rewrite PaymentModule as PaymentModuleClient.
___
### Sitemaps module
Run Autorest for $modules = @('Sitemaps'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceSitemapsRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceSitemapsRESTAPIdocumentation as SitemapsModuleClient
___
### Store module
Run Autorest for $modules = @('Store'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceStoreRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceStoreRESTAPIdocumentation as SitemapsModuleClient

file: \Domain\Stores\StoreService.cs

Error Recommendation
The type or namespace name 'PaymentMethod' does not exist
The type or namespace name 'TaxProvider' does not exist
Just remove these usings
'Store' does not contain a definition for 'PaymentMethods'...
'Store' does not contain a definition for 'TaxProviders'...
storeDto does not have such properties. We should always ask _paymentModule service for valid store payment methods and _taxModule for tax providers. Rewrite ConvertStoreAndLoadDependeciesAsync with this mean (look at the code after table).
The type or namespace name 'StorePaymentMethod' could not be found Just remove JsonConvert\() it doesn't need anymore.
        protected virtual async Task<Store> ConvertStoreAndLoadDependeciesAsync(StoreApi.Store storeDto, Currency currency = null)
        {
            var result = storeDto.ToStore();

            if (currency != null)
            {
                var paymentSearchCriteria = new PaymentMethodsSearchCriteria { StoreId = result.Id };
                var paymentsSearchResult = await _paymentModule.SearchPaymentMethodsAsync(paymentSearchCriteria);

                result.PaymentMethods = paymentsSearchResult.Results
                    .Where(pm => pm.IsActive != null && pm.IsActive.Value)
                    .Select(pm =>
                    {
                        var paymentMethod = pm.ToStorePaymentMethod(currency);
                        paymentMethod.Name = pm.TypeName;
                        return paymentMethod;
                    }).ToArray();
            }
            var taxSearchCriteria = new TaxProviderSearchCriteria { StoreId = result.Id };
            var taxProviderSearchResult = await _taxModule.SearchTaxProvidersAsync(taxSearchCriteria);
            result.FixedTaxRate = GetFixedTaxRate(taxProviderSearchResult.Results.Select(xp => xp.JsonConvert<TaxProvider>()).ToArray());

            //use url for stores from configuration file with hight priority than store url defined in manager
            result.Url = _storefrontOptions.StoreUrls[result.Id] ?? result.Url;

            return result;
        }

file: \Domain\Stores\StoreConverter.cs

Error Recommendation
The type or namespace name 'PaymentMethod' does not exist...
The type or namespace name 'TaxDetail' does not exist...
They both were moved to payment module. Therefore add appropriate using using paymentDto = VirtoCommerce.Storefront.AutoRestClients.PaymentModuleApi.Models; then rewrite storeDto.PaymentMethod as paymentDto.PaymentMethod, storeDto.TaxDetail, as paymentDto.TaxDetail

file: \Domain\Order\OrderConverter.cs

Error Recommendation
The type or namespace name 'PaymentMethod' does not exist... There meaning PaymentMethod from store module, that was moved in v3 to payment module. Therefore it is need to add appropriate using using paymentDto = VirtoCommerce.Storefront.AutoRestClients.PaymentModuleApi.Models; then rewrite storeDto.PaymentMethod as paymentDto.PaymentMethod

Subscription module

Run Autorest for $modules = @('Subscription'). Wait while Autorest finishes.

file: \DependencyInjection\ServiceCollectionExtension.cs

Error Recommendation
The type or namespace name 'VirtoCommerceSubscriptionRESTAPIdocumentation' could not be found... Rewrite VirtoCommerceSubscriptionRESTAPIdocumentation as SitemapsModuleClient

Last update: June 9, 2020