fix(link-modules): generate graphql type of read only links (#9955)

This commit is contained in:
Carlos R. L. Rodrigues
2024-11-08 07:54:50 -03:00
committed by GitHub
parent 6496789c65
commit 03f4b66b90
35 changed files with 101 additions and 28 deletions

View File

@@ -0,0 +1,7 @@
---
"@medusajs/link-modules": patch
"@medusajs/types": patch
"@medusajs/utils": patch
---
Generate graph schema with readonly links

View File

@@ -67,6 +67,7 @@ medusaIntegrationTestRunner({
extends: [
{
serviceName: "currency",
entity: "Currency",
fieldAlias: {
region: {
path: "region_link.region",
@@ -85,6 +86,7 @@ medusaIntegrationTestRunner({
},
{
serviceName: "region",
entity: "Region",
fieldAlias: {
currency: {
path: "currency_link.currency",
@@ -164,6 +166,7 @@ medusaIntegrationTestRunner({
extends: [
{
serviceName: "product",
entity: "ProductVariant",
fieldAlias: {
region: {
path: "region_link.region",
@@ -182,6 +185,7 @@ medusaIntegrationTestRunner({
},
{
serviceName: "region",
entity: "Region",
fieldAlias: {
product_variant: {
path: "product_variant_link.product_variant",
@@ -266,6 +270,7 @@ medusaIntegrationTestRunner({
extends: [
{
serviceName: "currency",
entity: "Currency",
fieldAlias: {
region: {
path: "region_link.region",
@@ -284,6 +289,7 @@ medusaIntegrationTestRunner({
},
{
serviceName: "region",
entity: "Region",
fieldAlias: {
currency: {
path: "currency_link.currency",
@@ -362,6 +368,7 @@ medusaIntegrationTestRunner({
extends: [
{
serviceName: "currency",
entity: "Currency",
fieldAlias: {
regions: {
path: "region_link.region",
@@ -380,6 +387,7 @@ medusaIntegrationTestRunner({
},
{
serviceName: "region",
entity: "Region",
fieldAlias: {
currency: {
path: "currency_link.currency",

View File

@@ -48,6 +48,7 @@ export interface JoinerServiceConfig {
relationships?: JoinerRelationship[]
extends?: {
serviceName: string
entity?: string
relationship: JoinerRelationship
}[]
/**

View File

@@ -198,6 +198,7 @@ export type ModuleJoinerConfig = Omit<
relationships?: ModuleJoinerRelationship[]
extends?: {
serviceName: string
entity?: string
fieldAlias?: Record<
string,
| string

View File

@@ -388,6 +388,7 @@ ${serviceBObj.module}: {
extends: [
{
serviceName: serviceAObj.module,
entity: serviceAObj.entity,
fieldAlias: buildFieldAlias({
property: serviceBObj.isList ? pluralize(aliasB) : aliasB,
path: aliasB + "_link." + aliasB,
@@ -405,6 +406,7 @@ ${serviceBObj.module}: {
},
{
serviceName: serviceBObj.module,
entity: serviceBObj.entity,
fieldAlias: buildFieldAlias({
property: serviceAObj.isList ? pluralize(aliasA) : aliasA,
path: aliasA + "_link." + aliasA,
@@ -482,6 +484,7 @@ ${serviceBObj.module}: {
extends: [
{
serviceName: serviceAObj.module,
entity: serviceAObj.entity,
fieldAlias: buildFieldAlias(readOnlyLinkOptions?.shortcut),
relationship: {
serviceName: serviceBObj.module,

View File

@@ -40,6 +40,7 @@ export const CartPaymentCollection: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "Cart",
fieldAlias: {
payment_collection: "payment_collection_link.payment_collection",
},
@@ -52,6 +53,7 @@ export const CartPaymentCollection: ModuleJoinerConfig = {
},
{
serviceName: Modules.PAYMENT,
entity: "PaymentCollection",
fieldAlias: {
cart: "cart_link.cart",
},

View File

@@ -40,6 +40,7 @@ export const CartPromotion: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "Cart",
fieldAlias: {
promotions: {
path: "cart_link.promotions",

View File

@@ -52,6 +52,7 @@ export const LocationFulfillmentProvider: ModuleJoinerConfig = {
},
{
serviceName: Modules.FULFILLMENT,
entity: "FulfillmentProvider",
relationship: {
serviceName: LINKS.LocationFulfillmentProvider,
primaryKey: "fulfillment_provider_id",

View File

@@ -57,6 +57,7 @@ export const LocationFulfillmentSet: ModuleJoinerConfig = {
},
{
serviceName: Modules.FULFILLMENT,
entity: "FulfillmentSet",
fieldAlias: {
location: "locations_link.location",
},

View File

@@ -40,6 +40,7 @@ export const OrderCart: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "Order",
fieldAlias: {
cart: "cart_link.cart",
},
@@ -52,6 +53,7 @@ export const OrderCart: ModuleJoinerConfig = {
},
{
serviceName: Modules.CART,
entity: "Cart",
fieldAlias: {
order: "order_link.order",
},

View File

@@ -43,6 +43,7 @@ export const OrderClaimPaymentCollection: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "OrderClaim",
fieldAlias: {
claim_payment_collections: {
path: "claim_payment_collections_link.payment_collection",
@@ -58,6 +59,7 @@ export const OrderClaimPaymentCollection: ModuleJoinerConfig = {
},
{
serviceName: Modules.PAYMENT,
entity: "PaymentCollection",
fieldAlias: {
claim: "order_claim_link.order",
},

View File

@@ -43,6 +43,7 @@ export const OrderExchangePaymentCollection: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "OrderExchange",
fieldAlias: {
exchange_payment_collections: {
path: "exchange_payment_collections_link.payment_collection",
@@ -58,6 +59,7 @@ export const OrderExchangePaymentCollection: ModuleJoinerConfig = {
},
{
serviceName: Modules.PAYMENT,
entity: "PaymentCollection",
fieldAlias: {
exchange: "order_exchange_link.order",
},

View File

@@ -40,6 +40,7 @@ export const OrderFulfillment: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "Order",
fieldAlias: {
fulfillments: {
path: "fulfillment_link.fulfillments",
@@ -56,6 +57,7 @@ export const OrderFulfillment: ModuleJoinerConfig = {
},
{
serviceName: Modules.FULFILLMENT,
entity: "Fulfillment",
fieldAlias: {
order: "order_link.order",
},

View File

@@ -41,6 +41,7 @@ export const OrderPaymentCollection: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "Order",
fieldAlias: {
payment_collections: {
path: "payment_collections_link.payment_collection",
@@ -56,6 +57,7 @@ export const OrderPaymentCollection: ModuleJoinerConfig = {
},
{
serviceName: Modules.PAYMENT,
entity: "PaymentCollection",
fieldAlias: {
order: "order_link.order",
},

View File

@@ -40,8 +40,12 @@ export const OrderPromotion: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "Order",
fieldAlias: {
promotion: "promotion_link.promotion",
promotion: {
path: "promotion_link.promotion",
isList: true,
},
},
relationship: {
serviceName: LINKS.OrderPromotion,
@@ -52,6 +56,7 @@ export const OrderPromotion: ModuleJoinerConfig = {
},
{
serviceName: Modules.PROMOTION,
entity: "Promotion",
relationship: {
serviceName: LINKS.OrderPromotion,
primaryKey: "promotion_id",

View File

@@ -18,7 +18,7 @@ export const ReturnFulfillment: ModuleJoinerConfig = {
relationships: [
{
serviceName: Modules.ORDER,
entity: "Order",
entity: "Return",
primaryKey: "id",
foreignKey: "return_id",
alias: "return",
@@ -40,6 +40,7 @@ export const ReturnFulfillment: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "Return",
fieldAlias: {
return_fulfillments: {
path: "return_fulfillment_link.fulfillments",
@@ -56,6 +57,7 @@ export const ReturnFulfillment: ModuleJoinerConfig = {
},
{
serviceName: Modules.FULFILLMENT,
entity: "Fulfillment",
relationship: {
serviceName: LINKS.OrderFulfillment,
primaryKey: "fulfillment_id",

View File

@@ -42,6 +42,7 @@ export const ProductSalesChannel: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.PRODUCT,
entity: "Product",
fieldAlias: {
sales_channels: {
path: "sales_channels_link.sales_channel",
@@ -58,6 +59,7 @@ export const ProductSalesChannel: ModuleJoinerConfig = {
},
{
serviceName: Modules.SALES_CHANNEL,
entity: "SalesChannel",
relationship: {
serviceName: LINKS.ProductSalesChannel,
primaryKey: "sales_channel_id",

View File

@@ -49,6 +49,7 @@ export const ProductVariantInventoryItem: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.PRODUCT,
entity: "ProductVariant",
fieldAlias: {
inventory: "inventory_items.inventory",
},
@@ -62,6 +63,7 @@ export const ProductVariantInventoryItem: ModuleJoinerConfig = {
},
{
serviceName: Modules.INVENTORY,
entity: "InventoryItem",
fieldAlias: {
variants: {
path: "variant_link.variant",

View File

@@ -41,6 +41,7 @@ export const ProductVariantPriceSet: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.PRODUCT,
entity: "ProductVariant",
fieldAlias: {
price_set: "price_set_link.price_set",
prices: {
@@ -62,6 +63,7 @@ export const ProductVariantPriceSet: ModuleJoinerConfig = {
},
{
serviceName: Modules.PRICING,
entity: "PriceSet",
relationship: {
serviceName: LINKS.ProductVariantPriceSet,
primaryKey: "price_set_id",

View File

@@ -42,6 +42,7 @@ export const PublishableApiKeySalesChannel: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.API_KEY,
entity: "ApiKey",
fieldAlias: {
sales_channels: {
path: "sales_channels_link.sales_channel",
@@ -58,6 +59,7 @@ export const PublishableApiKeySalesChannel: ModuleJoinerConfig = {
},
{
serviceName: Modules.SALES_CHANNEL,
entity: "SalesChannel",
fieldAlias: {
publishable_api_keys: {
path: "api_keys_link.api_key",

View File

@@ -7,6 +7,7 @@ export const CartCustomer: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "Cart",
relationship: {
serviceName: Modules.CUSTOMER,
entity: "Customer",
@@ -20,6 +21,7 @@ export const CartCustomer: ModuleJoinerConfig = {
},
{
serviceName: Modules.CUSTOMER,
entity: "Customer",
relationship: {
serviceName: Modules.CART,
entity: "Cart",

View File

@@ -7,6 +7,7 @@ export const CartProduct: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "LineItem",
relationship: {
serviceName: Modules.PRODUCT,
primaryKey: "id",
@@ -19,6 +20,7 @@ export const CartProduct: ModuleJoinerConfig = {
},
{
serviceName: Modules.CART,
entity: "LineItem",
relationship: {
serviceName: Modules.PRODUCT,
entity: "ProductVariant",

View File

@@ -7,6 +7,7 @@ export const CartRegion: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "Cart",
relationship: {
serviceName: Modules.REGION,
entity: "Region",
@@ -20,6 +21,7 @@ export const CartRegion: ModuleJoinerConfig = {
},
{
serviceName: Modules.REGION,
entity: "Region",
relationship: {
serviceName: Modules.CART,
entity: "Cart",

View File

@@ -7,6 +7,7 @@ export const CartSalesChannel: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "Cart",
relationship: {
serviceName: Modules.SALES_CHANNEL,
entity: "SalesChannel",
@@ -20,6 +21,7 @@ export const CartSalesChannel: ModuleJoinerConfig = {
},
{
serviceName: Modules.SALES_CHANNEL,
entity: "SalesChannel",
relationship: {
serviceName: Modules.CART,
entity: "Cart",

View File

@@ -7,6 +7,7 @@ export const InventoryLevelStockLocation: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.INVENTORY,
entity: "InventoryLevel",
relationship: {
serviceName: Modules.STOCK_LOCATION,
entity: "StockLocation",

View File

@@ -7,6 +7,7 @@ export const LineItemAdjustmentPromotion: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "LineItemAdjustment",
relationship: {
serviceName: Modules.PROMOTION,
entity: "Promotion",

View File

@@ -7,6 +7,7 @@ export const OrderCustomer: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "Order",
relationship: {
serviceName: Modules.CUSTOMER,
entity: "Customer",
@@ -20,6 +21,7 @@ export const OrderCustomer: ModuleJoinerConfig = {
},
{
serviceName: Modules.CUSTOMER,
entity: "Customer",
relationship: {
serviceName: Modules.ORDER,
entity: "Order",

View File

@@ -7,6 +7,7 @@ export const OrderProduct: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "OrderLineItem",
relationship: {
serviceName: Modules.PRODUCT,
entity: "Product",
@@ -20,6 +21,7 @@ export const OrderProduct: ModuleJoinerConfig = {
},
{
serviceName: Modules.ORDER,
entity: "OrderLineItem",
relationship: {
serviceName: Modules.PRODUCT,
entity: "ProductVariant",
@@ -33,6 +35,7 @@ export const OrderProduct: ModuleJoinerConfig = {
},
{
serviceName: Modules.PRODUCT,
entity: "ProductVariant",
relationship: {
serviceName: Modules.ORDER,
entity: "OrderLineItem",

View File

@@ -7,6 +7,7 @@ export const OrderRegion: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "Order",
relationship: {
serviceName: Modules.REGION,
entity: "Region",
@@ -20,6 +21,7 @@ export const OrderRegion: ModuleJoinerConfig = {
},
{
serviceName: Modules.REGION,
entity: "Region",
relationship: {
serviceName: Modules.ORDER,
entity: "Order",

View File

@@ -7,6 +7,7 @@ export const OrderSalesChannel: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.ORDER,
entity: "Order",
relationship: {
serviceName: Modules.SALES_CHANNEL,
entity: "SalesChannel",
@@ -20,6 +21,7 @@ export const OrderSalesChannel: ModuleJoinerConfig = {
},
{
serviceName: Modules.SALES_CHANNEL,
entity: "SalesChannel",
relationship: {
serviceName: Modules.ORDER,
entity: "Order",

View File

@@ -7,6 +7,7 @@ export const StoreCurrencies: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.STORE,
entity: "Store",
relationship: {
serviceName: Modules.CURRENCY,
entity: "Currency",

View File

@@ -38,6 +38,7 @@ export const RegionPaymentProvider: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.REGION,
entity: "Region",
fieldAlias: {
payment_providers: {
path: "payment_provider_link.payment_provider",
@@ -54,6 +55,7 @@ export const RegionPaymentProvider: ModuleJoinerConfig = {
},
{
serviceName: Modules.PAYMENT,
entity: "PaymentProvider",
fieldAlias: {
regions: {
path: "region_link.region",

View File

@@ -40,6 +40,7 @@ export const SalesChannelLocation: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.SALES_CHANNEL,
entity: "SalesChannel",
fieldAlias: {
stock_locations: {
path: "locations_link.location",
@@ -56,6 +57,7 @@ export const SalesChannelLocation: ModuleJoinerConfig = {
},
{
serviceName: Modules.STOCK_LOCATION,
entity: "StockLocation",
fieldAlias: {
sales_channels: {
path: "sales_channels_link.sales_channel",

View File

@@ -41,6 +41,7 @@ export const ShippingOptionPriceSet: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.FULFILLMENT,
entity: "ShippingOption",
fieldAlias: {
prices: {
path: "price_set_link.price_set.prices",
@@ -60,6 +61,7 @@ export const ShippingOptionPriceSet: ModuleJoinerConfig = {
},
{
serviceName: Modules.PRICING,
entity: "PriceSet",
relationship: {
serviceName: LINKS.ShippingOptionPriceSet,
primaryKey: "price_set_id",

View File

@@ -46,11 +46,7 @@ export function generateGraphQLSchema(
)
}
/* const extJoinerConfig = MedusaModule.getJoinerConfig(
extend.relationship.serviceName
)*/
const extendedEntityName =
let extendedEntityName =
extendedModule[extend.serviceName].__joinerConfig.linkableKeys[
extend.relationship.primaryKey
]
@@ -69,11 +65,28 @@ export function generateGraphQLSchema(
let type = extend.relationship.isList ? `[${entityName}]` : entityName
if (joinerConfig?.isReadOnlyLink) {
// TODO: In readonly, the relation ship of the extend should be applied on all entities in the module that have the relationshiop foregin key attribute
/*type = extend.relationship.isList
? `[${extendedEntityName}]`
: extendedEntityName*/
continue
// TODO: In readonly links, the relationship of the extend where entity is undefined has to be applied on all entities in the module that have the relationshiop foreing key attribute (unkown in this context)
if (!extend.entity) {
continue
}
const rel = extend.relationship
const extendedService = MedusaModule.getModuleInstance(rel.serviceName)
const hasGraphqlSchema =
!!extendedService[rel.serviceName].__joinerConfig.schema
const relEntity = rel.entity
? rel.entity
: extendedService[rel.serviceName].__joinerConfig.linkableKeys[
rel.primaryKey
]
if (!relEntity || !hasGraphqlSchema) {
continue
}
type = rel.isList ? `[${relEntity}]` : relEntity!
extendedEntityName = extend.entity
}
/**
@@ -86,22 +99,6 @@ export function generateGraphQLSchema(
? extend.relationship.isList
: config.isList ?? extend.relationship.isList
// const pathSegments = path.split(",").reverse()
/*const relationshipMarkerIndex = pathSegments.findIndex((segment) => {
return !!joinerConfig.relationships!.find(
(relation) => relation.alias === targetEntityAlias
)
})
if (relationshipMarkerIndex === -1) {
return
}*/
/*const relationshipPropertyPath = pathSegments
.slice(0, relationshipMarkerIndex + 1)
.reverse()*/
const targetEntityAlias = path.split(".").pop()
const targetEntityRelation = joinerConfig.relationships?.find(