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:
co-authored by
adrien2p
Harminder Virk
Oli Juhl
parent
05c8a67d8e
commit
cc73802ab3
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user