chore(order): dml (#10292)

* ../../core/types/src/dml/index.ts

* ../../core/types/src/dml/index.ts

* fix: relationships mapping

* handle nullable foreign keys types

* handle nullable foreign keys types

* handle nullable foreign keys types

* continue to update product category repository

* fix all product category repositories issues

* fix product category service types

* fix product module service types

* fix product module service types

* fix repository template type

* refactor: use a singleton DMLToMikroORM factory instance

Since the MikroORM MetadataStorage is global, we will also have to turn DML
to MikroORM entities conversion use a global bucket as well

* refactor: update product module to use DML in tests

* wip: tests

* WIP product linkable fixes

* continue type fixing and start test fixing

* test: fix more tests

* fix repository

* fix pivot table computaion + fix mikro orm repository

* fix many to many management and configuration

* fix many to many management and configuration

* fix many to many management and configuration

* update product tag relation configuration

* Introduce experimental dml hooks to fix some issues with categories

* more fixes

* fix product tests

* add missing id prefixes

* fix product category handle management

* test: fix more failing tests

* test: make it all green

* test: fix breaking tests

* fix: build issues

* fix: build issues

* fix: more breaking tests

* refactor: fix issues after merge

* refactor: fix issues after merge

* refactor: surpress types error

* test: fix DML failing tests

* improve many to many inference + tests

* Wip fix columns from product entity

* remove product model before create hook and manage handle validation and transformation at the service level

* test: fix breaking unit tests

* fix: product module service to not update handle on product update

* fix define link and joiner config

* test: fix joiner config test

* test: fix joiner config test

* fix joiner config primary keys

* Fix joiner config builder

* Fix joiner config builder

* test: remove only modifier from test

* refactor: remove hooks usage from product collection

* refactor: remove hooks usage from product-option

* refactor: remove hooks usage for computing category handle

* refactor: remove hooks usage from productCategory model

* refactor: remove hooks from DML

* refactor: remove cruft

* order dml

* cleanup

* re add foerign key indexes

* wip

* chore: remove unused types

* wip

* changes

* rm raw

* autoincrement

* wip

* rel

* refactor: cleanup

* migration and models configuration adjustments

* cleanup

* number searchable

* fix random ordering

* fix

* test: fix product-category tests

* test: update breaking DML tests

* test: array assertion to not care about ordering

* fix: temporarily apply id ordering for products

* types

* wip

* WIP type improvements

* update order models

* partially fix types temporarely

* rel

* fix: recursive type issue

* improve type inference breaks

* improve type inference breaks

* update models

* rm nullable

* default value

* repository

* update default value handling

* fix unit tests

* WIP

* toMikroORM

* fix relations

* cascades

* fix

* experimental dml hooks

* rm migration

* serial

* nullable autoincrement

* fix model

* model changes

* fix one to one DML

* order test

* fix addresses

* fix unit tests

* Re align dml entity name inference

* update model table name config

* update model table name config

* revert

* update return relation

* WIP

* hasOne

* models

* fix

* model

* initial commit

* cart service

* order module

* utils unit test

* index engine

* changeset

* merge

* fix hasOne with fk

* update

* free text filter per entity

* tests

* prod category

* property string many to many

* fix big number

* link modules migration set names

* merge

* shipping option rules

* serializer

* unit test

* fix test mikro orm init

* fix test mikro orm init

* Maintain merge object properties

* fix test mikro orm init

* prevent unit test from connecting to db

* wip

* fix test

* fix test

* link test

* schema

* models

* auto increment

* hook

* model hooks

* order

* wip

* orm version

* request return field

* fix return configuration on order model

* workflows

* core flows

* unit test

* test

* base repo

* test

* base repo

* test fix

* inventory move

* locking inventory

* test

* free text fix

* rm timeout mock

* migrate fulfillment values

* v6.4.3

* cleanup

* link-modules update sql

* revert test

* remove fake timers

---------

Co-authored-by: adrien2p <adrien.deperetti@gmail.com>
Co-authored-by: Harminder Virk <virk.officials@gmail.com>
Co-authored-by: Oli Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
Carlos R. L. Rodrigues
2025-01-21 08:04:47 -05:00
committed by GitHub
co-authored by adrien2p Harminder Virk Oli Juhl
parent 05c8a67d8e
commit cc73802ab3
178 changed files with 5731 additions and 7120 deletions
@@ -11,11 +11,12 @@ import {
getShippingMethodsTotals,
isString,
promiseAll,
toMikroORMEntity,
} from "@medusajs/framework/utils"
import { OrderClaim, OrderClaimItem, Return, ReturnItem } from "@models"
function createClaimAndReturnEntities(em, data, order) {
const claimReference = em.create(OrderClaim, {
const claimReference = em.create(toMikroORMEntity(OrderClaim), {
order_id: data.order_id,
order_version: order.version,
type: data.type as ClaimType,
@@ -25,16 +26,16 @@ function createClaimAndReturnEntities(em, data, order) {
const returnReference =
data.type === ClaimType.REPLACE
? em.create(Return, {
? em.create(toMikroORMEntity(Return), {
order_id: data.order_id,
order_version: order.version,
status: ReturnStatus.REQUESTED,
claim_id: claimReference.id,
claim: claimReference.id,
refund_amount: (data.refund_amount as unknown) ?? null,
})
: undefined
claimReference.return_id = returnReference?.id
claimReference.return = returnReference?.id
return { claimReference, returnReference }
}
@@ -51,7 +52,7 @@ function createReturnItem(em, item, claimReference, returnReference, actions) {
},
})
return em.create(ReturnItem, {
return em.create(toMikroORMEntity(ReturnItem), {
item_id: item.id,
return_id: returnReference.id,
quantity: item.quantity,
@@ -67,7 +68,7 @@ function createClaimAndReturnItems(
returnReference,
actions
) {
const returnItems: ReturnItem[] = []
const returnItems: (typeof ReturnItem)[] = []
const claimItems = data.claim_items?.map((item) => {
actions.push({
action: ChangeActionType.WRITE_OFF_ITEM,
@@ -86,7 +87,7 @@ function createClaimAndReturnItems(
: undefined
)
return em.create(OrderClaimItem, {
return em.create(toMikroORMEntity(OrderClaimItem), {
item_id: item.id,
reason: item.reason,
quantity: item.quantity,
@@ -108,8 +109,8 @@ async function processAdditionalItems(
sharedContext
) {
const itemsToAdd: any[] = []
const additionalNewItems: OrderClaimItem[] = []
const additionalItems: OrderClaimItem[] = []
const additionalNewItems: any[] = []
const additionalItems: any[] = []
data.additional_items?.forEach((item) => {
const hasItem = item.id
? order.items.find((o) => o.item.id === item.id)
@@ -131,7 +132,7 @@ async function processAdditionalItems(
})
additionalItems.push(
em.create(OrderClaimItem, {
em.create(toMikroORMEntity(OrderClaimItem), {
item_id: item.id,
quantity: item.quantity,
note: item.note,
@@ -143,7 +144,7 @@ async function processAdditionalItems(
itemsToAdd.push(item)
additionalNewItems.push(
em.create(OrderClaimItem, {
em.create(toMikroORMEntity(OrderClaimItem), {
quantity: item.quantity,
unit_price: item.unit_price,
note: item.note,
@@ -10,11 +10,12 @@ import {
getShippingMethodsTotals,
isString,
promiseAll,
toMikroORMEntity,
} from "@medusajs/framework/utils"
import { OrderExchange, OrderExchangeItem, Return, ReturnItem } from "@models"
function createExchangeAndReturnEntities(em, data, order) {
const exchangeReference = em.create(OrderExchange, {
const exchangeReference = em.create(toMikroORMEntity(OrderExchange), {
order_id: data.order_id,
order_version: order.version,
no_notification: data.no_notification,
@@ -22,7 +23,7 @@ function createExchangeAndReturnEntities(em, data, order) {
difference_due: data.difference_due,
})
const returnReference = em.create(Return, {
const returnReference = em.create(toMikroORMEntity(Return), {
order_id: data.order_id,
order_version: order.version,
status: ReturnStatus.REQUESTED,
@@ -30,7 +31,7 @@ function createExchangeAndReturnEntities(em, data, order) {
refund_amount: (data.refund_amount as unknown) ?? null,
})
exchangeReference.return_id = returnReference.id
exchangeReference.return = returnReference
return { exchangeReference, returnReference }
}
@@ -54,7 +55,7 @@ function createReturnItems(
},
})
return em.create(ReturnItem, {
return em.create(toMikroORMEntity(ReturnItem), {
item_id: item.id,
return_id: returnReference.id,
reason: item.reason,
@@ -75,8 +76,8 @@ async function processAdditionalItems(
sharedContext
) {
const itemsToAdd: any[] = []
const additionalNewItems: OrderExchangeItem[] = []
const additionalItems: OrderExchangeItem[] = []
const additionalNewItems: any[] = []
const additionalItems: any[] = []
data.additional_items?.forEach((item) => {
const hasItem = item.id
? order.items.find((o) => o.item.id === item.id)
@@ -98,7 +99,7 @@ async function processAdditionalItems(
})
additionalItems.push(
em.create(OrderExchangeItem, {
em.create(toMikroORMEntity(OrderExchangeItem), {
item_id: item.id,
quantity: item.quantity,
note: item.note,
@@ -110,7 +111,7 @@ async function processAdditionalItems(
itemsToAdd.push(item)
additionalNewItems.push(
em.create(OrderExchangeItem, {
em.create(toMikroORMEntity(OrderExchangeItem), {
quantity: item.quantity,
unit_price: item.unit_price,
note: item.note,
@@ -313,6 +314,5 @@ export async function createExchange(
this.createOrderExchanges([exchangeReference], sharedContext),
this.confirmOrderChange(change[0].id, sharedContext),
])
return exchangeReference
}
@@ -11,11 +11,12 @@ import {
isDefined,
isString,
promiseAll,
toMikroORMEntity,
} from "@medusajs/framework/utils"
import { Return, ReturnItem } from "@models"
function createReturnReference(em, data, order) {
return em.create(Return, {
return em.create(toMikroORMEntity(Return), {
order_id: data.order_id,
order_version: order.version,
status: ReturnStatus.REQUESTED,
@@ -39,7 +40,7 @@ function createReturnItems(em, data, returnRef, actions) {
},
})
return em.create(ReturnItem, {
return em.create(toMikroORMEntity(ReturnItem), {
reason_id: item.reason_id,
return_id: returnRef.id,
item_id: item.id,
@@ -85,7 +85,7 @@ export async function receiveReturn(
data.return_id,
{
select: ["id", "order_id"],
relations: ["items"],
relations: ["items", "items.item"],
},
sharedContext
)
@@ -4,6 +4,7 @@ import {
DAL,
FilterableOrderReturnReasonProps,
FindConfig,
InferEntityType,
InternalModuleDeclaration,
IOrderModuleService,
ModuleJoinerConfig,
@@ -37,8 +38,10 @@ import {
OrderChangeStatus,
OrderStatus,
promiseAll,
toMikroORMEntity,
transformPropertiesToBigNumber,
} from "@medusajs/framework/utils"
import { BeforeCreate, OnInit, rel } from "@mikro-orm/core"
import {
Order,
OrderAddress,
@@ -136,32 +139,56 @@ const generateMethodForModels = {
OrderCreditLine,
}
{
const MikroORMEntity = toMikroORMEntity(OrderChangeAction)
MikroORMEntity.prototype["onInit_OrderChangeAction"] = function () {
this.version ??= this.order_change?.version ?? null
this.order_id ??= this.order_change?.order_id ?? null
this.claim_id ??= this.order_change?.claim_id ?? null
this.exchange_id ??= this.order_change?.exchange_id ?? null
if (!this.claim_id && !this.exchange_id) {
this.return_id = this.return?.id ?? this.order_change?.return_id ?? null
}
}
OnInit()(MikroORMEntity.prototype, "onInit_OrderChangeAction")
BeforeCreate()(MikroORMEntity.prototype, "onInit_OrderChangeAction")
}
{
const MikroORMEntity = toMikroORMEntity(OrderShipping)
MikroORMEntity.prototype["onInit_OrderShipping"] = function () {
this.version ??= this.order?.version ?? null
this.order ??= rel(toMikroORMEntity(Order), this.order?.id ?? null)
this.return ??= rel(toMikroORMEntity(Return), this.return?.id ?? null)
this.claim ??= rel(toMikroORMEntity(OrderClaim), this.claim?.id ?? null)
this.exchange ??= rel(
toMikroORMEntity(OrderExchange),
this.exchange?.id ?? null
)
this.shipping_method ??= rel(
toMikroORMEntity(OrderShippingMethod),
this.shipping_method?.id ?? null
)
}
OnInit()(MikroORMEntity.prototype, "onInit_OrderShipping")
BeforeCreate()(MikroORMEntity.prototype, "onInit_OrderShipping")
}
{
const MikroORMEntity = toMikroORMEntity(OrderItem)
MikroORMEntity.prototype["onInit_OrderItem"] = function () {
this.version ??= this.order?.version ?? null
this.order ??= rel(toMikroORMEntity(Order), this.order?.id ?? null)
this.item ??= rel(toMikroORMEntity(OrderLineItem), this.item?.id ?? null)
}
OnInit()(MikroORMEntity.prototype, "onInit_OrderItem")
BeforeCreate()(MikroORMEntity.prototype, "onInit_OrderItem")
}
// 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 OrderAddress = OrderAddress,
TLineItem extends OrderLineItem = OrderLineItem,
TLineItemAdjustment extends OrderLineItemAdjustment = OrderLineItemAdjustment,
TLineItemTaxLine extends OrderLineItemTaxLine = OrderLineItemTaxLine,
TOrderShippingMethodAdjustment extends OrderShippingMethodAdjustment = OrderShippingMethodAdjustment,
TOrderShippingMethodTaxLine extends OrderShippingMethodTaxLine = OrderShippingMethodTaxLine,
TOrderShippingMethod extends OrderShippingMethod = OrderShippingMethod,
TOrderTransaction extends OrderTransaction = OrderTransaction,
TOrderChange extends OrderChange = OrderChange,
TOrderChangeAction extends OrderChangeAction = OrderChangeAction,
TOrderItem extends OrderItem = OrderItem,
TOrderSummary extends OrderSummary = OrderSummary,
TOrderShipping extends OrderShipping = OrderShipping,
TReturnReason extends ReturnReason = ReturnReason,
TReturn extends Return = Return,
TReturnItem extends ReturnItem = ReturnItem,
TClaim extends OrderClaim = OrderClaim,
TClaimItem extends OrderClaimItem = OrderClaimItem,
TClaimItemImage extends OrderClaimItemImage = OrderClaimItemImage,
TExchange extends OrderExchange = OrderExchange,
TExchangeItem extends OrderExchangeItem = OrderExchangeItem,
TCreditLine extends OrderCreditLine = OrderCreditLine
>
export default class OrderModuleService
extends ModulesSdkUtils.MedusaService<{
Order: { dto: OrderTypes.OrderDTO }
OrderAddress: { dto: OrderTypes.OrderAddressDTO }
@@ -195,27 +222,69 @@ export default class OrderModuleService<
{
protected baseRepository_: DAL.RepositoryService
protected orderService_: OrderService
protected orderAddressService_: ModulesSdkTypes.IMedusaInternalService<TAddress>
protected orderLineItemService_: ModulesSdkTypes.IMedusaInternalService<TLineItem>
protected orderShippingMethodAdjustmentService_: ModulesSdkTypes.IMedusaInternalService<TOrderShippingMethodAdjustment>
protected orderShippingMethodService_: ModulesSdkTypes.IMedusaInternalService<TOrderShippingMethod>
protected orderLineItemAdjustmentService_: ModulesSdkTypes.IMedusaInternalService<TLineItemAdjustment>
protected orderLineItemTaxLineService_: ModulesSdkTypes.IMedusaInternalService<TLineItemTaxLine>
protected orderShippingMethodTaxLineService_: ModulesSdkTypes.IMedusaInternalService<TOrderShippingMethodTaxLine>
protected orderTransactionService_: ModulesSdkTypes.IMedusaInternalService<TOrderTransaction>
protected orderChangeService_: ModulesSdkTypes.IMedusaInternalService<TOrderChange>
protected orderChangeActionService_: ModulesSdkTypes.IMedusaInternalService<TOrderChangeAction>
protected orderItemService_: ModulesSdkTypes.IMedusaInternalService<TOrderItem>
protected orderSummaryService_: ModulesSdkTypes.IMedusaInternalService<TOrderSummary>
protected orderShippingService_: ModulesSdkTypes.IMedusaInternalService<TOrderShipping>
protected returnReasonService_: ModulesSdkTypes.IMedusaInternalService<TReturnReason>
protected returnService_: ModulesSdkTypes.IMedusaInternalService<TReturn>
protected returnItemService_: ModulesSdkTypes.IMedusaInternalService<TReturnItem>
protected orderClaimService_: ModulesSdkTypes.IMedusaInternalService<TClaim>
protected orderClaimItemService_: ModulesSdkTypes.IMedusaInternalService<TClaimItem>
protected orderClaimItemImageService_: ModulesSdkTypes.IMedusaInternalService<TClaimItemImage>
protected orderExchangeService_: ModulesSdkTypes.IMedusaInternalService<TExchange>
protected orderExchangeItemService_: ModulesSdkTypes.IMedusaInternalService<TExchangeItem>
protected orderAddressService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderAddress>
>
protected orderLineItemService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderLineItem>
>
protected orderShippingMethodAdjustmentService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderShippingMethodAdjustment>
>
protected orderShippingMethodService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderShippingMethod>
>
protected orderLineItemAdjustmentService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderLineItemAdjustment>
>
protected orderLineItemTaxLineService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderLineItemTaxLine>
>
protected orderShippingMethodTaxLineService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderShippingMethodTaxLine>
>
protected orderTransactionService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderTransaction>
>
protected orderChangeService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderChange>
>
protected orderChangeActionService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderChangeAction>
>
protected orderItemService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderItem>
>
protected orderSummaryService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderSummary>
>
protected orderShippingService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderShipping>
>
protected returnReasonService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof ReturnReason>
>
protected returnService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof Return>
>
protected returnItemService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof ReturnItem>
>
protected orderClaimService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderClaim>
>
protected orderClaimItemService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderClaimItem>
>
protected orderClaimItemImageService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderClaimItemImage>
>
protected orderExchangeService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderExchange>
>
protected orderExchangeItemService_: ModulesSdkTypes.IMedusaInternalService<
InferEntityType<typeof OrderExchangeItem>
>
constructor(
{
@@ -640,9 +709,11 @@ export default class OrderModuleService<
data: OrderTypes.CreateOrderDTO[],
@MedusaContext() sharedContext: Context = {}
) {
await this.createOrderAddresses_(data, sharedContext)
const lineItemsToCreate: CreateOrderLineItemDTO[] = []
const createdOrders: Order[] = []
const createdOrders: InferEntityType<typeof Order>[] = []
for (const { items, shipping_methods, ...order } of data) {
const ord = order as any
@@ -693,6 +764,52 @@ export default class OrderModuleService<
return createdOrders
}
@InjectTransactionManager()
protected async createOrderAddresses_(
input: OrderTypes.CreateOrderDTO[],
@MedusaContext() sharedContext: Context = {}
) {
const allAddresses: {
data: any
type: "billing" | "shipping"
source: OrderTypes.CreateOrderDTO
}[] = []
input.forEach((inputData) => {
if (inputData.billing_address) {
allAddresses.push({
data: inputData.billing_address,
type: "billing",
source: inputData,
})
}
if (inputData.shipping_address) {
allAddresses.push({
data: inputData.shipping_address,
type: "shipping",
source: inputData,
})
}
})
const createdAddresses = allAddresses.length
? await this.orderAddressService_.create(
allAddresses.map((a) => a.data),
sharedContext
)
: []
createdAddresses.forEach((createdAddress, index) => {
const { type, source } = allAddresses[index]
if (type === "billing") {
source.billing_address_id = createdAddress.id
} else if (type === "shipping") {
source.shipping_address_id = createdAddress.id
}
})
}
// @ts-expect-error
async updateOrders(
data: OrderTypes.UpdateOrderDTO[]
@@ -794,7 +911,7 @@ export default class OrderModuleService<
| OrderTypes.CreateOrderLineItemDTO,
@MedusaContext() sharedContext: Context = {}
): Promise<OrderTypes.OrderLineItemDTO[]> {
let items: OrderLineItem[] = []
let items: InferEntityType<typeof OrderLineItem>[] = []
if (isString(orderIdOrData)) {
items = await this.createOrderLineItems_(
orderIdOrData,
@@ -840,7 +957,7 @@ export default class OrderModuleService<
orderId: string,
items: OrderTypes.CreateOrderLineItemDTO[],
@MedusaContext() sharedContext: Context = {}
): Promise<OrderLineItem[]> {
): Promise<InferEntityType<typeof OrderLineItem>[]> {
const order = await this.retrieveOrder(
orderId,
{ select: ["id", "version"] },
@@ -862,7 +979,7 @@ export default class OrderModuleService<
protected async createOrderLineItemsBulk_(
data: CreateOrderLineItemDTO[],
@MedusaContext() sharedContext: Context = {}
): Promise<OrderLineItem[]> {
): Promise<InferEntityType<typeof OrderLineItem>[]> {
const orderItemToCreate: CreateOrderItemDTO[] = []
const lineItems = await this.orderLineItemService_.create(
@@ -917,7 +1034,7 @@ export default class OrderModuleService<
| Partial<OrderTypes.UpdateOrderLineItemDTO>,
@MedusaContext() sharedContext: Context = {}
): Promise<OrderTypes.OrderLineItemDTO[] | OrderTypes.OrderLineItemDTO> {
let items: OrderLineItem[] = []
let items: InferEntityType<typeof OrderLineItem>[] = []
if (isString(lineItemIdOrDataOrSelector)) {
const item = await this.updateOrderLineItem_(
lineItemIdOrDataOrSelector,
@@ -960,7 +1077,7 @@ export default class OrderModuleService<
lineItemId: string,
data: Partial<OrderTypes.UpdateOrderLineItemDTO>,
@MedusaContext() sharedContext: Context = {}
): Promise<OrderLineItem> {
): Promise<InferEntityType<typeof OrderLineItem>> {
const [item] = await this.orderLineItemService_.update(
[{ id: lineItemId, ...data }],
sharedContext
@@ -985,7 +1102,7 @@ export default class OrderModuleService<
protected async updateOrderLineItemsWithSelector_(
updates: OrderTypes.UpdateOrderLineItemWithSelectorDTO[],
@MedusaContext() sharedContext: Context = {}
): Promise<OrderLineItem[]> {
): Promise<InferEntityType<typeof OrderLineItem>[]> {
let toUpdate: UpdateOrderLineItemDTO[] = []
const detailsToUpdate: UpdateOrderItemWithSelectorDTO[] = []
for (const { selector, data } of updates) {
@@ -1039,7 +1156,7 @@ export default class OrderModuleService<
| Partial<OrderTypes.UpdateOrderItemDTO>,
@MedusaContext() sharedContext: Context = {}
): Promise<OrderTypes.OrderItemDTO[] | OrderTypes.OrderItemDTO> {
let items: OrderItem[] = []
let items: InferEntityType<typeof OrderItem>[] = []
if (isString(orderItemIdOrDataOrSelector)) {
const item = await this.updateOrderItem_(
orderItemIdOrDataOrSelector,
@@ -1079,7 +1196,7 @@ export default class OrderModuleService<
orderItemId: string,
data: Partial<OrderTypes.UpdateOrderItemDTO>,
@MedusaContext() sharedContext: Context = {}
): Promise<OrderItem> {
): Promise<InferEntityType<typeof OrderItem>> {
const [detail] = await this.orderItemService_.update(
[{ id: orderItemId, ...data }],
sharedContext
@@ -1092,7 +1209,7 @@ export default class OrderModuleService<
protected async updateOrderItemWithSelector_(
updates: OrderTypes.UpdateOrderItemWithSelectorDTO[],
@MedusaContext() sharedContext: Context = {}
): Promise<OrderItem[]> {
): Promise<InferEntityType<typeof OrderItem>[]> {
let toUpdate: UpdateOrderItemDTO[] = []
for (const { selector, data } of updates) {
const details = await this.listOrderItems(
@@ -1136,7 +1253,7 @@ export default class OrderModuleService<
): Promise<
OrderTypes.OrderShippingMethodDTO[] | OrderTypes.OrderShippingMethodDTO
> {
let methods: OrderShippingMethod[]
let methods: InferEntityType<typeof OrderShippingMethod>[]
if (isString(orderIdOrData)) {
methods = await this.createOrderShippingMethods_(
orderIdOrData,
@@ -1186,7 +1303,7 @@ export default class OrderModuleService<
orderId: string,
data: CreateOrderShippingMethodDTO[],
@MedusaContext() sharedContext: Context = {}
): Promise<OrderShippingMethod[]> {
): Promise<InferEntityType<typeof OrderShippingMethod>[]> {
const order = await this.retrieveOrder(
orderId,
{ select: ["id", "version"] },
@@ -1215,13 +1332,10 @@ export default class OrderModuleService<
version: number
}[],
@MedusaContext() sharedContext: Context = {}
): Promise<OrderShippingMethod[]> {
const sm = await this.orderShippingService_.create(
data as unknown as CreateOrderShippingMethodDTO[],
sharedContext
)
): Promise<InferEntityType<typeof OrderShippingMethod>[]> {
const sm = await this.orderShippingService_.create(data, sharedContext)
return sm.map((s) => s.shipping_method)
return sm.map((s) => s.shipping_method) as any
}
@InjectManager()
@@ -1298,7 +1412,7 @@ export default class OrderModuleService<
adjustments?: OrderTypes.CreateOrderLineItemAdjustmentDTO[],
@MedusaContext() sharedContext: Context = {}
): Promise<OrderTypes.OrderLineItemAdjustmentDTO[]> {
let addedAdjustments: OrderLineItemAdjustment[] = []
let addedAdjustments: InferEntityType<typeof OrderLineItemAdjustment>[] = []
if (isString(orderIdOrData)) {
const order = await this.retrieveOrder(
orderIdOrData,
@@ -1471,7 +1585,9 @@ export default class OrderModuleService<
| OrderTypes.OrderShippingMethodAdjustmentDTO[]
| OrderTypes.OrderShippingMethodAdjustmentDTO
> {
let addedAdjustments: OrderShippingMethodAdjustment[] = []
let addedAdjustments: InferEntityType<
typeof OrderShippingMethodAdjustment
>[] = []
if (isString(orderIdOrData)) {
const order = await this.retrieveOrder(
orderIdOrData,
@@ -1551,7 +1667,7 @@ export default class OrderModuleService<
): Promise<
OrderTypes.OrderLineItemTaxLineDTO[] | OrderTypes.OrderLineItemTaxLineDTO
> {
let addedTaxLines: OrderLineItemTaxLine[]
let addedTaxLines: InferEntityType<typeof OrderLineItemTaxLine>[]
if (isString(orderIdOrData)) {
const lines = Array.isArray(taxLines) ? taxLines : [taxLines]
@@ -1663,7 +1779,7 @@ export default class OrderModuleService<
| OrderTypes.OrderShippingMethodTaxLineDTO[]
| OrderTypes.OrderShippingMethodTaxLineDTO
> {
let addedTaxLines: OrderShippingMethodTaxLine[]
let addedTaxLines: InferEntityType<typeof OrderShippingMethodTaxLine>[]
if (isString(orderIdOrData)) {
const lines = Array.isArray(taxLines) ? taxLines : [taxLines]
@@ -1905,7 +2021,7 @@ export default class OrderModuleService<
protected async createOrderChange_(
data: CreateOrderChangeDTO | CreateOrderChangeDTO[],
@MedusaContext() sharedContext?: Context
): Promise<OrderChange[]> {
): Promise<InferEntityType<typeof OrderChange>[]> {
const dataArr = Array.isArray(data) ? data : [data]
const orderIds: string[] = []
const dataMap: Record<string, object> = {}
@@ -1955,7 +2071,7 @@ export default class OrderModuleService<
return {
...dataMap[order.id],
version: order.version + 1,
version: order.version! + 1,
} as any
})
@@ -2002,7 +2118,9 @@ export default class OrderModuleService<
quantity: item.detail?.quantity ?? item.quantity,
unit_price: item.detail?.unit_price || item.unit_price,
compare_at_unit_price:
item.detail?.compare_at_unit_price || item.compare_at_unit_price,
item.detail?.compare_at_unit_price ||
item.compare_at_unit_price ||
null,
}
}
}
@@ -2032,6 +2150,7 @@ export default class OrderModuleService<
const actions = item.actions
delete item.actions
//@ts-ignore
const newItem = itemsToUpsert.find((d) => d.item_id === item.id)!
const unitPrice = newItem?.unit_price ?? item.unit_price
const compareAtUnitPrice =
@@ -2042,7 +2161,7 @@ export default class OrderModuleService<
actions,
quantity: newItem.quantity,
unit_price: unitPrice,
compare_at_unit_price: compareAtUnitPrice,
compare_at_unit_price: compareAtUnitPrice || null,
detail: {
...newItem,
...item,
@@ -2284,9 +2403,9 @@ export default class OrderModuleService<
applied: true,
},
],
})) as CreateOrderChangeDTO[],
})),
sharedContext
)) as OrderTypes.OrderChangeDTO[]
)) as unknown as OrderTypes.OrderChangeDTO[]
return Array.isArray(data) ? changes : changes[0]
}
@@ -2338,7 +2457,7 @@ export default class OrderModuleService<
)
return await this.applyOrderChanges_(
changes as ApplyOrderChangeDTO[],
changes as unknown as ApplyOrderChangeDTO[],
sharedContext
)
}
@@ -2745,6 +2864,7 @@ export default class OrderModuleService<
data: OrderTypes.CreateOrderChangeActionDTO[],
sharedContext?: Context
): Promise<OrderTypes.OrderChangeActionDTO[]>
@InjectTransactionManager()
async addOrderAction(
data:
@@ -2786,7 +2906,8 @@ export default class OrderModuleService<
const actions = (await this.orderChangeActionService_.create(
dataArr,
sharedContext
)) as OrderTypes.OrderChangeActionDTO[]
)) as unknown as OrderTypes.OrderChangeActionDTO[]
return Array.isArray(data) ? actions : actions[0]
}
@@ -2836,10 +2957,10 @@ export default class OrderModuleService<
"items.detail",
"shipping_methods",
],
}
// sharedContext
// TODO: investigate issue while using sharedContext in receive return action
},
sharedContext
)
orders = formatOrder(orders, {
entity: Order,
}) as OrderDTO[]
@@ -2922,10 +3043,10 @@ export default class OrderModuleService<
}
}
const created = await this.orderTransactionService_.create(
const created = (await this.orderTransactionService_.create(
data,
sharedContext
)
)) as (InferEntityType<typeof OrderTransaction> & { order_id: string })[]
await this.updateOrderPaidRefundableAmount_(created, false, sharedContext)
@@ -3281,6 +3402,7 @@ export default class OrderModuleService<
return await this.retrieveReturn(ret.id, {
relations: [
"items",
"items.item",
"shipping_methods",
"shipping_methods.tax_lines",
"shipping_methods.adjustments",
@@ -3390,7 +3512,7 @@ export default class OrderModuleService<
): Promise<OrderTypes.OrderExchangeDTO> {
const ret = await this.createExchange_(data, sharedContext)
const claim = await this.retrieveOrderExchange(
const exchange = await this.retrieveOrderExchange(
ret.id,
{
relations: [
@@ -3408,7 +3530,7 @@ export default class OrderModuleService<
)
return await this.baseRepository_.serialize<OrderTypes.OrderExchangeDTO>(
claim,
exchange,
{
populate: true,
}
@@ -2,6 +2,7 @@ import {
Context,
DAL,
FindConfig,
InferEntityType,
OrderTypes,
RepositoryService,
} from "@medusajs/framework/types"
@@ -19,9 +20,11 @@ type InjectedDependencies = {
export default class OrderService extends ModulesSdkUtils.MedusaInternalService<
InjectedDependencies,
Order
InferEntityType<typeof Order>
>(Order) {
protected readonly orderRepository_: RepositoryService<Order>
protected readonly orderRepository_: RepositoryService<
InferEntityType<typeof Order>
>
constructor(container: InjectedDependencies) {
// @ts-ignore
@@ -35,10 +38,10 @@ export default class OrderService extends ModulesSdkUtils.MedusaInternalService<
version: number,
config: FindConfig<TEntityMethod> = {},
@MedusaContext() sharedContext: Context = {}
): Promise<Order> {
const queryConfig = ModulesSdkUtils.buildQuery<Order>(
): Promise<typeof Order> {
const queryConfig = ModulesSdkUtils.buildQuery<typeof Order>(
{ id, items: { version } },
{ ...config, take: 1 }
{ ...config, take: 1 } as any
)
const [result] = await this.orderRepository_.find(
queryConfig,