Adrien de Peretti
06f22bb48a
fis(orchestration): Properly handle select all ( #6742 )
...
**What**
Fix select `*` without breaking select none `[]`
2024-03-20 12:09:54 +00:00
Adrien de Peretti
e77a02aca5
feat(): Update transformer middleware and API ( #6647 )
...
**What**
Update all transform middleware to support the new API
- deprecate `defaultRelations`
- deprecate `allowedRelations`
- Add `defaults` and `allowed` in replacement for `defaultFields` and `allowedFields` respectively
- in the `defaults` it is possible to specify a field such as `*variants` in order to be recognized as a relation only without specifying any property
- add support for `remoteQueryConfig` assigned to req like we have for `listConfig` and `retrieveConfig`
- add support to override `allowed|allowedFields` if a previous middleware have set it up on the req.allowed
- The api now accepts `fields` as the only accepted fields to manage the requested props and relations, the `expand` property have been deprecated. New supported symbols have been added in complement of the fields
- `+` (e.g `/store/products?fields=+description`) to specify that description should be added as part of the returned data among the other defined fields
- `-` (e.g `/store/products?fields=-description`) to specify that description should be removed as part of the returned data
- `*` (e.g `/store/products?fields=*variants`) to specify that the variants relations should be added as part of the returned data among the other defined fields without having to specify which property of the variants should be returned. In the `defaults` config of the transform middleware it is also possible to use this symbol
- In the case no symbol is provided, it will replace the default fields and mean that only the specified fields must be returned
About the allowed validation, all fields in the `defaults` configuration must be present in the `allowed` configuration.
In case the `defaults` contains full relation selection (e.g `*product.variants`) it should be present in the `allowed` as `product.variants`. In case in the `defaults` you add `product.variants.id`, it will be allowed if the `allowed` configuration includes either `product.variants.id` as full match or `product.variants` as it means that we allow all properties from `product.variants`
Also, support for `*` selection on the remote query/joiner have been added
**Note**
All v2 end points refactoring can be done separately
2024-03-18 08:37:59 +00:00
Oli Juhl
25d176b851
feat: List shipping options for cart ( #6677 )
2024-03-13 09:08:47 +00:00
Carlos R. L. Rodrigues
4625bd1241
feat(orchestration,modules-sdk): options autoCreateServiceNameAlias ( #6622 )
...
What:
Remote joiner options to register service name declared on joiner configs as alias. Default is true, Remote Query in modules-sdk sets it false.
2024-03-07 21:01:30 +00:00
Carlos R. L. Rodrigues
8a946beb75
Fix(orchestrator): Joiner field alias ( #6602 )
2024-03-06 15:17:11 -03:00
Carlos R. L. Rodrigues
45134e4d11
chore: local workflow proxying methods to pass context ( #6263 )
...
What:
- When calling a module's method inside a Local Workflow the MedusaContext is passed as the last argument to the method if not provided
- Add `requestId` to req
- A couple of fixes on Remote Joiner and the data fetcher for internal services
Why:
- The context used to initialize the workflow has to be shared with all modules. properties like transactionId will be used to emit events and requestId to trace logs for example.
2024-02-01 13:37:26 +00:00
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
Adrien de Peretti
154c9b43bd
feat(medusa, modules-sdk, types, utils): Re work modules loading and remove legacy functions ( #5496 )
2023-11-02 17:59:13 +01:00
Adrien de Peretti
5c77029cb0
fix(orchestration): field alias should represent the isList in the result ( #5449 )
...
* fix(orchestration): field alias should represent the isList in the result
* push last fix
* Create witty-rocks-heal.md
* Update remote-joiner.ts
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com >
---------
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com >
2023-10-23 19:21:07 +02:00
Adrien de Peretti
02fe4d1364
fix(orchestration): ToRemoteJoinerHelper property building ( #5130 )
...
* fix(orchestration): ToRemoteJoinerHelper property building
* update fix
2023-09-19 15:37:17 +02:00
Riqwan Thamir
3d68be2b6b
fix(orchestration,link-modules,pricing,types): fix shippingprofile errror outside of core + change link alias name ( #5025 )
...
* fix(orchestration,link-modules,pricing,types): fix shippingprofile error outside of core + change link alias name
* chore: scope relationships and move condition inside
* chore: remove islist
* chore: fix merge conflict
* chore: reverted serviceName scoping
* chore: change shape to make methodOverride compatible
* chore: added methodOverride to remote query
* chore: revert override
2023-09-13 12:16:00 +02:00
Adrien de Peretti
30863fee52
feat(medusa): List products with Remote Query ( #4969 )
...
**What**
- includes some type fixes in the DAL layer
- List products including their prices and filtered by the sales channel as well as q parameter and category scope and all other filters
- Assign shipping profile
- ordering
- Add missing columns in the product module
- update product module migrations
**Comment**
- In regards to the fields, we can pass whatever we want the module will only return the one that exists (default behavior), but on the other hand, that is not possible for the relations.
**question**
- To simplify usage, should we expose the fields/relations available from the module to simplify building a query for the user and be aware of what the module provides
**todo**
- Add back the support for the user to ask for fields/relations
2023-09-12 15:55:05 +00:00
Adrien de Peretti
107aaa371c
fix(orchestration): Infinite loop by reference update ( #5023 )
...
* fix(orchestration): Infinite loop by reference update
* fix
* handle conflict alias config
* rm field alias
* Create wet-gorillas-laugh.md
2023-09-12 13:24:35 +02:00
Carlos R. L. Rodrigues
0953bdfe84
feat(orchestration): Remote Joiner field aliases ( #5013 )
...
* initial commit
* chore: unit tests and forward arguments
2023-09-12 08:43:25 +02:00
Carlos R. L. Rodrigues
d8649bacaa
chore(modules-sdk,orchestration): to remote joiner query ( #4974 )
...
Helper function to transform js/json object into RemoteJoinerQuery format.
```typescript
toRemoteJoinerQuery({
product: {
fields: ["id", "title"],
__args: {
skip: 0,
},
variants: {
fields: ["id", "title", "handle", "sku"],
shipping_profile: {
profile: {
fields: ["id", "name"],
},
},
},
collections: {
fields: ["id", "title"],
},
},
})
```
outputs:
```
{
alias: "product",
fields: ["id", "title"],
expands: [
{
property: "product.variants",
fields: ["id", "title", "handle", "sku"],
},
{
property: "product.variants.shipping_profile",
},
{
property: "product.variants.shipping_profile.profile",
fields: ["id", "name"],
},
{
property: "product.collections",
fields: ["id", "title"],
},
],
args: [
{
name: "skip",
value: 0,
},
],
};
```
2023-09-10 13:26:50 +00:00
Carlos R. L. Rodrigues
4b0e3fb2a7
feat(medusa,orchestration): Decouple Product in Cart domain ( #4945 )
2023-09-08 17:24:46 +02:00
Adrien de Peretti
86f4ca369f
fix(orchestration): Fix remote joiner filtering fields ( #4970 )
...
* fix(orchestration): Fix remote joiner filtering fields
* cleanup test
2023-09-07 09:10:16 +02:00
Carlos R. L. Rodrigues
a4906d0ac0
chore(medusa,orchestration,link-modules,modules-sdk): internal services as modules ( #4925 )
2023-09-04 11:36:05 -03: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
Carlos R. L. Rodrigues
5a8a889c6d
feat(modules-sdk): Remote Query ( #4463 )
...
* feat: Remote Query
2023-07-19 15:35:36 -03:00
Carlos R. L. Rodrigues
499c3478c9
feat: Remote Joiner ( #4098 )
2023-06-29 15:29:01 +02:00