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
+7
View File
@@ -0,0 +1,7 @@
---
"@medusajs/link-modules": patch
"@medusajs/types": patch
"@medusajs/utils": patch
---
Generate graph schema with readonly links
@@ -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",
+1
View File
@@ -48,6 +48,7 @@ export interface JoinerServiceConfig {
relationships?: JoinerRelationship[]
extends?: {
serviceName: string
entity?: string
relationship: JoinerRelationship
}[]
/**
@@ -198,6 +198,7 @@ export type ModuleJoinerConfig = Omit<
relationships?: ModuleJoinerRelationship[]
extends?: {
serviceName: string
entity?: string
fieldAlias?: Record<
string,
| string
@@ -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,
@@ -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",
},
@@ -40,6 +40,7 @@ export const CartPromotion: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "Cart",
fieldAlias: {
promotions: {
path: "cart_link.promotions",
@@ -52,6 +52,7 @@ export const LocationFulfillmentProvider: ModuleJoinerConfig = {
},
{
serviceName: Modules.FULFILLMENT,
entity: "FulfillmentProvider",
relationship: {
serviceName: LINKS.LocationFulfillmentProvider,
primaryKey: "fulfillment_provider_id",
@@ -57,6 +57,7 @@ export const LocationFulfillmentSet: ModuleJoinerConfig = {
},
{
serviceName: Modules.FULFILLMENT,
entity: "FulfillmentSet",
fieldAlias: {
location: "locations_link.location",
},
@@ -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",
},
@@ -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",
},
@@ -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",
},
@@ -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",
},
@@ -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",
},
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -7,6 +7,7 @@ export const InventoryLevelStockLocation: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.INVENTORY,
entity: "InventoryLevel",
relationship: {
serviceName: Modules.STOCK_LOCATION,
entity: "StockLocation",
@@ -7,6 +7,7 @@ export const LineItemAdjustmentPromotion: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.CART,
entity: "LineItemAdjustment",
relationship: {
serviceName: Modules.PROMOTION,
entity: "Promotion",
@@ -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",
@@ -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",
@@ -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",
@@ -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",
@@ -7,6 +7,7 @@ export const StoreCurrencies: ModuleJoinerConfig = {
extends: [
{
serviceName: Modules.STORE,
entity: "Store",
relationship: {
serviceName: Modules.CURRENCY,
entity: "Currency",
@@ -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",
@@ -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",
@@ -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",
@@ -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(