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:
Adrien de Peretti
2024-06-19 15:02:16 +02:00
committed by GitHub
parent 2895ccfba8
commit 48963f55ef
533 changed files with 6469 additions and 9769 deletions

View File

@@ -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"

View File

@@ -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)

View File

@@ -1,8 +0,0 @@
import { ModuleExports } from "@medusajs/types"
import { OrderModuleService } from "@services"
const service = OrderModuleService
export const moduleDefinition: ModuleExports = {
service,
}

View File

@@ -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 })
})()

View File

@@ -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,
},