Chore/rm main entity concept (#7709)
**What** Update the `MedusaService` class, factory and types to remove the concept of main modules. The idea being that all method will be explicitly named and suffixes to represent the object you are trying to manipulate. This pr also includes various fixes in different modules Co-authored-by: Stevche Radevski <4820812+sradevski@users.noreply.github.com> Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
2895ccfba8
commit
48963f55ef
@@ -1,4 +1,11 @@
|
||||
import { moduleDefinition } from "./module-definition"
|
||||
import { ModuleExports } from "@medusajs/types"
|
||||
import { OrderModuleService } from "@services"
|
||||
|
||||
const service = OrderModuleService
|
||||
|
||||
export const moduleDefinition: ModuleExports = {
|
||||
service,
|
||||
}
|
||||
|
||||
export * from "./models"
|
||||
export * from "./services"
|
||||
|
||||
@@ -1,44 +1,12 @@
|
||||
import { Modules } from "@medusajs/modules-sdk"
|
||||
import { ModuleJoinerConfig } from "@medusajs/types"
|
||||
import { MapToConfig, pluralize } from "@medusajs/utils"
|
||||
import { LineItem, ReturnReason } from "@models"
|
||||
import Order from "./models/order"
|
||||
import {
|
||||
buildEntitiesNameToLinkableKeysMap,
|
||||
defineJoinerConfig,
|
||||
MapToConfig,
|
||||
} from "@medusajs/utils"
|
||||
|
||||
export const LinkableKeys: Record<string, string> = {
|
||||
order_id: Order.name,
|
||||
order_item_id: LineItem.name,
|
||||
return_reason_id: ReturnReason.name,
|
||||
return_reason_value: ReturnReason.name,
|
||||
}
|
||||
// TODO: review configuration
|
||||
export const joinerConfig = defineJoinerConfig(Modules.ORDER)
|
||||
|
||||
const entityLinkableKeysMap: MapToConfig = {}
|
||||
Object.entries(LinkableKeys).forEach(([key, value]) => {
|
||||
entityLinkableKeysMap[value] ??= []
|
||||
entityLinkableKeysMap[value].push({
|
||||
mapTo: key,
|
||||
valueFrom: key.split("_").pop()!,
|
||||
})
|
||||
})
|
||||
|
||||
export const entityNameToLinkableKeysMap: MapToConfig = entityLinkableKeysMap
|
||||
|
||||
export const joinerConfig: ModuleJoinerConfig = {
|
||||
serviceName: Modules.ORDER,
|
||||
primaryKeys: ["id"],
|
||||
linkableKeys: LinkableKeys,
|
||||
alias: [
|
||||
{
|
||||
name: ["order", "orders"],
|
||||
args: {
|
||||
entity: Order.name,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["return_reason", "return_reasons"],
|
||||
args: {
|
||||
entity: ReturnReason.name,
|
||||
methodSuffix: pluralize(ReturnReason.name),
|
||||
},
|
||||
},
|
||||
],
|
||||
} as ModuleJoinerConfig
|
||||
export const entityNameToLinkableKeysMap: MapToConfig =
|
||||
buildEntitiesNameToLinkableKeysMap(joinerConfig.linkableKeys)
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
import { ModuleExports } from "@medusajs/types"
|
||||
import { OrderModuleService } from "@services"
|
||||
|
||||
const service = OrderModuleService
|
||||
|
||||
export const moduleDefinition: ModuleExports = {
|
||||
service,
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { Modules } from "@medusajs/modules-sdk"
|
||||
import { ModulesSdkUtils } from "@medusajs/utils"
|
||||
import * as Models from "@models"
|
||||
import { EOL } from "os"
|
||||
|
||||
const args = process.argv
|
||||
const path = args.pop() as string
|
||||
|
||||
export default (async () => {
|
||||
const { config } = await import("dotenv")
|
||||
config()
|
||||
if (!path) {
|
||||
throw new Error(
|
||||
`filePath is required.${EOL}Example: medusa-order-seed <filePath>`
|
||||
)
|
||||
}
|
||||
|
||||
const run = ModulesSdkUtils.buildSeedScript({
|
||||
moduleName: Modules.ORDER,
|
||||
models: Models,
|
||||
pathToMigrations: __dirname + "/../../migrations",
|
||||
seedHandler: async ({ manager, data }) => {
|
||||
// TODO: Add seed logic
|
||||
},
|
||||
})
|
||||
await run({ path })
|
||||
})()
|
||||
@@ -3,8 +3,8 @@ import {
|
||||
Context,
|
||||
DAL,
|
||||
FindConfig,
|
||||
IOrderModuleService,
|
||||
InternalModuleDeclaration,
|
||||
IOrderModuleService,
|
||||
ModuleJoinerConfig,
|
||||
ModulesSdkTypes,
|
||||
OrderDTO,
|
||||
@@ -16,18 +16,18 @@ import {
|
||||
} from "@medusajs/types"
|
||||
import {
|
||||
BigNumber,
|
||||
createRawPropertiesFromBigNumber,
|
||||
decorateCartTotals,
|
||||
deduplicate,
|
||||
InjectManager,
|
||||
InjectTransactionManager,
|
||||
isObject,
|
||||
isString,
|
||||
MathBN,
|
||||
MedusaContext,
|
||||
MedusaError,
|
||||
ModulesSdkUtils,
|
||||
OrderStatus,
|
||||
createRawPropertiesFromBigNumber,
|
||||
decorateCartTotals,
|
||||
deduplicate,
|
||||
isObject,
|
||||
isString,
|
||||
promiseAll,
|
||||
transformPropertiesToBigNumber,
|
||||
} from "@medusajs/utils"
|
||||
@@ -67,8 +67,8 @@ import {
|
||||
} from "@types"
|
||||
import { entityNameToLinkableKeysMap, joinerConfig } from "../joiner-config"
|
||||
import {
|
||||
ApplyOrderChangeDTO,
|
||||
applyChangesToOrder,
|
||||
ApplyOrderChangeDTO,
|
||||
calculateOrderChange,
|
||||
formatOrder,
|
||||
} from "../utils"
|
||||
@@ -100,6 +100,7 @@ type InjectedDependencies = {
|
||||
}
|
||||
|
||||
const generateMethodForModels = {
|
||||
Order,
|
||||
Address,
|
||||
LineItem,
|
||||
LineItemAdjustment,
|
||||
@@ -120,6 +121,7 @@ const generateMethodForModels = {
|
||||
OrderExchange,
|
||||
}
|
||||
|
||||
// TODO: rm template args here, keep it for later to not collide with carlos work at least as little as possible
|
||||
export default class OrderModuleService<
|
||||
TOrder extends Order = Order,
|
||||
TAddress extends Address = Address,
|
||||
@@ -141,31 +143,29 @@ export default class OrderModuleService<
|
||||
TClaim extends OrderClaim = OrderClaim,
|
||||
TExchange extends OrderExchange = OrderExchange
|
||||
>
|
||||
extends ModulesSdkUtils.MedusaService<
|
||||
OrderTypes.OrderDTO,
|
||||
{
|
||||
Address: { dto: OrderTypes.OrderAddressDTO }
|
||||
LineItem: { dto: OrderTypes.OrderLineItemDTO }
|
||||
LineItemAdjustment: { dto: OrderTypes.OrderLineItemAdjustmentDTO }
|
||||
LineItemTaxLine: { dto: OrderTypes.OrderLineItemTaxLineDTO }
|
||||
ShippingMethod: { dto: OrderTypes.OrderShippingMethodDTO }
|
||||
ShippingMethodAdjustment: {
|
||||
dto: OrderTypes.OrderShippingMethodAdjustmentDTO
|
||||
}
|
||||
ShippingMethodTaxLine: { dto: OrderTypes.OrderShippingMethodTaxLineDTO }
|
||||
OrderChange: { dto: OrderTypes.OrderChangeDTO }
|
||||
OrderChangeAction: { dto: OrderTypes.OrderChangeActionDTO }
|
||||
OrderItem: { dto: OrderTypes.OrderItemDTO }
|
||||
OrderShippingMethod: { dto: OrderShippingMethod }
|
||||
ReturnReason: { dto: OrderTypes.OrderReturnReasonDTO }
|
||||
OrderSummary: { dto: OrderTypes.OrderSummaryDTO }
|
||||
Transaction: { dto: OrderTypes.OrderTransactionDTO }
|
||||
Return: { dto: any } // TODO: Add return dto
|
||||
ReturnItem: { dto: any } // TODO: Add return item dto
|
||||
OrderClaim: { dto: any } // TODO: Add claim dto
|
||||
OrderExchange: { dto: any } // TODO: Add exchange dto
|
||||
extends ModulesSdkUtils.MedusaService<{
|
||||
Order: { dto: OrderTypes.OrderDTO }
|
||||
Address: { dto: OrderTypes.OrderAddressDTO }
|
||||
LineItem: { dto: OrderTypes.OrderLineItemDTO }
|
||||
LineItemAdjustment: { dto: OrderTypes.OrderLineItemAdjustmentDTO }
|
||||
LineItemTaxLine: { dto: OrderTypes.OrderLineItemTaxLineDTO }
|
||||
ShippingMethod: { dto: OrderTypes.OrderShippingMethodDTO }
|
||||
ShippingMethodAdjustment: {
|
||||
dto: OrderTypes.OrderShippingMethodAdjustmentDTO
|
||||
}
|
||||
>(Order, generateMethodForModels, entityNameToLinkableKeysMap)
|
||||
ShippingMethodTaxLine: { dto: OrderTypes.OrderShippingMethodTaxLineDTO }
|
||||
OrderChange: { dto: OrderTypes.OrderChangeDTO }
|
||||
OrderChangeAction: { dto: OrderTypes.OrderChangeActionDTO }
|
||||
OrderItem: { dto: OrderTypes.OrderItemDTO }
|
||||
OrderShippingMethod: { dto: OrderShippingMethod }
|
||||
ReturnReason: { dto: OrderTypes.OrderReturnReasonDTO }
|
||||
OrderSummary: { dto: OrderTypes.OrderSummaryDTO }
|
||||
Transaction: { dto: OrderTypes.OrderTransactionDTO }
|
||||
Return: { dto: any } // TODO: Add return dto
|
||||
ReturnItem: { dto: any } // TODO: Add return item dto
|
||||
OrderClaim: { dto: any } // TODO: Add claim dto
|
||||
OrderExchange: { dto: any } // TODO: Add exchange dto
|
||||
}>(generateMethodForModels, entityNameToLinkableKeysMap)
|
||||
implements IOrderModuleService
|
||||
{
|
||||
protected baseRepository_: DAL.RepositoryService
|
||||
@@ -303,7 +303,8 @@ export default class OrderModuleService<
|
||||
})
|
||||
}
|
||||
|
||||
async retrieve(
|
||||
// @ts-expect-error
|
||||
async retrieveOrder(
|
||||
id: string,
|
||||
config?: FindConfig<any> | undefined,
|
||||
@MedusaContext() sharedContext?: Context | undefined
|
||||
@@ -311,7 +312,7 @@ export default class OrderModuleService<
|
||||
config ??= {}
|
||||
const includeTotals = this.shouldIncludeTotals(config)
|
||||
|
||||
const order = await super.retrieve(id, config, sharedContext)
|
||||
const order = await super.retrieveOrder(id, config, sharedContext)
|
||||
|
||||
return formatOrder(order, {
|
||||
entity: Order,
|
||||
@@ -319,7 +320,8 @@ export default class OrderModuleService<
|
||||
}) as OrderTypes.OrderDTO
|
||||
}
|
||||
|
||||
async list(
|
||||
// @ts-expect-error
|
||||
async listOrders(
|
||||
filters?: any,
|
||||
config?: FindConfig<any> | undefined,
|
||||
@MedusaContext() sharedContext?: Context | undefined
|
||||
@@ -327,7 +329,7 @@ export default class OrderModuleService<
|
||||
config ??= {}
|
||||
const includeTotals = this.shouldIncludeTotals(config)
|
||||
|
||||
const orders = await super.list(filters, config, sharedContext)
|
||||
const orders = await super.listOrders(filters, config, sharedContext)
|
||||
|
||||
return formatOrder(orders, {
|
||||
entity: Order,
|
||||
@@ -335,7 +337,8 @@ export default class OrderModuleService<
|
||||
}) as OrderTypes.OrderDTO[]
|
||||
}
|
||||
|
||||
async listAndCount(
|
||||
// @ts-expect-error
|
||||
async listAndCountOrders(
|
||||
filters?: any,
|
||||
config?: FindConfig<any> | undefined,
|
||||
@MedusaContext() sharedContext?: Context | undefined
|
||||
@@ -343,7 +346,7 @@ export default class OrderModuleService<
|
||||
config ??= {}
|
||||
const includeTotals = this.shouldIncludeTotals(config)
|
||||
|
||||
const [orders, count] = await super.listAndCount(
|
||||
const [orders, count] = await super.listAndCountOrders(
|
||||
filters,
|
||||
config,
|
||||
sharedContext
|
||||
@@ -548,26 +551,27 @@ export default class OrderModuleService<
|
||||
]
|
||||
}
|
||||
|
||||
async create(
|
||||
// @ts-expect-error
|
||||
async createOrders(
|
||||
data: OrderTypes.CreateOrderDTO[],
|
||||
sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderDTO[]>
|
||||
|
||||
async create(
|
||||
async createOrders(
|
||||
data: OrderTypes.CreateOrderDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderDTO>
|
||||
|
||||
@InjectManager("baseRepository_")
|
||||
async create(
|
||||
async createOrders(
|
||||
data: OrderTypes.CreateOrderDTO[] | OrderTypes.CreateOrderDTO,
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<OrderTypes.OrderDTO[] | OrderTypes.OrderDTO> {
|
||||
const input = Array.isArray(data) ? data : [data]
|
||||
|
||||
const orders = await this.create_(input, sharedContext)
|
||||
const orders = await this.createOrders_(input, sharedContext)
|
||||
|
||||
const result = await this.list(
|
||||
const result = await this.listOrders(
|
||||
{
|
||||
id: orders.map((p) => p!.id),
|
||||
},
|
||||
@@ -594,7 +598,7 @@ export default class OrderModuleService<
|
||||
}
|
||||
|
||||
@InjectTransactionManager("baseRepository_")
|
||||
protected async create_(
|
||||
protected async createOrders_(
|
||||
data: OrderTypes.CreateOrderDTO[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
) {
|
||||
@@ -650,22 +654,23 @@ export default class OrderModuleService<
|
||||
return createdOrders
|
||||
}
|
||||
|
||||
async update(
|
||||
// @ts-expect-error
|
||||
async updateOrders(
|
||||
data: OrderTypes.UpdateOrderDTO[]
|
||||
): Promise<OrderTypes.OrderDTO[]>
|
||||
async update(
|
||||
async updateOrders(
|
||||
orderId: string,
|
||||
data: OrderTypes.UpdateOrderDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderDTO>
|
||||
async update(
|
||||
async updateOrders(
|
||||
selector: Partial<OrderTypes.FilterableOrderProps>,
|
||||
data: OrderTypes.UpdateOrderDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderDTO[]>
|
||||
|
||||
@InjectManager("baseRepository_")
|
||||
async update(
|
||||
async updateOrders(
|
||||
dataOrIdOrSelector:
|
||||
| OrderTypes.UpdateOrderDTO[]
|
||||
| string
|
||||
@@ -673,7 +678,11 @@ export default class OrderModuleService<
|
||||
data?: OrderTypes.UpdateOrderDTO,
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<OrderTypes.OrderDTO[] | OrderTypes.OrderDTO> {
|
||||
const result = await this.update_(dataOrIdOrSelector, data, sharedContext)
|
||||
const result = await this.updateOrders_(
|
||||
dataOrIdOrSelector,
|
||||
data,
|
||||
sharedContext
|
||||
)
|
||||
|
||||
const serializedResult = await this.baseRepository_.serialize<
|
||||
OrderTypes.OrderDTO[]
|
||||
@@ -685,7 +694,7 @@ export default class OrderModuleService<
|
||||
}
|
||||
|
||||
@InjectTransactionManager("baseRepository_")
|
||||
protected async update_(
|
||||
protected async updateOrders_(
|
||||
dataOrIdOrSelector:
|
||||
| OrderTypes.UpdateOrderDTO[]
|
||||
| string
|
||||
@@ -759,7 +768,7 @@ export default class OrderModuleService<
|
||||
: [orderIdOrData]
|
||||
|
||||
const allOrderIds = data.map((dt) => dt.order_id)
|
||||
const order = await this.list(
|
||||
const order = await this.listOrders(
|
||||
{ id: allOrderIds },
|
||||
{ select: ["id", "version"] },
|
||||
sharedContext
|
||||
@@ -793,7 +802,7 @@ export default class OrderModuleService<
|
||||
items: OrderTypes.CreateOrderLineItemDTO[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<LineItem[]> {
|
||||
const order = await this.retrieve(
|
||||
const order = await this.retrieveOrder(
|
||||
orderId,
|
||||
{ select: ["id", "version"] },
|
||||
sharedContext
|
||||
@@ -1165,7 +1174,7 @@ export default class OrderModuleService<
|
||||
: [orderIdOrData]
|
||||
|
||||
const allOrderIds = data.map((dt) => dt.order_id)
|
||||
const order = await this.list(
|
||||
const order = await this.listOrders(
|
||||
{ id: allOrderIds },
|
||||
{ select: ["id", "version"] },
|
||||
sharedContext
|
||||
@@ -1199,7 +1208,7 @@ export default class OrderModuleService<
|
||||
data: CreateOrderShippingMethodDTO[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<ShippingMethod[]> {
|
||||
const order = await this.retrieve(
|
||||
const order = await this.retrieveOrder(
|
||||
orderId,
|
||||
{ select: ["id", "version"] },
|
||||
sharedContext
|
||||
@@ -1257,7 +1266,7 @@ export default class OrderModuleService<
|
||||
): Promise<OrderTypes.OrderLineItemAdjustmentDTO[]> {
|
||||
let addedAdjustments: LineItemAdjustment[] = []
|
||||
if (isString(orderIdOrData)) {
|
||||
const order = await this.retrieve(
|
||||
const order = await this.retrieveOrder(
|
||||
orderIdOrData,
|
||||
{ select: ["id"], relations: ["items.item"] },
|
||||
sharedContext
|
||||
@@ -1305,7 +1314,7 @@ export default class OrderModuleService<
|
||||
)[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<OrderTypes.OrderLineItemAdjustmentDTO[]> {
|
||||
const order = await this.retrieve(
|
||||
const order = await this.retrieveOrder(
|
||||
orderId,
|
||||
{ select: ["id"], relations: ["items.item.adjustments"] },
|
||||
sharedContext
|
||||
@@ -1356,7 +1365,7 @@ export default class OrderModuleService<
|
||||
)[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<OrderTypes.OrderShippingMethodAdjustmentDTO[]> {
|
||||
const order = await this.retrieve(
|
||||
const order = await this.retrieveOrder(
|
||||
orderId,
|
||||
{ select: ["id"], relations: ["shipping_methods.adjustments"] },
|
||||
sharedContext
|
||||
@@ -1430,7 +1439,7 @@ export default class OrderModuleService<
|
||||
> {
|
||||
let addedAdjustments: ShippingMethodAdjustment[] = []
|
||||
if (isString(orderIdOrData)) {
|
||||
const order = await this.retrieve(
|
||||
const order = await this.retrieveOrder(
|
||||
orderIdOrData,
|
||||
{ select: ["id"], relations: ["shipping_methods"] },
|
||||
sharedContext
|
||||
@@ -1547,7 +1556,7 @@ export default class OrderModuleService<
|
||||
)[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<OrderTypes.OrderLineItemTaxLineDTO[]> {
|
||||
const order = await this.retrieve(
|
||||
const order = await this.retrieveOrder(
|
||||
orderId,
|
||||
{ select: ["id"], relations: ["items.item.tax_lines"] },
|
||||
sharedContext
|
||||
@@ -1657,7 +1666,7 @@ export default class OrderModuleService<
|
||||
)[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<OrderTypes.OrderShippingMethodTaxLineDTO[]> {
|
||||
const order = await this.retrieve(
|
||||
const order = await this.retrieveOrder(
|
||||
orderId,
|
||||
{ select: ["id"], relations: ["shipping_methods.tax_lines"] },
|
||||
sharedContext
|
||||
@@ -1739,7 +1748,7 @@ export default class OrderModuleService<
|
||||
dataMap[change.order_id] = change
|
||||
}
|
||||
|
||||
const orders = await this.list(
|
||||
const orders = await this.listOrders(
|
||||
{
|
||||
id: orderIds,
|
||||
},
|
||||
@@ -1925,7 +1934,7 @@ export default class OrderModuleService<
|
||||
): Promise<OrderTypes.OrderChangeReturn> {
|
||||
const orderIds = Array.isArray(orderId) ? orderId : [orderId]
|
||||
|
||||
const orders = await this.list(
|
||||
const orders = await this.listOrders(
|
||||
{ id: orderIds },
|
||||
{
|
||||
select: ["id", "version"],
|
||||
@@ -1972,7 +1981,7 @@ export default class OrderModuleService<
|
||||
orderId: string,
|
||||
@MedusaContext() sharedContext?: Context
|
||||
) {
|
||||
const order = await super.retrieve(
|
||||
const order = await super.retrieveOrder(
|
||||
orderId,
|
||||
{
|
||||
select: ["id", "version"],
|
||||
@@ -2241,7 +2250,7 @@ export default class OrderModuleService<
|
||||
}
|
||||
}
|
||||
|
||||
let orders = await super.list(
|
||||
let orders = await super.listOrders(
|
||||
{ id: deduplicate(ordersIds) },
|
||||
{
|
||||
select: [
|
||||
@@ -2650,7 +2659,7 @@ export default class OrderModuleService<
|
||||
@MedusaContext() sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderDTO | OrderTypes.OrderDTO[]> {
|
||||
const orderIds = Array.isArray(orderId) ? orderId : [orderId]
|
||||
const orders = await this.list(
|
||||
const orders = await this.listOrders(
|
||||
{
|
||||
id: orderIds,
|
||||
},
|
||||
@@ -2708,7 +2717,7 @@ export default class OrderModuleService<
|
||||
@MedusaContext() sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderDTO | OrderTypes.OrderDTO[]> {
|
||||
const orderIds = Array.isArray(orderId) ? orderId : [orderId]
|
||||
const orders = await this.list(
|
||||
const orders = await this.listOrders(
|
||||
{
|
||||
id: orderIds,
|
||||
},
|
||||
@@ -2760,7 +2769,7 @@ export default class OrderModuleService<
|
||||
@MedusaContext() sharedContext?: Context
|
||||
): Promise<OrderTypes.OrderDTO | OrderTypes.OrderDTO[]> {
|
||||
const orderIds = Array.isArray(orderId) ? orderId : [orderId]
|
||||
const orders = await this.list(
|
||||
const orders = await this.listOrders(
|
||||
{
|
||||
id: orderIds,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user