Frane Polić
76332ca6c1
feat(medusa, link-modules): sales channel <> cart link ( #5459 )
...
* feat: sales channel joiner config
* feat: product sales channel link config, SC list method
* feat: migration
* fix: refactor list SC
* refactor: SC repo api
* chore: changeset
* feat: add dedicated FF
* wip: cart<>sc link and migration
* chore: changeset
* fix: update migration with the cart table constraints
* feat: populate the pivot table
* chore: remove relation from joiner config
* fix: constraint name
* fix: filter out link relations when calling internal services
* feat: product<> sc join entity
* fix: update case
* fix: add FF on in the repository, fix tests
* fix: assign id when FF is on
* fix: target table
* feat: product service - fetch SC with RQ
* feat: admin list products & SC with isolated product domain
* feat: get admin product
* feat: store endpoints
* fix: remove duplicate import
* fix: remove "name" prop
* feat: typeorm entity changes
* feat: pivot table, entity, on cart create changes
* feat: update carts' SC
* feat: cart - getValidatedSalesChannel with RQ
* feat: refactor
* wip: changes to create cart workflow
* fix: remove join table entity due to migrations failing
* fix: product seeder if FF is on
* feat: attach SC handler and test
* fix: env
* feat: workflow compensation, cart service retrieve with RQ
* fix: remote joiner implode map
* chore: update changesets
* fix: remove methods from SC service/repo
* feat: use remote link in handlers
* fix: remove SC service calls
* fix: link params
* fix: migration add constraint to make link upsert pass
* refactor: workflow product handlers to handle remote links
* fix: condition
* fix: use correct method
* fix: build
* wip: update FF
* fix: update FF in the handlers
* chore: migrate to medusav2 FF
* chore: uncomment test
* fix: product factory
* fix: unlinking SC and product
* fix: use module name variable
* refactor: cleanup query definitions
* fix: add constraint
* wip: migrate FF
* fix: comments
* feat: cart entity callbacks, fix tests
* fix: only create SC in test
* wip: services updates, changes to models
* chore: rename prop
* fix: add hook
* fix: address comments
* fix: temp sc filtering
* fix: use RQ to filter by SC
* fix: relations on retrieve
* feat: migration sync data, remove FF
* fix: revert order of queries
* fix: alter migration, relations in service
* fix: revert id
* fix: migrations
* fix: make expand work
* fix: remote link method call
* fix: try making tests work without id in the pivot table
* test: use remote link
* test: relations changes
* fix: preserve channel id column
* fix: seeder and factory
* fix: remove sales_channels from response
* feat: support feature flag arrays
* fix: cover everything with correct FF
* fix: remove verbose
* fix: unit and plugin tests
* chore: comments
* fix: reenable workflow handler, add comments, split cart create workflow tests
* chore: reenable link in the create mehod, update changesets
* fix: address feedback
* fix: revert migration
* fix: change the migration to follow link module
* fix: migration syntax
* fix: merge conflicts
* fix: typo
* feat: remove store sales channel foreign key
* fix: merge migrations
* fix: FF keys
* refactor: cart service
* refactor: FF missing key
* fix: comments
* fix: address PR comments
* fix: new changesets
* fix: revert flag router changes
* chore: refactor `isFeatureEnabled`
---------
Co-authored-by: Carlos R. L. Rodrigues <rodrigolr@gmail.com >
Co-authored-by: Riqwan Thamir <rmthamir@gmail.com >
2023-12-22 13:05:36 +01:00
Carlos R. L. Rodrigues
4d16acf5f0
feat(link-modules,modules-sdk, utils, types, products) - Remote Link and Link modules ( #4695 )
...
What:
- Definition of all Modules links
- `link-modules` package to manage the creation of all pre-defined link or custom ones
```typescript
import { initialize as iniInventory } from "@medusajs/inventory";
import { initialize as iniProduct } from "@medusajs/product";
import {
initialize as iniLinks,
runMigrations as migrateLinks
} from "@medusajs/link-modules";
await Promise.all([iniInventory(), iniProduct()]);
await migrateLinks(); // create tables based on previous loaded modules
await iniLinks(); // load link based on previous loaded modules
await iniLinks(undefined, [
{
serviceName: "product_custom_translation_service_link",
isLink: true,
databaseConfig: {
tableName: "product_transalations",
},
alias: [
{
name: "translations",
},
],
primaryKeys: ["id", "product_id", "translation_id"],
relationships: [
{
serviceName: Modules.PRODUCT,
primaryKey: "id",
foreignKey: "product_id",
alias: "product",
},
{
serviceName: "custom_translation_service",
primaryKey: "id",
foreignKey: "translation_id",
alias: "transalation",
deleteCascade: true,
},
],
extends: [
{
serviceName: Modules.PRODUCT,
relationship: {
serviceName: "product_custom_translation_service_link",
primaryKey: "product_id",
foreignKey: "id",
alias: "translations",
isList: true,
},
},
{
serviceName: "custom_translation_service",
relationship: {
serviceName: "product_custom_translation_service_link",
primaryKey: "product_id",
foreignKey: "id",
alias: "product_link",
},
},
],
},
]); // custom links
```
Remote Link
```typescript
import { RemoteLink, Modules } from "@medusajs/modules-sdk";
// [...] initialize modules and links
const remoteLink = new RemoteLink();
// upsert the relationship
await remoteLink.create({ // one (object) or many (array)
[Modules.PRODUCT]: {
variant_id: "var_abc",
},
[Modules.INVENTORY]: {
inventory_item_id: "iitem_abc",
},
data: { // optional additional fields
required_quantity: 5
}
});
// dismiss (doesn't cascade)
await remoteLink.dismiss({ // one (object) or many (array)
[Modules.PRODUCT]: {
variant_id: "var_abc",
},
[Modules.INVENTORY]: {
inventory_item_id: "iitem_abc",
},
});
// delete
await remoteLink.delete({
// every key is a module
[Modules.PRODUCT]: {
// every key is a linkable field
variant_id: "var_abc", // single or multiple values
},
});
// restore
await remoteLink.restore({
// every key is a module
[Modules.PRODUCT]: {
// every key is a linkable field
variant_id: "var_abc", // single or multiple values
},
});
```
Co-authored-by: Riqwan Thamir <5105988+riqwan@users.noreply.github.com >
2023-08-30 14:31:32 +00:00