From 49d5819676a383be41c45e58f00f2306d2e965de Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Tue, 19 Nov 2024 19:21:33 +0100 Subject: [PATCH 01/14] FRW-8550 Dynamic Multistore documentation. --- _data/sidebars/pbc_all_sidebar.yml | 6 + .../202410.0/enable-dynamic-multistore.md | 56 +++++++ .../202410.0/install-dynamic-multistore.md | 9 +- .../base-shop/difference-between-modes.md | 143 ++++++++++++++++++ .../base-shop/enable-dynamic-multistore.md | 8 + .../202410.0/base-shop/faq.md | 35 +++++ 6 files changed, 255 insertions(+), 2 deletions(-) create mode 100644 _includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md create mode 100644 docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md create mode 100644 docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.md create mode 100644 docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md diff --git a/_data/sidebars/pbc_all_sidebar.yml b/_data/sidebars/pbc_all_sidebar.yml index 3bff7bf80fd..4cbc8ed9807 100644 --- a/_data/sidebars/pbc_all_sidebar.yml +++ b/_data/sidebars/pbc_all_sidebar.yml @@ -1226,6 +1226,12 @@ entries: - title: Add fields to Back Office forms url: /docs/pbc/all/dynamic-multistore/base-shop/add-fields-to-back-office-forms.html + - title: Difference between Dynamic Multistore ON and OFF mode + url: /docs/pbc/all/dynamic-multistore/base-shop/difference-between-modes.html + - title: Enable / Disable Dynamic Multistore + url: /docs/pbc/all/dynamic-multistore/base-shop/enable-dynamic-multistore.html + - title: FAQ Dynamic Multistore + url: /docs/pbc/all/dynamic-multistore/base-shop/faq.html - title: Delete stores url: /docs/pbc/all/dynamic-multistore/base-shop/delete-stores.html - title: Import stores diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md new file mode 100644 index 00000000000..18344d9efe9 --- /dev/null +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -0,0 +1,56 @@ +This document describes how to enable [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) on the latest codebase. + +## Enable Dynamic Multistore + +{% info_block warningBox "Project version" %} +If your project version is below 202307.0, you need to update to the latest codebase first, see [Install Dynamic Multistore](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/install-dynamic-multistore.html) page. +{% endinfo_block %} + +### Here are the steps that needs to be performed to enable Dynamic Multistore. + +{% info_block warningBox "Staging environment" %} + Make sure that **all** steps above are performed (and fully tested) on staging before applying it on production setup, to avoid unexpected downtime and data loss. +{% endinfo_block %} + + +1. Make sure that your custom Backoffice, MerchantPortal, Console Commands, Gateway, BackendAPI code do not use `StoreFacade::getCurrentStore()` as well as `StoreClient::getCurrentStore()` methods, they are no longer available in any other application except GlueStorefront and Storefront. +2. Make sure that you custom console commands (and the places where they are executed) updated to the new format, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Deployment file difference). +3. Be aware that after enabling Dynamic Multistore mode, your basic domain structure will change from store to region, make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. +4. The Dynamic Store feature itself does not require any database changes, in case you've already migrated to the latest demoshop version. +5. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: + - During server migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. + - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. + (Expected downtime is limited to the deployment time, normally it takes less than 1hr) +5. Update deployment your AWS deployment files to Dynamic Multistore mode, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Difference in console commands execution). +6. Run normal deploy for your server pipeline. + + +{% info_block warningBox "Verification" %} +- Make sure your store is accessible at `https://yves.eu.mysprykershop.com` or `https://backoffice.eu.mysprykershop.com`. +- Make sure the store switcher is displayed on the Storefront. + + +Congratulations! Now you have Dynamic Multistore feature up and running. +{% endinfo_block %} + +## Rollout + +### Rollout procedure is opposite, and contains the following steps: + +{% info_block warningBox "Staging environment" %} +Make sure that **all** steps above are performed (and fully tested) on staging before applying it on production setup, to avoid unexpected downtime and data loss. +{% endinfo_block %} + +1. Be aware that after disabling Dynamic Multistore mode, your basic domain structure will change from region to store, make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. +2. Disabling Dynamic Store feature itself does not require any database changes. +3. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: + - During server migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. + - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. + (Expected downtime is limited to the deployment time, normally it takes less than 1hr) +4. Revert changes for you deployment files to Dynamic Multistore OFF mode, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Difference in console commands execution). +6. Run normal deploy for your server pipeline. + +{% info_block warningBox "Verification" %} +- Make sure your store is accessible at `https://yves.de.mysprykershop.com` or `https://backoffice.de.mysprykershop.com`. +- Make sure the store switcher is **not** displayed on the Storefront. +{% endinfo_block %} \ No newline at end of file diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md index 165dd1e34f8..955dad707d6 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md @@ -7,7 +7,7 @@ Follow the steps below to install the Dynamic Multistore feature core. ### Prerequisites for projects below version 202307.0 {% info_block warningBox "Project version" %} -If your project is of version 202307.0 or later, go to [Enable the dynamic store feature]. +If your project is of version 202307.0 or later you can skip steps below and go directly to [enabling process]([here](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.html)). {% endinfo_block %} 1. Upgrade the following modules: @@ -1528,7 +1528,12 @@ class ShopApplicationDependencyProvider extends SprykerShopApplicationDependency } ``` -## Launch and set up environment + +## Launch and set up environment (locally) + +{% info_block warningBox "Project version" %} +For enabling Dynamic Multistore on production environment please read [enabling process]([here](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.html)). +{% endinfo_block %} Rebuild the application with assets and activate new endpoints: diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md new file mode 100644 index 00000000000..335b13f4528 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md @@ -0,0 +1,143 @@ +--- +title: Difference in deployment files +description: This document describes the difference between Dynamic Multistore ON and OFF mode. +past_updated: Nov 1, 2024 +template: howto-guide-template +last_updated: Nov 1, 2024 +--- + +This document describes the difference between Dynamic Multistore ON and OFF mode. + + +## Deployment file difference + +### Environment variable section + +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' +SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} +SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} +``` + +changed to: + +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' +SPRYKER_DYNAMIC_STORE_MODE: true +SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} +``` + +### Regions section + +```yaml +regions: + stores: + DE: + services: + broker: + namespace: de_queue + key_value_store: + namespace: 1 + search: + namespace: de_search + session: + namespace: 2 + AT: + services: + broker: + namespace: at_queue + key_value_store: + namespace: 3 + search: + namespace: at_search + session: + namespace: 4 +``` +converted to: + +```yaml +regions: + broker: + namespace: eu-docker + key_value_store: + namespace: 1 + search: + namespace: eu_search +``` + + +### Applications section + +{% info_block infoBox "Info" %} + The same pattern is valid for all applications +{% endinfo_block %} + +```yaml + mportal: + application: merchant-portal + endpoints: + mp.de.{{DOMAIN_ZONE}}: + entry-point: MerchantPortal + store: DE + primal: true + services: + session: + namespace: 7 + mp.at.{{DOMAIN_ZONE}}: + entry-point: MerchantPortal + store: AT + services: + session: + namespace: 8 +``` + +converted to: + +```yaml +mportal: + application: merchant-portal + endpoints: + mp.eu.{{DOMAIN_ZONE}}: + region: EU + <<: *frontend-auth + entry-point: MerchantPortal + primal: true + services: + session: + namespace: 7 +``` + +{% info_block infoBox "Verification" %} +Please make sure that you've migrated all the application by the pattern provided above. +{% endinfo_block %} + +{% info_block infoBox "Info" %} + The domain structure is changed to have an ability to switch between stores withing one domain. +{% endinfo_block %} + +## Difference in console commands execution + +In disabled Dynamic Multistore mode, console commands which somehow depends on store, were executed with `APPLICATION_STORE` environment variable, example: + +```shell +APPLICATION_STORE=DE console search:setup:sources +``` + +In Dynamic Multistore mode, all the store aware console commands should be executed with `--store` parameter, example: + +```shell +console search:setup:sources --store=DE +``` + +In case if store is not provided as a parameter, the command is executed for all stores within the current region. + +For the custom console commands please follow the next rules: +- `Store(Facade|Client)::getCurrentStore()` should never be used in the code that console command executes. +- All store aware commands should implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for specific store if store parameter is provided, or for all the stores in the region otherwise. +- It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. \ No newline at end of file diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.md new file mode 100644 index 00000000000..bb991fec894 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.md @@ -0,0 +1,8 @@ +--- +title: Enable Dynamic Multistore +description: Learn how to enable the Dynamic Store feature on the latest codebase +last_updated: Nov 19, 2024 +template: feature-integration-guide-template +--- + +{% include pbc/all/install-features/{{page.version}}/enable-dynamic-multistore.md %} diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md new file mode 100644 index 00000000000..ef58ddd3af1 --- /dev/null +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md @@ -0,0 +1,35 @@ +--- +title: Dynamic Multistore FAQ +description: This document contains frequently asked questions for Dynamic Multistore. +past_updated: Nov 1, 2024 +template: howto-guide-template +last_updated: Nov 1, 2024 +--- + +This document contains frequently asked questions about Dynamic Multistore feature. + +## Questions + +### How to check if Dynamic Multistore is enabled on your environment? + +#### Option #1 (On env side) +- Verify the value of `SPRYKER_DYNAMIC_STORE_MODE` environment variable, if it's exists and it equals to `true` then you project operates in Dynamic Multistore mode. +#### Option #2 (On interface side) +- Navigate to + http://backoffice.eu.spryker.local/store-gui/list, verify if `Edit` button is available on each store on the page. + +### What is the difference of how Storefront and GlueStorefront (as well as Glue) vs Backoffice and Merchant Portal works in Dynamic Multistore mode? + +In both cases, the applications works with the several stores withing the one region, but: +* Backoffice, MerchantPortal operates with data from all the stores withing the specific region without requirement to provide the specific store. +* Storefront and GlueStorefront (as well as Glue) requires store to operate, and operates within only one provided store. (If store is not provided explicitly, the default one is used.) + + +### Infrastructure in PaaS: is there anything that needs to be done in PaaS? + +The only difference is in the deployment files. More details that can be found [here](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). + + +### How store-specific entities should be managed in Data Exchange API? + +There are no specific requirements, all depends on the database structure. Should be handled the same way as any other exposed through Data Exchange API database table. \ No newline at end of file From d2af5edc720be5685c3f3fb828bd2c9d9e0972b6 Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Thu, 21 Nov 2024 17:42:49 +0100 Subject: [PATCH 02/14] FRW-8550 Adjustments after review. --- .../202410.0/enable-dynamic-multistore.md | 10 +++++----- .../202410.0/base-shop/difference-between-modes.md | 7 +++++++ .../base-shop/dynamic-multistore-feature-overview.md | 2 ++ .../all/dynamic-multistore/202410.0/base-shop/faq.md | 7 ++----- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md index 18344d9efe9..5e575cc5828 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -15,13 +15,13 @@ If your project version is below 202307.0, you need to update to the latest code 1. Make sure that your custom Backoffice, MerchantPortal, Console Commands, Gateway, BackendAPI code do not use `StoreFacade::getCurrentStore()` as well as `StoreClient::getCurrentStore()` methods, they are no longer available in any other application except GlueStorefront and Storefront. 2. Make sure that you custom console commands (and the places where they are executed) updated to the new format, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Deployment file difference). -3. Be aware that after enabling Dynamic Multistore mode, your basic domain structure will change from store to region, make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. +3. Be aware that after enabling Dynamic Multistore mode, your basic domain structure will change from store to region for all the applications(Example https://yves.de.mysprykershop.com => https://yves.eu.mysprykershop.com), make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. 4. The Dynamic Store feature itself does not require any database changes, in case you've already migrated to the latest demoshop version. 5. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: - During server migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. (Expected downtime is limited to the deployment time, normally it takes less than 1hr) -5. Update deployment your AWS deployment files to Dynamic Multistore mode, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Difference in console commands execution). +5. Update AWS deployment files to Dynamic Multistore mode, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Difference in console commands execution). 6. Run normal deploy for your server pipeline. @@ -33,9 +33,9 @@ If your project version is below 202307.0, you need to update to the latest code Congratulations! Now you have Dynamic Multistore feature up and running. {% endinfo_block %} -## Rollout +## Rollback -### Rollout procedure is opposite, and contains the following steps: +### Rollback procedure is opposite, and contains the following steps: {% info_block warningBox "Staging environment" %} Make sure that **all** steps above are performed (and fully tested) on staging before applying it on production setup, to avoid unexpected downtime and data loss. @@ -44,7 +44,7 @@ Make sure that **all** steps above are performed (and fully tested) on staging b 1. Be aware that after disabling Dynamic Multistore mode, your basic domain structure will change from region to store, make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. 2. Disabling Dynamic Store feature itself does not require any database changes. 3. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: - - During server migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. + - During server migration you do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. (Expected downtime is limited to the deployment time, normally it takes less than 1hr) 4. Revert changes for you deployment files to Dynamic Multistore OFF mode, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Difference in console commands execution). diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md index 335b13f4528..659ebb3ab8e 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md @@ -11,6 +11,13 @@ This document describes the difference between Dynamic Multistore ON and OFF mod ## Deployment file difference +### What is the difference of how Storefront and GlueStorefront (as well as Glue) vs Backoffice and Merchant Portal works in Dynamic Multistore mode? + +In both cases, the applications works with the several stores within the one region, but: +* Backoffice, MerchantPortal operates with data from all the stores within the specific region without requirement to provide the specific store. +* Storefront and GlueStorefront (as well as Glue) requires store to operate, and operates within only one provided store. (If store is not provided explicitly, the default one is used.) + + ### Environment variable section ```yaml diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md index 577015b062a..01bed3ad3e9 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md @@ -135,6 +135,8 @@ In this example, EU region has DE and AT stores. US region has a US store. Dynam ![storefront-store-switcher](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/storefront-store-switcher.png) +See more details [here](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). + ## Data import performance The number of stores affects data import speed: the more stores you have, the slower the data import. Importing products for 40 stores takes approximately 5 times longer than for 8 stores. diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md index ef58ddd3af1..12fe0e5f807 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md @@ -18,12 +18,9 @@ This document contains frequently asked questions about Dynamic Multistore featu - Navigate to http://backoffice.eu.spryker.local/store-gui/list, verify if `Edit` button is available on each store on the page. -### What is the difference of how Storefront and GlueStorefront (as well as Glue) vs Backoffice and Merchant Portal works in Dynamic Multistore mode? - -In both cases, the applications works with the several stores withing the one region, but: -* Backoffice, MerchantPortal operates with data from all the stores withing the specific region without requirement to provide the specific store. -* Storefront and GlueStorefront (as well as Glue) requires store to operate, and operates within only one provided store. (If store is not provided explicitly, the default one is used.) +### What is the difference between Dynamic Multistore ON and OFF modes. +[See details](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). ### Infrastructure in PaaS: is there anything that needs to be done in PaaS? From b5e9c9fbd3853fd1d42e31be890658f4f8033470 Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Thu, 21 Nov 2024 17:45:25 +0100 Subject: [PATCH 03/14] FRW-8550 Adjustments after review. --- .../202410.0/base-shop/difference-between-modes.md | 7 ------- docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md | 8 ++++++-- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md index 659ebb3ab8e..335b13f4528 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md @@ -11,13 +11,6 @@ This document describes the difference between Dynamic Multistore ON and OFF mod ## Deployment file difference -### What is the difference of how Storefront and GlueStorefront (as well as Glue) vs Backoffice and Merchant Portal works in Dynamic Multistore mode? - -In both cases, the applications works with the several stores within the one region, but: -* Backoffice, MerchantPortal operates with data from all the stores within the specific region without requirement to provide the specific store. -* Storefront and GlueStorefront (as well as Glue) requires store to operate, and operates within only one provided store. (If store is not provided explicitly, the default one is used.) - - ### Environment variable section ```yaml diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md index 12fe0e5f807..a94f91861b4 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md @@ -18,9 +18,13 @@ This document contains frequently asked questions about Dynamic Multistore featu - Navigate to http://backoffice.eu.spryker.local/store-gui/list, verify if `Edit` button is available on each store on the page. -### What is the difference between Dynamic Multistore ON and OFF modes. +### What is the difference of how Storefront and GlueStorefront (as well as Glue) vs Backoffice and Merchant Portal works in Dynamic Multistore mode? -[See details](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). +In both cases, the applications works with the several stores within the one region, but: +* Backoffice, MerchantPortal operates with data from all the stores within the specific region without requirement to provide the specific store. +* Storefront and GlueStorefront (as well as Glue) requires store to operate, and operates within only one provided store. (If store is not provided explicitly, the default one is used.) + +[See more details](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). ### Infrastructure in PaaS: is there anything that needs to be done in PaaS? From 52aa5a058c6b4c259f5a63cce97bb6941104d471 Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Thu, 21 Nov 2024 18:22:52 +0100 Subject: [PATCH 04/14] FRW-8550 Adjustments after review. --- .../base-shop/difference-between-modes.md | 32 +++++++++++++++++- .../dynamic-multistore-feature-overview.md | 33 ++----------------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md index 335b13f4528..3d9d65bc7a1 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md @@ -140,4 +140,34 @@ In case if store is not provided as a parameter, the command is executed for all For the custom console commands please follow the next rules: - `Store(Facade|Client)::getCurrentStore()` should never be used in the code that console command executes. - All store aware commands should implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for specific store if store parameter is provided, or for all the stores in the region otherwise. -- It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. \ No newline at end of file +- It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. + +## How Dynamic Multistore affects a project + +In this example, EU region has DE and AT stores. US region has a US store. Dynamic Multistore introduces the following changes in this setup: + +- URLs for Storefront, Back Office, Merchant Portal, and Glue API contain region instead of store name. For example–the URL of the Back Office is `https://backoffice.eu.mysprykershop.com` instead of `https://backoffice.de.mysprykershop.com`. + +- RabbitMQ virtual hosts contain region instead of store. For example–`eu-docker` instead of `de-docker`. + +![rabbitmq-virtual-hosts-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-non-dms.png) + +![rabbitmq-virtual-hosts-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-dms.png) + +- Jenkins job names contain region instead of store. For example–`EU_queue-worker-start` instead of `DE_queue-worker-start`. + +![jenkins-jobs-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-non-dms.png) + +![jenkins-jobs-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-dms.png) + +- Elasticsearch indexes contain store as a part of the index name for Dynamic Multistore enabled and disabled modes. + +![elasticsearch-indexes-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-non-dms.png) + +![elasticsearch-indexes-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-dms.png) + +- Redis keys contain store as a part of the key name for Dynamic Multistore enabled and disabled modes. + +- When Dynamic Multistore is enabled, customers can switch between available stores for a region. When a customer changes a store, it's set to the `_store` query parameter. Using the query parameter, the store is added to session under the `current_store` key. It's used for fetching store-related data. + +![storefront-store-switcher](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/storefront-store-switcher.png) \ No newline at end of file diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md index 01bed3ad3e9..ab2a8e05754 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md @@ -104,38 +104,9 @@ When you add a new store, to enable store-related entities for customers, you ne To avoid manually assigning entities in the Back Office, you can assign them using data import. For more details, see [Import stores](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/import-stores.html). +## Differences in modes -## How Dynamic Multistore affects a project - -In this example, EU region has DE and AT stores. US region has a US store. Dynamic Multistore introduces the following changes in this setup: - -- URLs for Storefront, Back Office, Merchant Portal, and Glue API contain region instead of store name. For example–the URL of the Back Office is `https://backoffice.eu.mysprykershop.com` instead of `https://backoffice.de.mysprykershop.com`. - -- RabbitMQ virtual hosts contain region instead of store. For example–`eu-docker` instead of `de-docker`. - -![rabbitmq-virtual-hosts-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-non-dms.png) - -![rabbitmq-virtual-hosts-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-dms.png) - -- Jenkins job names contain region instead of store. For example–`EU_queue-worker-start` instead of `DE_queue-worker-start`. - -![jenkins-jobs-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-non-dms.png) - -![jenkins-jobs-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-dms.png) - -- Elasticsearch indexes contain store as a part of the index name for Dynamic Multistore enabled and disabled modes. - -![elasticsearch-indexes-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-non-dms.png) - -![elasticsearch-indexes-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-dms.png) - -- Redis keys contain store as a part of the key name for Dynamic Multistore enabled and disabled modes. - -- When Dynamic Multistore is enabled, customers can switch between available stores for a region. When a customer changes a store, it's set to the `_store` query parameter. Using the query parameter, the store is added to session under the `current_store` key. It's used for fetching store-related data. - -![storefront-store-switcher](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/storefront-store-switcher.png) - -See more details [here](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). +[Dynamic Multistore mode ON and OFF difference](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). ## Data import performance From 39681e3becc7850f08d34f5952130098538ffa41 Mon Sep 17 00:00:00 2001 From: Andrii Tserkovnyi Date: Wed, 27 Nov 2024 11:26:17 +0200 Subject: [PATCH 05/14] Update enable-dynamic-multistore.md --- .../202410.0/enable-dynamic-multistore.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md index 5e575cc5828..337ae66598a 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -13,15 +13,20 @@ If your project version is below 202307.0, you need to update to the latest code {% endinfo_block %} -1. Make sure that your custom Backoffice, MerchantPortal, Console Commands, Gateway, BackendAPI code do not use `StoreFacade::getCurrentStore()` as well as `StoreClient::getCurrentStore()` methods, they are no longer available in any other application except GlueStorefront and Storefront. +1. Make sure that your custom Backoffice, MerchantPortal, Console Commands, Gateway, BackendAPI code do not use `StoreFacade::getCurrentStore()` as well as `StoreClient::getCurrentStore()` methods, they are no longer available in any other application except GlueStorefront and Storefront. 2. Make sure that you custom console commands (and the places where they are executed) updated to the new format, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Deployment file difference). + 3. Be aware that after enabling Dynamic Multistore mode, your basic domain structure will change from store to region for all the applications(Example https://yves.de.mysprykershop.com => https://yves.eu.mysprykershop.com), make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. + 4. The Dynamic Store feature itself does not require any database changes, in case you've already migrated to the latest demoshop version. -5. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: + +5. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: - During server migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. (Expected downtime is limited to the deployment time, normally it takes less than 1hr) + 5. Update AWS deployment files to Dynamic Multistore mode, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Difference in console commands execution). + 6. Run normal deploy for your server pipeline. @@ -33,7 +38,7 @@ If your project version is below 202307.0, you need to update to the latest code Congratulations! Now you have Dynamic Multistore feature up and running. {% endinfo_block %} -## Rollback +## Rollback ### Rollback procedure is opposite, and contains the following steps: @@ -53,4 +58,4 @@ Make sure that **all** steps above are performed (and fully tested) on staging b {% info_block warningBox "Verification" %} - Make sure your store is accessible at `https://yves.de.mysprykershop.com` or `https://backoffice.de.mysprykershop.com`. - Make sure the store switcher is **not** displayed on the Storefront. -{% endinfo_block %} \ No newline at end of file +{% endinfo_block %} From 269fa5fedc781095ee4049c631023b1e20869e17 Mon Sep 17 00:00:00 2001 From: Andrii Tserkovnyi Date: Sat, 30 Nov 2024 11:41:52 +0200 Subject: [PATCH 06/14] Update enable-dynamic-multistore.md --- .../install-features/202410.0/enable-dynamic-multistore.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md index 337ae66598a..d6d2ffa0b54 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -16,11 +16,9 @@ If your project version is below 202307.0, you need to update to the latest code 1. Make sure that your custom Backoffice, MerchantPortal, Console Commands, Gateway, BackendAPI code do not use `StoreFacade::getCurrentStore()` as well as `StoreClient::getCurrentStore()` methods, they are no longer available in any other application except GlueStorefront and Storefront. 2. Make sure that you custom console commands (and the places where they are executed) updated to the new format, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Deployment file difference). -3. Be aware that after enabling Dynamic Multistore mode, your basic domain structure will change from store to region for all the applications(Example https://yves.de.mysprykershop.com => https://yves.eu.mysprykershop.com), make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. +3. After enabling Dynamic Multistore, the URLs of your shop will change from store to region context, for example–`https://yves.de.mysprykershop.com` will change to `https://yves.eu.mysprykershop.com`. Prepare your shop and third-party systems to handle this change. To avoid SEO impact, set up all the necessary redirects beforehand. -4. The Dynamic Store feature itself does not require any database changes, in case you've already migrated to the latest demoshop version. - -5. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: +4. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: - During server migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. (Expected downtime is limited to the deployment time, normally it takes less than 1hr) From db4ae0d8a465948f9cf860a816d853d63e0226f8 Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Tue, 10 Dec 2024 18:27:00 +0100 Subject: [PATCH 07/14] FRW-8550 Adjustments after TW review. --- _data/sidebars/pbc_all_sidebar.yml | 2 - .../202410.0/enable-dynamic-multistore.md | 139 +++++++++++++- .../base-shop/difference-between-modes.md | 173 ------------------ .../dynamic-multistore-feature-overview.md | 163 ++++++++++++++++- .../202410.0/base-shop/faq.md | 4 +- 5 files changed, 294 insertions(+), 187 deletions(-) delete mode 100644 docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md diff --git a/_data/sidebars/pbc_all_sidebar.yml b/_data/sidebars/pbc_all_sidebar.yml index d2cd8d2fd7b..226bc278744 100644 --- a/_data/sidebars/pbc_all_sidebar.yml +++ b/_data/sidebars/pbc_all_sidebar.yml @@ -1226,8 +1226,6 @@ entries: - title: Add fields to Back Office forms url: /docs/pbc/all/dynamic-multistore/base-shop/add-fields-to-back-office-forms.html - - title: Difference between Dynamic Multistore ON and OFF mode - url: /docs/pbc/all/dynamic-multistore/base-shop/difference-between-modes.html - title: Enable / Disable Dynamic Multistore url: /docs/pbc/all/dynamic-multistore/base-shop/enable-dynamic-multistore.html - title: FAQ Dynamic Multistore diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md index 5e575cc5828..c99f3e98332 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -1,28 +1,94 @@ -This document describes how to enable [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) on the latest codebase. +This document describes how to enable [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) on the demoshop version 202307.0 or above. ## Enable Dynamic Multistore {% info_block warningBox "Project version" %} -If your project version is below 202307.0, you need to update to the latest codebase first, see [Install Dynamic Multistore](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/install-dynamic-multistore.html) page. +If your project version is below 202307.0, you need to install Dynamic Multistore feature first, use instructions provided at [Install Dynamic Multistore](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/install-dynamic-multistore.html) page. {% endinfo_block %} ### Here are the steps that needs to be performed to enable Dynamic Multistore. {% info_block warningBox "Staging environment" %} - Make sure that **all** steps above are performed (and fully tested) on staging before applying it on production setup, to avoid unexpected downtime and data loss. + Make sure that **all** steps below are performed (and fully tested) on staging before applying it on production setup, to avoid unexpected downtime and data loss. {% endinfo_block %} -1. Make sure that your custom Backoffice, MerchantPortal, Console Commands, Gateway, BackendAPI code do not use `StoreFacade::getCurrentStore()` as well as `StoreClient::getCurrentStore()` methods, they are no longer available in any other application except GlueStorefront and Storefront. -2. Make sure that you custom console commands (and the places where they are executed) updated to the new format, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Deployment file difference). +1. Methods `StoreClient::getCurrentStore()`, `StoreFacade::getCurrentStore()` are available only in `GlueStorefront` and `Storefront` applications. For other applications (see list below) replace them with the following methods `StoreStorageClient:getStoreNames()`, `StoreStorageClient::findStoreByName()` or `StoreFacade::getStoreCollection()`. + * Backoffice + * MerchantPortal + * Console Commands + * Gateway + * BackendAPI + +2. Update your custom console commands (if any) to meet the following rules: +- `Store(Facade|Client)::getCurrentStore()` should never be used in the code that console command executes. +- All store aware commands should implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for specific store if store parameter is provided, or for all the stores in the region otherwise. +- It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. 3. Be aware that after enabling Dynamic Multistore mode, your basic domain structure will change from store to region for all the applications(Example https://yves.de.mysprykershop.com => https://yves.eu.mysprykershop.com), make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. 4. The Dynamic Store feature itself does not require any database changes, in case you've already migrated to the latest demoshop version. 5. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: - - During server migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. + - During the migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. (Expected downtime is limited to the deployment time, normally it takes less than 1hr) -5. Update AWS deployment files to Dynamic Multistore mode, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Difference in console commands execution). -6. Run normal deploy for your server pipeline. +6. Update AWS deployment files to Dynamic Multistore mode, using the example: +- Environment variable section +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' +SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} +SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} +``` + +should be changed to: + +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' +SPRYKER_DYNAMIC_STORE_MODE: true +SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} +``` +- Regions section +```yaml +regions: + stores: + DE: + services: + broker: + namespace: de_queue + key_value_store: + namespace: 1 + search: + namespace: de_search + session: + namespace: 2 + AT: + services: + broker: + namespace: at_queue + key_value_store: + namespace: 3 + search: + namespace: at_search + session: + namespace: 4 +``` +should be changed to: + +```yaml +regions: + broker: + namespace: eu-docker + key_value_store: + namespace: 1 + search: + namespace: eu_search +``` + +7. Run normal deploy for your server pipeline. {% info_block warningBox "Verification" %} @@ -47,7 +113,62 @@ Make sure that **all** steps above are performed (and fully tested) on staging b - During server migration you do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. (Expected downtime is limited to the deployment time, normally it takes less than 1hr) -4. Revert changes for you deployment files to Dynamic Multistore OFF mode, see [details](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/difference-between-modes.html#Difference in console commands execution). +4. Revert changes for you deployment files to Dynamic Multistore OFF mode, +- Environment variable section +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' +SPRYKER_DYNAMIC_STORE_MODE: true +SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} +``` +should be changed to: +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' +SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} +SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} +``` + +- Regions section +```yaml +regions: + broker: + namespace: eu-docker + key_value_store: + namespace: 1 + search: + namespace: eu_search +``` +should be changed to: +```yaml +regions: + stores: + DE: + services: + broker: + namespace: de_queue + key_value_store: + namespace: 1 + search: + namespace: de_search + session: + namespace: 2 + AT: + services: + broker: + namespace: at_queue + key_value_store: + namespace: 3 + search: + namespace: at_search + session: + namespace: 4 +``` + 6. Run normal deploy for your server pipeline. {% info_block warningBox "Verification" %} diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md deleted file mode 100644 index 3d9d65bc7a1..00000000000 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.md +++ /dev/null @@ -1,173 +0,0 @@ ---- -title: Difference in deployment files -description: This document describes the difference between Dynamic Multistore ON and OFF mode. -past_updated: Nov 1, 2024 -template: howto-guide-template -last_updated: Nov 1, 2024 ---- - -This document describes the difference between Dynamic Multistore ON and OFF mode. - - -## Deployment file difference - -### Environment variable section - -```yaml -SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' -SPRYKER_HOOK_AFTER_DEPLOY: 'true' -SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' -SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' -SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} -SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} -``` - -changed to: - -```yaml -SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' -SPRYKER_HOOK_AFTER_DEPLOY: 'true' -SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' -SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' -SPRYKER_DYNAMIC_STORE_MODE: true -SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} -``` - -### Regions section - -```yaml -regions: - stores: - DE: - services: - broker: - namespace: de_queue - key_value_store: - namespace: 1 - search: - namespace: de_search - session: - namespace: 2 - AT: - services: - broker: - namespace: at_queue - key_value_store: - namespace: 3 - search: - namespace: at_search - session: - namespace: 4 -``` -converted to: - -```yaml -regions: - broker: - namespace: eu-docker - key_value_store: - namespace: 1 - search: - namespace: eu_search -``` - - -### Applications section - -{% info_block infoBox "Info" %} - The same pattern is valid for all applications -{% endinfo_block %} - -```yaml - mportal: - application: merchant-portal - endpoints: - mp.de.{{DOMAIN_ZONE}}: - entry-point: MerchantPortal - store: DE - primal: true - services: - session: - namespace: 7 - mp.at.{{DOMAIN_ZONE}}: - entry-point: MerchantPortal - store: AT - services: - session: - namespace: 8 -``` - -converted to: - -```yaml -mportal: - application: merchant-portal - endpoints: - mp.eu.{{DOMAIN_ZONE}}: - region: EU - <<: *frontend-auth - entry-point: MerchantPortal - primal: true - services: - session: - namespace: 7 -``` - -{% info_block infoBox "Verification" %} -Please make sure that you've migrated all the application by the pattern provided above. -{% endinfo_block %} - -{% info_block infoBox "Info" %} - The domain structure is changed to have an ability to switch between stores withing one domain. -{% endinfo_block %} - -## Difference in console commands execution - -In disabled Dynamic Multistore mode, console commands which somehow depends on store, were executed with `APPLICATION_STORE` environment variable, example: - -```shell -APPLICATION_STORE=DE console search:setup:sources -``` - -In Dynamic Multistore mode, all the store aware console commands should be executed with `--store` parameter, example: - -```shell -console search:setup:sources --store=DE -``` - -In case if store is not provided as a parameter, the command is executed for all stores within the current region. - -For the custom console commands please follow the next rules: -- `Store(Facade|Client)::getCurrentStore()` should never be used in the code that console command executes. -- All store aware commands should implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for specific store if store parameter is provided, or for all the stores in the region otherwise. -- It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. - -## How Dynamic Multistore affects a project - -In this example, EU region has DE and AT stores. US region has a US store. Dynamic Multistore introduces the following changes in this setup: - -- URLs for Storefront, Back Office, Merchant Portal, and Glue API contain region instead of store name. For example–the URL of the Back Office is `https://backoffice.eu.mysprykershop.com` instead of `https://backoffice.de.mysprykershop.com`. - -- RabbitMQ virtual hosts contain region instead of store. For example–`eu-docker` instead of `de-docker`. - -![rabbitmq-virtual-hosts-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-non-dms.png) - -![rabbitmq-virtual-hosts-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-dms.png) - -- Jenkins job names contain region instead of store. For example–`EU_queue-worker-start` instead of `DE_queue-worker-start`. - -![jenkins-jobs-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-non-dms.png) - -![jenkins-jobs-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-dms.png) - -- Elasticsearch indexes contain store as a part of the index name for Dynamic Multistore enabled and disabled modes. - -![elasticsearch-indexes-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-non-dms.png) - -![elasticsearch-indexes-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-dms.png) - -- Redis keys contain store as a part of the key name for Dynamic Multistore enabled and disabled modes. - -- When Dynamic Multistore is enabled, customers can switch between available stores for a region. When a customer changes a store, it's set to the `_store` query parameter. Using the query parameter, the store is added to session under the `current_store` key. It's used for fetching store-related data. - -![storefront-store-switcher](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/storefront-store-switcher.png) \ No newline at end of file diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md index ab2a8e05754..74b38fbe3c4 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md @@ -106,7 +106,168 @@ To avoid manually assigning entities in the Back Office, you can assign them usi ## Differences in modes -[Dynamic Multistore mode ON and OFF difference](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). +## Deployment file difference + +### Environment variable section + +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' +SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} +SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} +``` + +changed to: + +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' +SPRYKER_DYNAMIC_STORE_MODE: true +SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} +``` + +### Regions section + +```yaml +regions: + stores: + DE: + services: + broker: + namespace: de_queue + key_value_store: + namespace: 1 + search: + namespace: de_search + session: + namespace: 2 + AT: + services: + broker: + namespace: at_queue + key_value_store: + namespace: 3 + search: + namespace: at_search + session: + namespace: 4 +``` +converted to: + +```yaml +regions: + broker: + namespace: eu-docker + key_value_store: + namespace: 1 + search: + namespace: eu_search +``` + + +### Applications section + +{% info_block infoBox "Info" %} +The same pattern is valid for all applications +{% endinfo_block %} + +```yaml + mportal: + application: merchant-portal + endpoints: + mp.de.{{DOMAIN_ZONE}}: + entry-point: MerchantPortal + store: DE + primal: true + services: + session: + namespace: 7 + mp.at.{{DOMAIN_ZONE}}: + entry-point: MerchantPortal + store: AT + services: + session: + namespace: 8 +``` + +converted to: + +```yaml +mportal: + application: merchant-portal + endpoints: + mp.eu.{{DOMAIN_ZONE}}: + region: EU + <<: *frontend-auth + entry-point: MerchantPortal + primal: true + services: + session: + namespace: 7 +``` + +{% info_block infoBox "Verification" %} +Please make sure that you've migrated all the application by the pattern provided above. +{% endinfo_block %} + +{% info_block infoBox "Info" %} +The domain structure is changed to have an ability to switch between stores withing one domain. +{% endinfo_block %} + +## Difference in console commands execution + +In disabled Dynamic Multistore mode, console commands which somehow depends on store, were executed with `APPLICATION_STORE` environment variable, example: + +```shell +APPLICATION_STORE=DE console search:setup:sources +``` + +In Dynamic Multistore mode, all the store aware console commands should be executed with `--store` parameter, example: + +```shell +console search:setup:sources --store=DE +``` + +In case if store is not provided as a parameter, the command is executed for all stores within the current region. + +For the custom console commands please follow the next rules: +- `Store(Facade|Client)::getCurrentStore()` should never be used in the code that console command executes. +- All store aware commands should implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for specific store if store parameter is provided, or for all the stores in the region otherwise. +- It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. + +## How Dynamic Multistore affects a project + +In this example, EU region has DE and AT stores. US region has a US store. Dynamic Multistore introduces the following changes in this setup: + +- URLs for Storefront, Back Office, Merchant Portal, and Glue API contain region instead of store name. For example–the URL of the Back Office is `https://backoffice.eu.mysprykershop.com` instead of `https://backoffice.de.mysprykershop.com`. + +- RabbitMQ virtual hosts contain region instead of store. For example–`eu-docker` instead of `de-docker`. + +![rabbitmq-virtual-hosts-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-non-dms.png) + +![rabbitmq-virtual-hosts-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-dms.png) + +- Jenkins job names contain region instead of store. For example–`EU_queue-worker-start` instead of `DE_queue-worker-start`. + +![jenkins-jobs-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-non-dms.png) + +![jenkins-jobs-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-dms.png) + +- Elasticsearch indexes contain store as a part of the index name for Dynamic Multistore enabled and disabled modes. + +![elasticsearch-indexes-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-non-dms.png) + +![elasticsearch-indexes-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-dms.png) + +- Redis keys contain store as a part of the key name for Dynamic Multistore enabled and disabled modes. + +- When Dynamic Multistore is enabled, customers can switch between available stores for a region. When a customer changes a store, it's set to the `_store` query parameter. Using the query parameter, the store is added to session under the `current_store` key. It's used for fetching store-related data. + +![storefront-store-switcher](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/storefront-store-switcher.png) ## Data import performance diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md index a94f91861b4..e64ed78183f 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md @@ -24,11 +24,11 @@ In both cases, the applications works with the several stores within the one reg * Backoffice, MerchantPortal operates with data from all the stores within the specific region without requirement to provide the specific store. * Storefront and GlueStorefront (as well as Glue) requires store to operate, and operates within only one provided store. (If store is not provided explicitly, the default one is used.) -[See more details](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). +[See more details](/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.html). ### Infrastructure in PaaS: is there anything that needs to be done in PaaS? -The only difference is in the deployment files. More details that can be found [here](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/difference-between-modes.html). +The only difference is in the deployment files. More details that can be found [here](/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.html). ### How store-specific entities should be managed in Data Exchange API? From 91dd449501981777c870e5b4c098fefc42929c9e Mon Sep 17 00:00:00 2001 From: Andrii Tserkovnyi Date: Wed, 11 Dec 2024 12:28:14 +0200 Subject: [PATCH 08/14] Update enable-dynamic-multistore.md --- .../202410.0/enable-dynamic-multistore.md | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md index f568a36719f..04909479190 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -1,28 +1,27 @@ -This document describes how to enable [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) on the demoshop version 202307.0 or above. +This document describes how to enable [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html). -## Enable Dynamic Multistore +## Prerequisites -{% info_block warningBox "Project version" %} -If your project version is below 202307.0, you need to install Dynamic Multistore feature first, use instructions provided at [Install Dynamic Multistore](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/install-dynamic-multistore.html) page. -{% endinfo_block %} +If your project version is below 202307.0, [Install Dynamic Multistore](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/install-dynamic-multistore.html). -### Here are the steps that needs to be performed to enable Dynamic Multistore. +### Enable Dynamic Multistore {% info_block warningBox "Staging environment" %} - Make sure that **all** steps below are performed (and fully tested) on staging before applying it on production setup, to avoid unexpected downtime and data loss. +To avoid unexpected downtime and data loss, perform and test *all* of the following steps in a staging environment first. {% endinfo_block %} -1. Methods `StoreClient::getCurrentStore()`, `StoreFacade::getCurrentStore()` are available only in `GlueStorefront` and `Storefront` applications. For other applications (see list below) replace them with the following methods `StoreStorageClient:getStoreNames()`, `StoreStorageClient::findStoreByName()` or `StoreFacade::getStoreCollection()`. + +1. Replace `StoreClient::getCurrentStore()` and `StoreFacade::getCurrentStore()` methods with `StoreStorageClient:getStoreNames()`, `StoreStorageClient::findStoreByName()`, or `StoreFacade::getStoreCollection()` in the following applications: * Backoffice * MerchantPortal * Console Commands * Gateway * BackendAPI -2. Update your custom console commands (if any) to meet the following rules: -- `Store(Facade|Client)::getCurrentStore()` should never be used in the code that console command executes. -- All store aware commands should implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for specific store if store parameter is provided, or for all the stores in the region otherwise. +2. If you have custom console commands, update them to meet the following rules: +- `Store(Facade|Client)::getCurrentStore()` isn't used in the code a console command executes. +- All store-aware commands implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for a specific store if a store parameter is provided; if not provided, actions are executed for all the stores in the region. - It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. 3. Be aware that after enabling Dynamic Multistore mode, your basic domain structure will change from store to region for all the applications(Example https://yves.de.mysprykershop.com => https://yves.eu.mysprykershop.com), make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. 4. The Dynamic Store feature itself does not require any database changes, in case you've already migrated to the latest demoshop version. From b98c3535c05a4daa6d21a85b3cfe51179ce3533e Mon Sep 17 00:00:00 2001 From: Andrii Tserkovnyi Date: Thu, 19 Dec 2024 15:46:03 +0200 Subject: [PATCH 09/14] Update enable-dynamic-multistore.md --- .../202410.0/enable-dynamic-multistore.md | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md index 04909479190..bd6701d0c5c 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -19,18 +19,19 @@ To avoid unexpected downtime and data loss, perform and test *all* of the follow * Gateway * BackendAPI -2. If you have custom console commands, update them to meet the following rules: -- `Store(Facade|Client)::getCurrentStore()` isn't used in the code a console command executes. -- All store-aware commands implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for a specific store if a store parameter is provided; if not provided, actions are executed for all the stores in the region. -- It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. -3. Be aware that after enabling Dynamic Multistore mode, your basic domain structure will change from store to region for all the applications(Example https://yves.de.mysprykershop.com => https://yves.eu.mysprykershop.com), make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. +2. Update custom console commands to meet the following rules: + - `Store(Facade|Client)::getCurrentStore()` isn't used in the code a console command executes. + - All store-aware commands implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for a specific store if a store parameter is provided; if not provided, actions are executed for all the stores in the region. + - Optional: We recommend using the `--store` parameter instead of `APPLICATION_STORE` env variable; both methods are supported. + +3. After enabling Dynamic Multistore, the basic domain structure will change from store to region for all the applications. For example, `https://yves.de.mysprykershop.com` will change to `https://yves.eu.mysprykershop.com`. To prevent negative SEO effects, set up the needed redirects. 4. The Dynamic Store feature itself does not require any database changes, in case you've already migrated to the latest demoshop version. -5. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: - - During the migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. +5. Dynamic Multistore changes the structure of RabbitMQ messages. When you're ready for the migration, wait for all the remaining messages in the queue to be processed. When the queue is empty, enable the maintenance mode. + (Expected downtime is limited to the deployment time, normally it takes less than 1hr) -6. Update AWS deployment files to Dynamic Multistore mode, using the example: -- Environment variable section +6. Update AWS deployment files to Dynamic Multistore mode using the example: + +Original environment variables section: ```yaml SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' SPRYKER_HOOK_AFTER_DEPLOY: 'true' @@ -40,7 +41,7 @@ SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} ``` -should be changed to: +Updated environment variables section: ```yaml SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' @@ -50,7 +51,8 @@ SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi - SPRYKER_DYNAMIC_STORE_MODE: true SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} ``` -- Regions section + +Original regions section: ```yaml regions: stores: @@ -75,7 +77,8 @@ regions: session: namespace: 4 ``` -should be changed to: + +Updated regions section: ```yaml regions: From ff02a18b87feb027ae8a82b68e54beebf9ec47ae Mon Sep 17 00:00:00 2001 From: Andrii Tserkovnyi Date: Fri, 20 Dec 2024 13:51:47 +0200 Subject: [PATCH 10/14] dynamic-multistore links --- .../spryker-marketplace/marketplace-storefront.md | 2 +- ...customization-example-b2b-product-details-page.md | 2 +- ...customization-example-b2c-product-details-page.md | 2 +- ...customization-example-b2b-product-details-page.md | 2 +- ...customization-example-b2c-product-details-page.md | 2 +- ...customization-example-b2b-product-details-page.md | 2 +- ...customization-example-b2c-product-details-page.md | 2 +- .../glue-api-add-push-notification-subscriptions.md | 6 +++--- .../glue-api-add-push-notification-providers.md | 4 ++-- .../glue-api-delete-push-notification-providers.md | 2 +- .../glue-api-retrieve-push-notification-providers.md | 12 ++++++------ .../glue-api-update-push-notification-providers.md | 4 ++-- .../glue-api-add-push-notification-subscriptions.md | 6 +++--- .../glue-api-add-push-notification-providers.md | 4 ++-- .../glue-api-delete-push-notification-providers.md | 2 +- .../glue-api-retrieve-push-notification-providers.md | 12 ++++++------ .../glue-api-update-push-notification-providers.md | 4 ++-- .../glue-api-add-push-notification-subscriptions.md | 6 +++--- .../glue-api-add-push-notification-providers.md | 4 ++-- .../glue-api-delete-push-notification-providers.md | 2 +- .../glue-api-retrieve-push-notification-providers.md | 12 ++++++------ .../glue-api-update-push-notification-providers.md | 4 ++-- .../202311.0/glue-api-retrieve-related-products.md | 6 +++--- .../202404.0/glue-api-retrieve-related-products.md | 6 +++--- .../202410.0/glue-api-retrieve-related-products.md | 6 +++--- 25 files changed, 58 insertions(+), 58 deletions(-) diff --git a/docs/about/all/spryker-marketplace/marketplace-storefront.md b/docs/about/all/spryker-marketplace/marketplace-storefront.md index 2c1e532d8e4..0c859e37e42 100644 --- a/docs/about/all/spryker-marketplace/marketplace-storefront.md +++ b/docs/about/all/spryker-marketplace/marketplace-storefront.md @@ -123,7 +123,7 @@ On the **Merchant Profile** page, customers can find the following merchant-spec Customers can access only the profile pages of [active](/docs/pbc/all/merchant-management/{{site.version}}/marketplace/marketplace-merchant-feature-overview/marketplace-merchant-feature-overview.html#active-merchants) merchants. -For an example, see the [Spryker merchant profile](https://www.de.b2c-marketplace.demo-spryker.com/en/merchant/spryker) in our Marketplace Demo Shop. +For an example, see the [Spryker merchant profile](https://www.b2c-marketplace-eu.demo-spryker.com/en/merchant/spryker) in our Marketplace Demo Shop. ## Read next diff --git a/docs/dg/dev/frontend-development/202311.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md b/docs/dg/dev/frontend-development/202311.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md index 1e9b73f5579..798172c04d0 100644 --- a/docs/dg/dev/frontend-development/202311.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md +++ b/docs/dg/dev/frontend-development/202311.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md @@ -17,7 +17,7 @@ related: In Spryker, front-end elements have dedicated SCSS styles. To show you how to customize the Spryker front end, we broke down the *Product Details* page from our [B2B Demo Shop](/docs/about/all/b2b-suite.html#b2b-demo-shop) into separate elements with their respective style files. To customize a particular element, you adjust the code in the respective style file. -You can see the [full version of this page](https://www.de.b2b.demo-spryker.com/en/soennecken-permanentmarker-4mm-rundspitze-M22663) in our B2B Demo Shop. +You can see the [full version of this page](https://www.b2b-eu.demo-spryker.com/en/soennecken-permanentmarker-4mm-rundspitze-M22663) in our B2B Demo Shop. ![B2B-1](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Development+Guide/Front-End/Yves/Atomic+Frontend/%D0%A1ustomization+example+-+B2B+Product+Details+page/b2b-1.png) diff --git a/docs/dg/dev/frontend-development/202311.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md b/docs/dg/dev/frontend-development/202311.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md index 490123e9d58..b0b218e2a4d 100644 --- a/docs/dg/dev/frontend-development/202311.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md +++ b/docs/dg/dev/frontend-development/202311.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md @@ -17,7 +17,7 @@ related: In Spryker, front-end elements have dedicated SCSS styles. To show you how to customize the Spryker front end, we broke down the *Product Details* page from our [B2C Demo Shop](/docs/about/all/b2c-suite.html#b2c-demo-shop) into separate elements with their respective style files. To customize a particular element, you adjust the code in the respective style file. -You can see the [full version of this page](https://www.de.b2c.demo-spryker.com/en/acer-aspire-s7-134) in our B2C Demo Shop. +You can see the [full version of this page](https://www.b2c-eu.demo-spryker.com/en/acer-aspire-s7-134) in our B2C Demo Shop. ![B2C-1](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Development+Guide/Front-End/Yves/Atomic+Frontend/%D0%A1ustomization+example+-+B2C+Product+Details+page/b2c-1.png) diff --git a/docs/dg/dev/frontend-development/202404.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md b/docs/dg/dev/frontend-development/202404.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md index 8c0d4d0c76d..eb3ab34fd21 100644 --- a/docs/dg/dev/frontend-development/202404.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md +++ b/docs/dg/dev/frontend-development/202404.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md @@ -17,7 +17,7 @@ related: In Spryker, front-end elements have dedicated SCSS styles. To show you how to customize the Spryker front end, we broke down the *Product Details* page from our [B2B Demo Shop](/docs/about/all/b2b-suite.html#b2b-demo-shop) into separate elements with their respective style files. To customize a particular element, you adjust the code in the respective style file. -You can see the [full version of this page](https://www.de.b2b.demo-spryker.com/en/soennecken-permanentmarker-4mm-rundspitze-M22663) in our B2B Demo Shop. +You can see the [full version of this page](https://www.b2b-eu.demo-spryker.com/en/soennecken-permanentmarker-4mm-rundspitze-M22663) in our B2B Demo Shop. ![B2B-1](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Development+Guide/Front-End/Yves/Atomic+Frontend/%D0%A1ustomization+example+-+B2B+Product+Details+page/b2b-1.png) diff --git a/docs/dg/dev/frontend-development/202404.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md b/docs/dg/dev/frontend-development/202404.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md index bfd54e8b486..4a1e4e50f95 100644 --- a/docs/dg/dev/frontend-development/202404.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md +++ b/docs/dg/dev/frontend-development/202404.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md @@ -17,7 +17,7 @@ related: In Spryker, front-end elements have dedicated SCSS styles. To show you how to customize the Spryker front end, we broke down the *Product Details* page from our [B2C Demo Shop](/docs/about/all/b2c-suite.html#b2c-demo-shop) into separate elements with their respective style files. To customize a particular element, you adjust the code in the respective style file. -You can see the [full version of this page](https://www.de.b2c.demo-spryker.com/en/acer-aspire-s7-134) in our B2C Demo Shop. +You can see the [full version of this page](https://www.b2c-eu.demo-spryker.com/en/acer-aspire-s7-134) in our B2C Demo Shop. ![B2C-1](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Development+Guide/Front-End/Yves/Atomic+Frontend/%D0%A1ustomization+example+-+B2C+Product+Details+page/b2c-1.png) diff --git a/docs/dg/dev/frontend-development/202410.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md b/docs/dg/dev/frontend-development/202410.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md index 8c0d4d0c76d..eb3ab34fd21 100644 --- a/docs/dg/dev/frontend-development/202410.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md +++ b/docs/dg/dev/frontend-development/202410.0/yves/atomic-frontend/frontend-customization-example-b2b-product-details-page.md @@ -17,7 +17,7 @@ related: In Spryker, front-end elements have dedicated SCSS styles. To show you how to customize the Spryker front end, we broke down the *Product Details* page from our [B2B Demo Shop](/docs/about/all/b2b-suite.html#b2b-demo-shop) into separate elements with their respective style files. To customize a particular element, you adjust the code in the respective style file. -You can see the [full version of this page](https://www.de.b2b.demo-spryker.com/en/soennecken-permanentmarker-4mm-rundspitze-M22663) in our B2B Demo Shop. +You can see the [full version of this page](https://www.b2b-eu.demo-spryker.com/en/soennecken-permanentmarker-4mm-rundspitze-M22663) in our B2B Demo Shop. ![B2B-1](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Development+Guide/Front-End/Yves/Atomic+Frontend/%D0%A1ustomization+example+-+B2B+Product+Details+page/b2b-1.png) diff --git a/docs/dg/dev/frontend-development/202410.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md b/docs/dg/dev/frontend-development/202410.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md index bfd54e8b486..4a1e4e50f95 100644 --- a/docs/dg/dev/frontend-development/202410.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md +++ b/docs/dg/dev/frontend-development/202410.0/yves/atomic-frontend/frontend-customization-example-b2c-product-details-page.md @@ -17,7 +17,7 @@ related: In Spryker, front-end elements have dedicated SCSS styles. To show you how to customize the Spryker front end, we broke down the *Product Details* page from our [B2C Demo Shop](/docs/about/all/b2c-suite.html#b2c-demo-shop) into separate elements with their respective style files. To customize a particular element, you adjust the code in the respective style file. -You can see the [full version of this page](https://www.de.b2c.demo-spryker.com/en/acer-aspire-s7-134) in our B2C Demo Shop. +You can see the [full version of this page](https://www.b2c-eu.demo-spryker.com/en/acer-aspire-s7-134) in our B2C Demo Shop. ![B2C-1](https://spryker.s3.eu-central-1.amazonaws.com/docs/Developer+Guide/Development+Guide/Front-End/Yves/Atomic+Frontend/%D0%A1ustomization+example+-+B2C+Product+Details+page/b2c-1.png) diff --git a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md index 16d67f38dee..e635294f4ef 100644 --- a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md +++ b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md @@ -32,7 +32,7 @@ This endpoint lets you subscribe to push notifications using Glue API. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ```json { @@ -45,7 +45,7 @@ Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notifica "identifier": "1" }, "payload": { - "endpoint": "https://push-notifications.de.b2c.demo-spryker.com", + "endpoint": "https://push-notifications.b2c-eu.demo-spryker.com", "publicKey": "3243-f234-3f34-d2334", "authToken": "4o3ijfoi3j4f93j4d7fh4f34jf3d902kfh345g8jf903kdj23uf3" }, @@ -82,7 +82,7 @@ Response sample: "attributes": { "providerName": "web-push-php", "payload": { - "endpoint": "https://push-notifications.de.b2c.demo-spryker.com", + "endpoint": "https://push-notifications.b2c-eu.demo-spryker.com", "publicKey": "3243-f234-3f34-d2334", "authToken": "4o3ijfoi3j4f93j4d7fh4f34jf3d902kfh345g8jf903kdj23uf3" }, diff --git a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md index 71c38fc6ca3..0eb60720a87 100644 --- a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md @@ -32,7 +32,7 @@ This endpoint lets you add push notification providers to further subscribe to n | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ```json { @@ -63,7 +63,7 @@ Response sample: "name": "Fulfillment App provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } } diff --git a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md index 031374adbd9..1ddbc0d05b8 100644 --- a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md @@ -33,7 +33,7 @@ This endpoint lets you delete push notification providers. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `DELETE https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` +Request sample: `DELETE https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` ### Response diff --git a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md index 2005edb02bf..7ea12ff6534 100644 --- a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md @@ -32,7 +32,7 @@ This endpoint lets you retrieve push notification providers to further subscribe | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `GET https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ### Response @@ -50,7 +50,7 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat "name": "web-push-php" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" } }, { @@ -61,12 +61,12 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat "name": "Fulfillment App provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } ], "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers" } } ``` @@ -95,7 +95,7 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat | ------------- | ------------ | -------- | ------------------------------------------------------------ | | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23` +Request sample: `GET https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23` ### Response @@ -110,7 +110,7 @@ Response sample: "name": "web-push-php" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" } } } diff --git a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md index 79a88f22ded..ea6101cb8b1 100644 --- a/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202311.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md @@ -33,7 +33,7 @@ This endpoint lets you update push notification providers. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `PATCH https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` +Request sample: `PATCH https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` ```json { @@ -63,7 +63,7 @@ Response sample: "name": "FA provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } } diff --git a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md index 16d67f38dee..e635294f4ef 100644 --- a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md +++ b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md @@ -32,7 +32,7 @@ This endpoint lets you subscribe to push notifications using Glue API. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ```json { @@ -45,7 +45,7 @@ Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notifica "identifier": "1" }, "payload": { - "endpoint": "https://push-notifications.de.b2c.demo-spryker.com", + "endpoint": "https://push-notifications.b2c-eu.demo-spryker.com", "publicKey": "3243-f234-3f34-d2334", "authToken": "4o3ijfoi3j4f93j4d7fh4f34jf3d902kfh345g8jf903kdj23uf3" }, @@ -82,7 +82,7 @@ Response sample: "attributes": { "providerName": "web-push-php", "payload": { - "endpoint": "https://push-notifications.de.b2c.demo-spryker.com", + "endpoint": "https://push-notifications.b2c-eu.demo-spryker.com", "publicKey": "3243-f234-3f34-d2334", "authToken": "4o3ijfoi3j4f93j4d7fh4f34jf3d902kfh345g8jf903kdj23uf3" }, diff --git a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md index 71c38fc6ca3..0eb60720a87 100644 --- a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md @@ -32,7 +32,7 @@ This endpoint lets you add push notification providers to further subscribe to n | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ```json { @@ -63,7 +63,7 @@ Response sample: "name": "Fulfillment App provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } } diff --git a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md index 031374adbd9..1ddbc0d05b8 100644 --- a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md @@ -33,7 +33,7 @@ This endpoint lets you delete push notification providers. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `DELETE https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` +Request sample: `DELETE https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` ### Response diff --git a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md index 2005edb02bf..7ea12ff6534 100644 --- a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md @@ -32,7 +32,7 @@ This endpoint lets you retrieve push notification providers to further subscribe | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `GET https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ### Response @@ -50,7 +50,7 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat "name": "web-push-php" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" } }, { @@ -61,12 +61,12 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat "name": "Fulfillment App provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } ], "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers" } } ``` @@ -95,7 +95,7 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat | ------------- | ------------ | -------- | ------------------------------------------------------------ | | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23` +Request sample: `GET https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23` ### Response @@ -110,7 +110,7 @@ Response sample: "name": "web-push-php" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" } } } diff --git a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md index 79a88f22ded..ea6101cb8b1 100644 --- a/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202404.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md @@ -33,7 +33,7 @@ This endpoint lets you update push notification providers. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `PATCH https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` +Request sample: `PATCH https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` ```json { @@ -63,7 +63,7 @@ Response sample: "name": "FA provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } } diff --git a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md index b3565cad582..228c0403373 100644 --- a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md +++ b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/glue-api-add-push-notification-subscriptions.md @@ -32,7 +32,7 @@ This endpoint lets you subscribe to push notifications using Glue API. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ```json { @@ -45,7 +45,7 @@ Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notifica "identifier": "1" }, "payload": { - "endpoint": "https://push-notifications.de.b2c.demo-spryker.com", + "endpoint": "https://push-notifications.b2c-eu.demo-spryker.com", "publicKey": "3243-f234-3f34-d2334", "authToken": "4o3ijfoi3j4f93j4d7fh4f34jf3d902kfh345g8jf903kdj23uf3" }, @@ -82,7 +82,7 @@ Response sample: "attributes": { "providerName": "web-push-php", "payload": { - "endpoint": "https://push-notifications.de.b2c.demo-spryker.com", + "endpoint": "https://push-notifications.b2c-eu.demo-spryker.com", "publicKey": "3243-f234-3f34-d2334", "authToken": "4o3ijfoi3j4f93j4d7fh4f34jf3d902kfh345g8jf903kdj23uf3" }, diff --git a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md index 0c7d8a66e6c..8f6700ecfad 100644 --- a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-add-push-notification-providers.md @@ -32,7 +32,7 @@ This endpoint lets you add push notification providers to further subscribe to n | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `POST https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `POST https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ```json { @@ -63,7 +63,7 @@ Response sample: "name": "Fulfillment App provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } } diff --git a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md index 5d47ed9517c..83f7bc1eee5 100644 --- a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-delete-push-notification-providers.md @@ -33,7 +33,7 @@ This endpoint lets you delete push notification providers. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `DELETE https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` +Request sample: `DELETE https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` ### Response diff --git a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md index 7196c0c86ce..693b938d363 100644 --- a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-retrieve-push-notification-providers.md @@ -32,7 +32,7 @@ This endpoint lets you retrieve push notification providers to further subscribe | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers` +Request sample: `GET https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers` ### Response @@ -50,7 +50,7 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat "name": "web-push-php" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" } }, { @@ -61,12 +61,12 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat "name": "Fulfillment App provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } ], "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers" } } ``` @@ -95,7 +95,7 @@ Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notificat | ------------- | ------------ | -------- | ------------------------------------------------------------ | | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `GET https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23` +Request sample: `GET https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23` ### Response @@ -110,7 +110,7 @@ Response sample: "name": "web-push-php" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/2a304ddf-d51b-514f-bd11-6e818a27fe23" } } } diff --git a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md index 00432077846..23815fa9fe4 100644 --- a/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md +++ b/docs/pbc/all/miscellaneous/202410.0/manage-using-glue-api/manage-push-notification-providers/glue-api-update-push-notification-providers.md @@ -33,7 +33,7 @@ This endpoint lets you update push notification providers. | Authorization | string | ✓ | Alphanumeric string that authorizes the Back Office user to send requests to protected resources. Get it by [authenticating as a Back Office user](/docs/pbc/all/identity-access-management/{{page.version}}/manage-using-glue-api/glue-api-authenticate-as-a-back-office-user.html). | -Request sample: `PATCH https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` +Request sample: `PATCH https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e` ```json { @@ -63,7 +63,7 @@ Response sample: "name": "FA provider" }, "links": { - "self": "https://glue-backend.de.b2c.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" + "self": "https://glue-backend.b2c-eu.demo-spryker.com/push-notification-providers/ffb5875e-00d3-5436-ae67-08b7c9837f3e" } } } diff --git a/docs/pbc/all/product-relationship-management/202311.0/glue-api-retrieve-related-products.md b/docs/pbc/all/product-relationship-management/202311.0/glue-api-retrieve-related-products.md index 3c10f24ddf8..6080d05383a 100644 --- a/docs/pbc/all/product-relationship-management/202311.0/glue-api-retrieve-related-products.md +++ b/docs/pbc/all/product-relationship-management/202311.0/glue-api-retrieve-related-products.md @@ -936,7 +936,7 @@ To get upselling items for all products in a cart of a registered customer, send "url": "/en/acer-liquid-leap-100" }, "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/abstract-products/100" + "self": "https://glue.b2c-eu.demo-spryker.com:80/abstract-products/100" }, "relationships": { "product-labels": { @@ -951,7 +951,7 @@ To get upselling items for all products in a cart of a registered customer, send } ], "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/carts/976af32f-80f6-5f69-878f-4ea549ee0830/up-selling-products?include=product-labels" + "self": "https://glue.b2c-eu.demo-spryker.com:80/carts/976af32f-80f6-5f69-878f-4ea549ee0830/up-selling-products?include=product-labels" }, "included": [ { @@ -964,7 +964,7 @@ To get upselling items for all products in a cart of a registered customer, send "frontEndReference": "highlight" }, "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/product-labels/5" + "self": "https://glue.b2c-eu.demo-spryker.com:80/product-labels/5" } } ] diff --git a/docs/pbc/all/product-relationship-management/202404.0/glue-api-retrieve-related-products.md b/docs/pbc/all/product-relationship-management/202404.0/glue-api-retrieve-related-products.md index 4f7e55d5e8b..2ad32751456 100644 --- a/docs/pbc/all/product-relationship-management/202404.0/glue-api-retrieve-related-products.md +++ b/docs/pbc/all/product-relationship-management/202404.0/glue-api-retrieve-related-products.md @@ -919,7 +919,7 @@ To get upselling items for all products in a cart of a registered customer, send "url": "/en/acer-liquid-leap-100" }, "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/abstract-products/100" + "self": "https://glue.b2c-eu.demo-spryker.com:80/abstract-products/100" }, "relationships": { "product-labels": { @@ -934,7 +934,7 @@ To get upselling items for all products in a cart of a registered customer, send } ], "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/carts/976af32f-80f6-5f69-878f-4ea549ee0830/up-selling-products?include=product-labels" + "self": "https://glue.b2c-eu.demo-spryker.com:80/carts/976af32f-80f6-5f69-878f-4ea549ee0830/up-selling-products?include=product-labels" }, "included": [ { @@ -947,7 +947,7 @@ To get upselling items for all products in a cart of a registered customer, send "frontEndReference": "highlight" }, "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/product-labels/5" + "self": "https://glue.b2c-eu.demo-spryker.com:80/product-labels/5" } } ] diff --git a/docs/pbc/all/product-relationship-management/202410.0/glue-api-retrieve-related-products.md b/docs/pbc/all/product-relationship-management/202410.0/glue-api-retrieve-related-products.md index 4f7e55d5e8b..2ad32751456 100644 --- a/docs/pbc/all/product-relationship-management/202410.0/glue-api-retrieve-related-products.md +++ b/docs/pbc/all/product-relationship-management/202410.0/glue-api-retrieve-related-products.md @@ -919,7 +919,7 @@ To get upselling items for all products in a cart of a registered customer, send "url": "/en/acer-liquid-leap-100" }, "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/abstract-products/100" + "self": "https://glue.b2c-eu.demo-spryker.com:80/abstract-products/100" }, "relationships": { "product-labels": { @@ -934,7 +934,7 @@ To get upselling items for all products in a cart of a registered customer, send } ], "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/carts/976af32f-80f6-5f69-878f-4ea549ee0830/up-selling-products?include=product-labels" + "self": "https://glue.b2c-eu.demo-spryker.com:80/carts/976af32f-80f6-5f69-878f-4ea549ee0830/up-selling-products?include=product-labels" }, "included": [ { @@ -947,7 +947,7 @@ To get upselling items for all products in a cart of a registered customer, send "frontEndReference": "highlight" }, "links": { - "self": "https://glue.de.b2c.demo-spryker.com:80/product-labels/5" + "self": "https://glue.b2c-eu.demo-spryker.com:80/product-labels/5" } } ] From cb6e8d8cc675018b4b76fb39e5b40a4354b9db5b Mon Sep 17 00:00:00 2001 From: Anton Smarovydlo Date: Fri, 20 Dec 2024 15:56:38 +0100 Subject: [PATCH 11/14] FRW-8550 Adjustments after TW review. --- .../install-features/202410.0/enable-dynamic-multistore.md | 2 +- docs/ca/dev/multi-store-setups/multistore-setup-options.md | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md index c99f3e98332..aa76bcdabe5 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -29,7 +29,7 @@ If your project version is below 202307.0, you need to install Dynamic Multistor 5. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: - During the migration we do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. - (Expected downtime is limited to the deployment time, normally it takes less than 1hr) + (Expected server downtime is limited to the deployment time, normally it takes less than 1hr) 6. Update AWS deployment files to Dynamic Multistore mode, using the example: - Environment variable section ```yaml diff --git a/docs/ca/dev/multi-store-setups/multistore-setup-options.md b/docs/ca/dev/multi-store-setups/multistore-setup-options.md index 7f68476de03..338e30f11e0 100644 --- a/docs/ca/dev/multi-store-setups/multistore-setup-options.md +++ b/docs/ca/dev/multi-store-setups/multistore-setup-options.md @@ -98,6 +98,10 @@ The following table provides details on infrastructure for this setup: ### Setup 2: Isolated virtual database +{% info_block warningBox "Mandatory information" %} +In case if Dynamic Multistore feature enabled separate database can be used only per region, not per each store. +{% endinfo_block %} + ![setup-2](https://spryker.s3.eu-central-1.amazonaws.com/docs/cloud/spryker-cloud-commerce-os/multi-store-setups/setup-2.png) This setup has the following characteristics: From 360a558ab07d39be6f2a3ad2fb8abdd5884f04de Mon Sep 17 00:00:00 2001 From: Andrii Tserkovnyi Date: Fri, 20 Dec 2024 18:12:25 +0200 Subject: [PATCH 12/14] tw review --- .../202410.0/enable-dynamic-multistore.md | 40 +++++++++--------- .../202410.0/install-dynamic-multistore.md | 8 ++-- .../dynamic-multistore-feature-overview.md | 41 ++++++++++--------- 3 files changed, 48 insertions(+), 41 deletions(-) diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md index bd6701d0c5c..d2fe3df5b08 100644 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md @@ -90,33 +90,34 @@ regions: namespace: eu_search ``` -7. Run normal deploy for your server pipeline. +7. Run a normal deploy for your server pipeline. {% info_block warningBox "Verification" %} -- Make sure your store is accessible at `https://yves.eu.mysprykershop.com` or `https://backoffice.eu.mysprykershop.com`. +- Make sure your store is available at `https://yves.eu.mysprykershop.com` or `https://backoffice.eu.mysprykershop.com`. - Make sure the store switcher is displayed on the Storefront. - -Congratulations! Now you have Dynamic Multistore feature up and running. {% endinfo_block %} -## Rollback +Your shop is now running in dynamic multistore mode. -### Rollback procedure is opposite, and contains the following steps: +## Disable Dynamic Multistore {% info_block warningBox "Staging environment" %} -Make sure that **all** steps above are performed (and fully tested) on staging before applying it on production setup, to avoid unexpected downtime and data loss. +To avoid unexpected downtime and data loss, perform and test *all* of the following steps in a staging environment first. {% endinfo_block %} -1. Be aware that after disabling Dynamic Multistore mode, your basic domain structure will change from region to store, make sure that it is expected. If external systems are impacted by this - necessary redirects are set, so SEO of your site is not impacted. + + + + +1. After disabling Dynamic Multistore, the basic domain structure will change from region to store for all the applications. To prevent negative SEO effects, set up the needed redirects. 2. Disabling Dynamic Store feature itself does not require any database changes. -3. Dynamic Multistore introduce some changes in RabbitMQ messages structure, so it is **important** that: - - During server migration you do not have unprocessed messages in the queue. Make sure that all messages are processed **before** enabling Maintenance Mode. - - Make sure that `Maintainance Mode` is enabled during migration to make sure that no new messages are added to the queue before the migration is finished. +3. Dynamic Multistore changes the structure of RabbitMQ messages. When you're ready for the migration, wait for all the remaining messages in the queue to be processed. When the queue is empty, enable the maintenance mode. (Expected downtime is limited to the deployment time, normally it takes less than 1hr) -4. Revert changes for you deployment files to Dynamic Multistore OFF mode, -- Environment variable section +4. Revert changes in deploy files to disable dynamic multistore: + +Original environment variables section: ```yaml SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' SPRYKER_HOOK_AFTER_DEPLOY: 'true' @@ -125,7 +126,7 @@ SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi - SPRYKER_DYNAMIC_STORE_MODE: true SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} ``` -should be changed to: +Updated environment variables section: ```yaml SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' SPRYKER_HOOK_AFTER_DEPLOY: 'true' @@ -135,7 +136,7 @@ SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} ``` -- Regions section +Original regions section: ```yaml regions: broker: @@ -145,7 +146,8 @@ regions: search: namespace: eu_search ``` -should be changed to: + +Updated regions section: ```yaml regions: stores: @@ -171,9 +173,9 @@ regions: namespace: 4 ``` -6. Run normal deploy for your server pipeline. +6. Run a normal deploy for your server pipeline. {% info_block warningBox "Verification" %} -- Make sure your store is accessible at `https://yves.de.mysprykershop.com` or `https://backoffice.de.mysprykershop.com`. -- Make sure the store switcher is **not** displayed on the Storefront. +- Make sure your store is available at `https://yves.de.mysprykershop.com` or `https://backoffice.de.mysprykershop.com`. +- Make sure the store switcher is *not* displayed on the Storefront. {% endinfo_block %} diff --git a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md index b0b95162b38..92e1a8077c8 100644 --- a/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md +++ b/_includes/pbc/all/install-features/202410.0/install-dynamic-multistore.md @@ -1531,10 +1531,12 @@ class ShopApplicationDependencyProvider extends SprykerShopApplicationDependency ``` -## Launch and set up environment (locally) +## Launch and set up environment locally + +{% info_block warningBox "" %} + +To enable Dynamic Multistore in a production environment, see [Enable Dynamic Multistore](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.html). -{% info_block warningBox "Project version" %} -For enabling Dynamic Multistore on production environment please read [enabling process]([here](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.html)). {% endinfo_block %} Rebuild the application with assets and activate new endpoints: diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md index 16b47737196..0a8d2840a1f 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md @@ -110,6 +110,8 @@ To avoid manually assigning entities in the Back Office, you can assign them usi ### Environment variable section +DMS off: + ```yaml SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' SPRYKER_HOOK_AFTER_DEPLOY: 'true' @@ -119,7 +121,7 @@ SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} ``` -changed to: +DMS on: ```yaml SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' @@ -132,6 +134,8 @@ SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} ### Regions section +DMS off: + ```yaml regions: stores: @@ -156,7 +160,7 @@ regions: session: namespace: 4 ``` -converted to: +DMS on: ```yaml regions: @@ -171,9 +175,9 @@ regions: ### Applications section -{% info_block infoBox "Info" %} -The same pattern is valid for all applications -{% endinfo_block %} +The following examples the difference for one application. The difference is similar for all the applications. + +DMS off: ```yaml mportal: @@ -194,7 +198,7 @@ The same pattern is valid for all applications namespace: 8 ``` -converted to: +DMS on: ```yaml mportal: @@ -210,34 +214,33 @@ mportal: namespace: 7 ``` -{% info_block infoBox "Verification" %} -Please make sure that you've migrated all the application by the pattern provided above. -{% endinfo_block %} +{% info_block infoBox "" %} + +The domain structure is changed to enable store switching within the same domain. -{% info_block infoBox "Info" %} -The domain structure is changed to have an ability to switch between stores withing one domain. {% endinfo_block %} -## Difference in console commands execution +## Difference in the execution of console commands -In disabled Dynamic Multistore mode, console commands which somehow depends on store, were executed with `APPLICATION_STORE` environment variable, example: +With DMS off, store-aware console commands are executed with the `APPLICATION_STORE` environment variable. Example: ```shell APPLICATION_STORE=DE console search:setup:sources ``` -In Dynamic Multistore mode, all the store aware console commands should be executed with `--store` parameter, example: +With DMS on, all the store-aware console commands are executed with the `--store` parameter. Example: ```shell console search:setup:sources --store=DE ``` -In case if store is not provided as a parameter, the command is executed for all stores within the current region. +If a store isn't provided as a parameter, the command is executed for all stores within a current region. + +### Rules for implementing custom console commands in environments with Dynamic Multistore -For the custom console commands please follow the next rules: -- `Store(Facade|Client)::getCurrentStore()` should never be used in the code that console command executes. -- All store aware commands should implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for specific store if store parameter is provided, or for all the stores in the region otherwise. -- It is recommended to use `--store` parameter instead of `APPLICATION_STORE` env variable, despite the support of env variable still exists. +- `Store(Facade|Client)::getCurrentStore()` must not be used in the code the console command executes. +- All store-aware commands must implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for a specific store if the store parameter is provided; if not provided, actions are executed for all the stores in the region. +- We recommend using the `--store` parameter instead of `APPLICATION_STORE` env variable; both methods are supported. ## How Dynamic Multistore affects a project From 42a20ed601242f1514404ac130e9638851399b64 Mon Sep 17 00:00:00 2001 From: Andrii Tserkovnyi Date: Fri, 20 Dec 2024 18:58:19 +0200 Subject: [PATCH 13/14] tw review --- _data/sidebars/pbc_all_sidebar.yml | 2 - .../202410.0/enable-dynamic-multistore.md | 180 ----------------- .../multistore-setup-options.md | 5 +- .../dynamic-multistore-feature-overview.md | 96 +++++---- .../base-shop/enable-dynamic-multistore.md | 191 +++++++++++++++++- .../202410.0/base-shop/faq.md | 36 ---- 6 files changed, 252 insertions(+), 258 deletions(-) delete mode 100644 _includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md delete mode 100644 docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md diff --git a/_data/sidebars/pbc_all_sidebar.yml b/_data/sidebars/pbc_all_sidebar.yml index 8eba4afc38d..541440a7350 100644 --- a/_data/sidebars/pbc_all_sidebar.yml +++ b/_data/sidebars/pbc_all_sidebar.yml @@ -1249,8 +1249,6 @@ entries: url: /docs/pbc/all/dynamic-multistore/base-shop/add-fields-to-back-office-forms.html - title: Enable / Disable Dynamic Multistore url: /docs/pbc/all/dynamic-multistore/base-shop/enable-dynamic-multistore.html - - title: FAQ Dynamic Multistore - url: /docs/pbc/all/dynamic-multistore/base-shop/faq.html - title: Delete stores url: /docs/pbc/all/dynamic-multistore/base-shop/delete-stores.html - title: Import stores diff --git a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md b/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md deleted file mode 100644 index aaed3ce53d7..00000000000 --- a/_includes/pbc/all/install-features/202410.0/enable-dynamic-multistore.md +++ /dev/null @@ -1,180 +0,0 @@ -This document describes how to enable [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html). - -## Prerequisites - -If your project version is below 202307.0, [Install Dynamic Multistore](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/install-dynamic-multistore.html). - -### Enable Dynamic Multistore - -{% info_block warningBox "Staging environment" %} -To avoid unexpected downtime and data loss, perform and test *all* of the following steps in a staging environment first. -{% endinfo_block %} - - - -1. Replace `StoreClient::getCurrentStore()` and `StoreFacade::getCurrentStore()` methods with `StoreStorageClient:getStoreNames()`, `StoreStorageClient::findStoreByName()`, or `StoreFacade::getStoreCollection()` in the following applications: - * Backoffice - * MerchantPortal - * Console Commands - * Gateway - * BackendAPI - -2. Update custom console commands to meet the following rules: - - `Store(Facade|Client)::getCurrentStore()` isn't used in the code a console command executes. - - All store-aware commands implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for a specific store if a store parameter is provided; if not provided, actions are executed for all the stores in the region. - - Optional: We recommend using the `--store` parameter instead of `APPLICATION_STORE` env variable; both methods are supported. - -3. After enabling Dynamic Multistore, the basic domain structure will change from store to region for all the applications. For example, `https://yves.de.mysprykershop.com` will change to `https://yves.eu.mysprykershop.com`. To prevent negative SEO effects, set up the needed redirects. -4. The Dynamic Store feature itself does not require any database changes, in case you've already migrated to the latest demoshop version. -5. Dynamic Multistore changes the structure of RabbitMQ messages. When you're ready for the migration, wait for all the remaining messages in the queue to be processed. When the queue is empty, enable the maintenance mode. - Expected server downtime is limited to the deployment time, which is usually up to an hour. -6. Update AWS deployment files to Dynamic Multistore mode using the example: - -Original environment variables section: -```yaml -SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' -SPRYKER_HOOK_AFTER_DEPLOY: 'true' -SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' -SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' -SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} -SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} -``` - -Updated environment variables section: - -```yaml -SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' -SPRYKER_HOOK_AFTER_DEPLOY: 'true' -SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' -SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' -SPRYKER_DYNAMIC_STORE_MODE: true -SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} -``` - -Original regions section: -```yaml -regions: - stores: - DE: - services: - broker: - namespace: de_queue - key_value_store: - namespace: 1 - search: - namespace: de_search - session: - namespace: 2 - AT: - services: - broker: - namespace: at_queue - key_value_store: - namespace: 3 - search: - namespace: at_search - session: - namespace: 4 -``` - -Updated regions section: - -```yaml -regions: - broker: - namespace: eu-docker - key_value_store: - namespace: 1 - search: - namespace: eu_search -``` - -7. Run a normal deploy for your server pipeline. - - -{% info_block warningBox "Verification" %} -- Make sure your store is available at `https://yves.eu.mysprykershop.com` or `https://backoffice.eu.mysprykershop.com`. -- Make sure the store switcher is displayed on the Storefront. - -{% endinfo_block %} - -Your shop is now running in dynamic multistore mode. - -## Disable Dynamic Multistore - -{% info_block warningBox "Staging environment" %} -To avoid unexpected downtime and data loss, perform and test *all* of the following steps in a staging environment first. -{% endinfo_block %} - - - - - -1. After disabling Dynamic Multistore, the basic domain structure will change from region to store for all the applications. To prevent negative SEO effects, set up the needed redirects. -2. Disabling Dynamic Store feature itself does not require any database changes. -3. Dynamic Multistore changes the structure of RabbitMQ messages. When you're ready for the migration, wait for all the remaining messages in the queue to be processed. When the queue is empty, enable the maintenance mode. - (Expected downtime is limited to the deployment time, normally it takes less than 1hr) -4. Revert changes in deploy files to disable dynamic multistore: - -Original environment variables section: -```yaml -SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' -SPRYKER_HOOK_AFTER_DEPLOY: 'true' -SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' -SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' -SPRYKER_DYNAMIC_STORE_MODE: true -SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} -``` -Updated environment variables section: -```yaml -SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' -SPRYKER_HOOK_AFTER_DEPLOY: 'true' -SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' -SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' -SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} -SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} -``` - -Original regions section: -```yaml -regions: - broker: - namespace: eu-docker - key_value_store: - namespace: 1 - search: - namespace: eu_search -``` - -Updated regions section: -```yaml -regions: - stores: - DE: - services: - broker: - namespace: de_queue - key_value_store: - namespace: 1 - search: - namespace: de_search - session: - namespace: 2 - AT: - services: - broker: - namespace: at_queue - key_value_store: - namespace: 3 - search: - namespace: at_search - session: - namespace: 4 -``` - -6. Run a normal deploy for your server pipeline. - -{% info_block warningBox "Verification" %} -- Make sure your store is available at `https://yves.de.mysprykershop.com` or `https://backoffice.de.mysprykershop.com`. -- Make sure the store switcher is *not* displayed on the Storefront. -{% endinfo_block %} diff --git a/docs/ca/dev/multi-store-setups/multistore-setup-options.md b/docs/ca/dev/multi-store-setups/multistore-setup-options.md index 1364cb9a0b9..759daef8c6e 100644 --- a/docs/ca/dev/multi-store-setups/multistore-setup-options.md +++ b/docs/ca/dev/multi-store-setups/multistore-setup-options.md @@ -98,8 +98,9 @@ The following table provides details on infrastructure for this setup: ### Setup 2: Isolated virtual database -{% info_block warningBox "Mandatory information" %} -In case if Dynamic Multistore feature enabled separate database can be used only per region, not per each store. + +{% info_block warningBox "" %} +If Dynamic Multistore is enabled, separate databases can be used only per region, not per store. {% endinfo_block %} ![setup-2](https://spryker.s3.eu-central-1.amazonaws.com/docs/cloud/spryker-cloud-commerce-os/multi-store-setups/setup-2.png) diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md index 0a8d2840a1f..f7841174310 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/dynamic-multistore-feature-overview.md @@ -14,7 +14,7 @@ related: link: docs/pbc/all/dynamic-multistore/page.version/marketplace/install-dynamic-multistore-the-marketplace-merchant-portal-core.html --- -The *Dynamic Multistore* feature lets you create and manage multiple stores within the same region in the Back Office. It streamlines the setup and maintenance of distinct stores tailored to various customer segments, regions, or product categories. +*Dynamic Multistore* (DMS) lets you create and manage multiple stores within the same region in the Back Office. It streamlines the setup and maintenance of distinct stores tailored to various customer segments, regions, or product categories. In the Back Office, in the **Administration > Stores**, you can view the list of stores in the current region. The **Stores** page shows all the stores within a specific region. @@ -106,9 +106,58 @@ To avoid manually assigning entities in the Back Office, you can assign them usi ## Differences in modes -## Deployment file difference +This section describes the differences in different parts of application in DMS on and off modes. -### Environment variable section + + +## Differences between applications with and without Dynamic Multistore + +In this example, EU region has DE and AT stores. US region has a US store. Dynamic Multistore introduces the following changes in this setup: + +- URLs for Storefront, Back Office, Merchant Portal, and Glue API contain region instead of store name. For example–the URL of the Back Office is `https://backoffice.eu.mysprykershop.com` instead of `https://backoffice.de.mysprykershop.com`. + +- RabbitMQ virtual hosts contain region instead of store. For example–`eu-docker` instead of `de-docker`. + +![rabbitmq-virtual-hosts-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-non-dms.png) + +![rabbitmq-virtual-hosts-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-dms.png) + +- Jenkins job names contain region instead of store. For example–`EU_queue-worker-start` instead of `DE_queue-worker-start`. + +![jenkins-jobs-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-non-dms.png) + +![jenkins-jobs-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-dms.png) + +- Elasticsearch indexes contain store as a part of the index name for Dynamic Multistore enabled and disabled modes. + +![elasticsearch-indexes-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-non-dms.png) + +![elasticsearch-indexes-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-dms.png) + +- Redis keys contain store as a part of the key name for Dynamic Multistore enabled and disabled modes. + +- When Dynamic Multistore is enabled, customers can switch between available stores for a region. When a customer changes a store, it's set to the `_store` query parameter. Using the query parameter, the store is added to session under the `current_store` key. It's used for fetching store-related data. + +![storefront-store-switcher](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/storefront-store-switcher.png) + + + +### Store context in different applications with Dynamic Multistore + +All the applications work with the several stores within one region with the following differences: +* Back Office and Merchant Portal operate with data from all the stores within a region and don't require a store context. +* Storefront, GlueStorefront, and Glue require a store context and operate within only one provided store. If a store isn't provided, the default one is used. + +### Cloud infrastructure differences + +DMS doesn't affect cloud infrastructure. The only related changes are in the deployment files, which are described in the following sections. + + +### Deployment file differences + +Applacation configurations are defined differently depending on whether DMS is on or off. + +#### Environment variables configuration DMS off: @@ -132,7 +181,7 @@ SPRYKER_DYNAMIC_STORE_MODE: true SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} ``` -### Regions section +#### Regions configuration DMS off: @@ -173,9 +222,9 @@ regions: ``` -### Applications section +#### Applications configuration -The following examples the difference for one application. The difference is similar for all the applications. +The following examples show the difference for the `merchant-portal` application. The difference is similar for all the applications. DMS off: @@ -216,11 +265,11 @@ mportal: {% info_block infoBox "" %} -The domain structure is changed to enable store switching within the same domain. +The domain structure in DMS on mode enables store switching within the same domain. {% endinfo_block %} -## Difference in the execution of console commands +### Differences in the execution of console commands With DMS off, store-aware console commands are executed with the `APPLICATION_STORE` environment variable. Example: @@ -236,41 +285,18 @@ console search:setup:sources --store=DE If a store isn't provided as a parameter, the command is executed for all stores within a current region. -### Rules for implementing custom console commands in environments with Dynamic Multistore +#### Rules for implementing custom console commands in environments with Dynamic Multistore - `Store(Facade|Client)::getCurrentStore()` must not be used in the code the console command executes. - All store-aware commands must implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for a specific store if the store parameter is provided; if not provided, actions are executed for all the stores in the region. - We recommend using the `--store` parameter instead of `APPLICATION_STORE` env variable; both methods are supported. -## How Dynamic Multistore affects a project - -In this example, EU region has DE and AT stores. US region has a US store. Dynamic Multistore introduces the following changes in this setup: - -- URLs for Storefront, Back Office, Merchant Portal, and Glue API contain region instead of store name. For example–the URL of the Back Office is `https://backoffice.eu.mysprykershop.com` instead of `https://backoffice.de.mysprykershop.com`. - -- RabbitMQ virtual hosts contain region instead of store. For example–`eu-docker` instead of `de-docker`. - -![rabbitmq-virtual-hosts-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-non-dms.png) - -![rabbitmq-virtual-hosts-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/rabbitmq-virtual-hosts-dms.png) - -- Jenkins job names contain region instead of store. For example–`EU_queue-worker-start` instead of `DE_queue-worker-start`. - -![jenkins-jobs-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-non-dms.png) - -![jenkins-jobs-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/jenkins-jobs-dms.png) - -- Elasticsearch indexes contain store as a part of the index name for Dynamic Multistore enabled and disabled modes. - -![elasticsearch-indexes-non-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-non-dms.png) -![elasticsearch-indexes-dms](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/elasticsearch-indexes-dms.png) +### Store-specific entities in Data Exchange API -- Redis keys contain store as a part of the key name for Dynamic Multistore enabled and disabled modes. +There're no specific requirements, and the changes you need to make depend on the database structure. These entities should be handled in the same way as any other exposed through Data Exchange API database table. -- When Dynamic Multistore is enabled, customers can switch between available stores for a region. When a customer changes a store, it's set to the `_store` query parameter. Using the query parameter, the store is added to session under the `current_store` key. It's used for fetching store-related data. -![storefront-store-switcher](https://spryker.s3.eu-central-1.amazonaws.com/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.md/storefront-store-switcher.png) ## Data import performance @@ -278,4 +304,4 @@ The number of stores affects data import speed: the more stores you have, the sl ## Limitations -With Dynamic Multistore, the separated setup is only possible with stores belonging to different regions. To learn about setups, see [Multi-store setups](/docs/ca/dev/multi-store-setups/multi-store-setups.html) +With Dynamic Multistore, the separated setup is only possible with stores belonging to different regions. To learn about setups, see [Multi-store setups](/docs/ca/dev/multi-store-setups/multi-store-setups.html). diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.md index bb991fec894..8ac702e1eea 100644 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.md +++ b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/enable-dynamic-multistore.md @@ -1,8 +1,193 @@ --- title: Enable Dynamic Multistore description: Learn how to enable the Dynamic Store feature on the latest codebase -last_updated: Nov 19, 2024 -template: feature-integration-guide-template +last_updated: Dec 19, 2024 +template: howto-guide-template --- -{% include pbc/all/install-features/{{page.version}}/enable-dynamic-multistore.md %} + +This document describes how to enable [Dynamic Multistore](/docs/pbc/all/dynamic-multistore/{{page.version}}/base-shop/dynamic-multistore-feature-overview.html) (DMS). + +## Prerequisites + +If your project version is below 202307.0, [Install Dynamic Multistore](/docs/pbc/all/dynamic-multistore/202410.0/base-shop/install-dynamic-multistore.html). + +### Enable Dynamic Multistore + +{% info_block warningBox "Staging environment" %} +To avoid unexpected downtime and data loss, perform and test *all* of the following steps in a staging environment first. +{% endinfo_block %} + + + +1. Replace `StoreClient::getCurrentStore()` and `StoreFacade::getCurrentStore()` methods with `StoreStorageClient:getStoreNames()`, `StoreStorageClient::findStoreByName()`, or `StoreFacade::getStoreCollection()` in the following: + * Back Office + * Merchant Portal + * Console Commands + * Gateway + * BackendAPI + +2. Update custom console commands to meet the following rules: + - `Store(Facade|Client)::getCurrentStore()` isn't used in the code a console command executes. + - All store-aware commands implement `Spryker\Zed\Kernel\Communication\Console\StoreAwareConsole` and execute actions for a specific store if a store parameter is provided; if not provided, actions are executed for all the stores in the region. + - Optional: We recommend using the `--store` parameter instead of `APPLICATION_STORE` env variable; both methods are supported. + +3. After enabling DMS, the basic domain structure will change from store to region for all the applications. For example, `https://yves.de.mysprykershop.com` will change to `https://yves.eu.mysprykershop.com`. To prevent negative SEO effects, set up the needed redirects. +4. DMS changes the structure of RabbitMQ messages. When you're ready for the migration, wait for all the remaining messages in the queue to be processed. When the queue is empty, enable the maintenance mode. +The downtime associated with the maintenance mode is limited to the deployment time, which usually takes up to an hour. + +5. Update AWS deployment files to DMS mode using the example: + +Original environment variables section: +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' +SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} +SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} +``` + +Updated environment variables section: + +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' +SPRYKER_DYNAMIC_STORE_MODE: true +SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} +``` + +Original regions section: +```yaml +regions: + stores: + DE: + services: + broker: + namespace: de_queue + key_value_store: + namespace: 1 + search: + namespace: de_search + session: + namespace: 2 + AT: + services: + broker: + namespace: at_queue + key_value_store: + namespace: 3 + search: + namespace: at_search + session: + namespace: 4 +``` + +Updated regions section: + +```yaml +regions: + broker: + namespace: eu-docker + key_value_store: + namespace: 1 + search: + namespace: eu_search +``` + +6. Run a normal deploy for your server pipeline. + + +{% info_block warningBox "Verification" %} +- Make sure your store is available at `https://yves.eu.mysprykershop.com` or `https://backoffice.eu.mysprykershop.com`. +- Make sure the store switcher is displayed on the Storefront. + +{% endinfo_block %} + +Your shop is now running in DMS mode. + +### Check if Dynamic Multistore is enabled + +DMS is enabled if at least one of the following applies: +1. Using environment: If the value of `SPRYKER_DYNAMIC_STORE_MODE` environment variable is `true` +2. Using interface: In the Back Office > **Administration** > **Stores**, an **Edit** button is displayed next to each store. + +## Disable Dynamic Multistore + +{% info_block warningBox "Staging environment" %} +To avoid unexpected downtime and data loss, perform and test *all* of the following steps in a staging environment first. +{% endinfo_block %} + + + + + +1. After disabling DMS, the basic domain structure will change from region to store for all the applications. To prevent negative SEO effects, set up the needed redirects. +2. DMS changes the structure of RabbitMQ messages. When you're ready for the migration, wait for all the remaining messages in the queue to be processed. When the queue is empty, enable the maintenance mode. + (Expected downtime is limited to the deployment time, normally it takes less than 1hr) +3. Revert changes in deploy files to disable DMS: + +Original environment variables section: +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r dynamic-store --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive --no-ansi -vvv' +SPRYKER_DYNAMIC_STORE_MODE: true +SPRYKER_YVES_HOST_EU: yves.eu.{{DOMAIN_ZONE}} +``` +Updated environment variables section: +```yaml +SPRYKER_HOOK_BEFORE_DEPLOY: 'vendor/bin/install -r pre-deploy.dynamic-store-off -vvv' +SPRYKER_HOOK_AFTER_DEPLOY: 'true' +SPRYKER_HOOK_INSTALL: 'vendor/bin/install -r production.dynamic-store-off --no-ansi -vvv' +SPRYKER_HOOK_DESTRUCTIVE_INSTALL: 'vendor/bin/install -r destructive.dynamic-store-off --no-ansi -vvv' +SPRYKER_YVES_HOST_DE: de.{{DOMAIN_ZONE}} +SPRYKER_YVES_HOST_AT: at.{{DOMAIN_ZONE}} +``` + +Original regions section: +```yaml +regions: + broker: + namespace: eu-docker + key_value_store: + namespace: 1 + search: + namespace: eu_search +``` + +Updated regions section: +```yaml +regions: + stores: + DE: + services: + broker: + namespace: de_queue + key_value_store: + namespace: 1 + search: + namespace: de_search + session: + namespace: 2 + AT: + services: + broker: + namespace: at_queue + key_value_store: + namespace: 3 + search: + namespace: at_search + session: + namespace: 4 +``` + +6. Run a normal deploy for your server pipeline. + +{% info_block warningBox "Verification" %} +- Make sure your store is available at `https://yves.de.mysprykershop.com` or `https://backoffice.de.mysprykershop.com`. +- Make sure the store switcher is *not* displayed on the Storefront. +{% endinfo_block %} diff --git a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md b/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md deleted file mode 100644 index e64ed78183f..00000000000 --- a/docs/pbc/all/dynamic-multistore/202410.0/base-shop/faq.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Dynamic Multistore FAQ -description: This document contains frequently asked questions for Dynamic Multistore. -past_updated: Nov 1, 2024 -template: howto-guide-template -last_updated: Nov 1, 2024 ---- - -This document contains frequently asked questions about Dynamic Multistore feature. - -## Questions - -### How to check if Dynamic Multistore is enabled on your environment? - -#### Option #1 (On env side) -- Verify the value of `SPRYKER_DYNAMIC_STORE_MODE` environment variable, if it's exists and it equals to `true` then you project operates in Dynamic Multistore mode. -#### Option #2 (On interface side) -- Navigate to - http://backoffice.eu.spryker.local/store-gui/list, verify if `Edit` button is available on each store on the page. - -### What is the difference of how Storefront and GlueStorefront (as well as Glue) vs Backoffice and Merchant Portal works in Dynamic Multistore mode? - -In both cases, the applications works with the several stores within the one region, but: -* Backoffice, MerchantPortal operates with data from all the stores within the specific region without requirement to provide the specific store. -* Storefront and GlueStorefront (as well as Glue) requires store to operate, and operates within only one provided store. (If store is not provided explicitly, the default one is used.) - -[See more details](/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.html). - -### Infrastructure in PaaS: is there anything that needs to be done in PaaS? - -The only difference is in the deployment files. More details that can be found [here](/docs/pbc/all/dynamic-multistore/base-shop/dynamic-multistore-feature-overview.html). - - -### How store-specific entities should be managed in Data Exchange API? - -There are no specific requirements, all depends on the database structure. Should be handled the same way as any other exposed through Data Exchange API database table. \ No newline at end of file From 03ff24847048f4a03728fdd2755c456ca8a14a2c Mon Sep 17 00:00:00 2001 From: Oleksii Bilan Date: Mon, 23 Dec 2024 11:33:35 +0200 Subject: [PATCH 14/14] Update integrate-algolia-personalization.md (#3011) * Update integrate-algolia-personalization.md * Update integrate-algolia-personalization.md --------- Co-authored-by: Stanislav Matveyev --- .../algolia/integrate-algolia-personalization.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/pbc/all/search/202410.0/base-shop/third-party-integrations/algolia/integrate-algolia-personalization.md b/docs/pbc/all/search/202410.0/base-shop/third-party-integrations/algolia/integrate-algolia-personalization.md index 2b927d73485..e5ed18a6dd1 100644 --- a/docs/pbc/all/search/202410.0/base-shop/third-party-integrations/algolia/integrate-algolia-personalization.md +++ b/docs/pbc/all/search/202410.0/base-shop/third-party-integrations/algolia/integrate-algolia-personalization.md @@ -164,7 +164,7 @@ Order Success page cases: | - | - | | Open the **Order Success** page | `PAGE_LOAD` with currency, order total, SKUs, prices, and quantities of purchased products. | -For a full list of available events, see the [traceable-events-algolia readme file](https://github.com/spryker-shop/traceable-event-widget/src/SprykerShop/Yves/TraceableEventWidget/Theme/default/components/molecules/traceable-events-algolia/README.md). +For a full list of available events, see the [traceable-events-algolia readme file](https://github.com/spryker-shop/traceable-event-widget/blob/master/src/SprykerShop/Yves/TraceableEventWidget/Theme/default/components/molecules/traceable-events-algolia/README.md). ### Common issues and solutions @@ -176,7 +176,7 @@ This section common issues to event and solutions. Most solutions involve adding 1. Locate the page template or view that is used for the page with faulty events. 2. On the project level, override the `{% raw %}{% block eventTracker %}{% endraw %}` block in the template. -For details on the event configuration API, see the [traceable-events-orchestrator README](https://github.com/spryker-shop/traceable-event-widget/src/SprykerShop/Yves/TraceableEventWidget/Theme/default/components/molecules/traceable-events-orchestrator/README.md). +For details on the event configuration API, see the [traceable-events-orchestrator README](https://github.com/spryker-shop/traceable-event-widget/blob/master/src/SprykerShop/Yves/TraceableEventWidget/Theme/default/components/molecules/traceable-events-orchestrator/README.md). #### Issue: Event not triggering on user action @@ -352,6 +352,11 @@ To enhance your experience, we use data and analytics to understand how you inte By accepting, you allow us to capture anonymous events for personalization, analysis, and continuous improvement of your experience on our platform. ``` +### Disable user data tracking + +If a user does not consent to data tracking, you must set the `disableUserActionTracking` flag in the cookie to `true` to stop sending user action tracking events. This ensures no user data is sent from the application. + + ## Verify the installation 1. Deploy to a testing environment.