feat(core-flows,js-sdk,medusa,types): draft order delete (#12172)
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
import { Migration } from "@mikro-orm/migrations"
|
||||
|
||||
export class Migration20250522181137 extends Migration {
|
||||
override async up(): Promise<void> {
|
||||
this.addSql(
|
||||
`DELETE FROM "order_summary" WHERE "order_id" NOT IN (SELECT id FROM "order");`
|
||||
)
|
||||
|
||||
this.addSql(`ALTER TABLE "order_summary"
|
||||
ADD CONSTRAINT
|
||||
"order_summary_order_id_foreign" FOREIGN KEY ("order_id") REFERENCES "order" ("id")
|
||||
ON UPDATE CASCADE
|
||||
ON DELETE CASCADE;`)
|
||||
}
|
||||
|
||||
override async down(): Promise<void> {
|
||||
this.addSql(
|
||||
`ALTER TABLE "order_summary" DROP CONSTRAINT IF EXISTS "order_summary_order_id_foreign";`
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -728,7 +728,14 @@ export default class OrderModuleService
|
||||
const creditLinesToCreate: CreateOrderCreditLineDTO[] = []
|
||||
const createdOrders: InferEntityType<typeof Order>[] = []
|
||||
|
||||
for (const { items, shipping_methods, credit_lines, ...order } of data) {
|
||||
for (const {
|
||||
items,
|
||||
shipping_methods,
|
||||
credit_lines,
|
||||
shipping_address,
|
||||
billing_address,
|
||||
...order
|
||||
} of data) {
|
||||
const ord = order as any
|
||||
|
||||
const shippingMethods = shipping_methods?.map((sm: any) => {
|
||||
@@ -844,6 +851,70 @@ export default class OrderModuleService
|
||||
})
|
||||
}
|
||||
|
||||
@InjectTransactionManager()
|
||||
// @ts-expect-error
|
||||
async deleteOrders(
|
||||
orderIds: string | string[],
|
||||
@MedusaContext() sharedContext: Context = {}
|
||||
): Promise<void> {
|
||||
const ids = Array.isArray(orderIds) ? orderIds : [orderIds]
|
||||
|
||||
const orders = await this.orderService_.list(
|
||||
{ id: ids },
|
||||
{
|
||||
select: ["id", "shipping_address_id", "billing_address_id"],
|
||||
},
|
||||
sharedContext
|
||||
)
|
||||
|
||||
const orderAddressIds = orders
|
||||
.map((order) => [order.shipping_address_id, order.billing_address_id])
|
||||
.flat(1)
|
||||
|
||||
const orderChanges = await this.orderChangeService_.list(
|
||||
{ order_id: ids },
|
||||
{ select: ["id"] },
|
||||
sharedContext
|
||||
)
|
||||
|
||||
const orderChangeIds = orderChanges.map((orderChange) => orderChange.id)
|
||||
|
||||
const orderItems = await this.orderItemService_.list(
|
||||
{ order_id: ids },
|
||||
{ select: ["id", "item_id"] },
|
||||
sharedContext
|
||||
)
|
||||
|
||||
const lineItemIds = orderItems.map((orderItem) => orderItem.item_id)
|
||||
|
||||
const orderShipping = await this.orderShippingService_.list(
|
||||
{ order_id: ids },
|
||||
{ select: ["shipping_method_id"] },
|
||||
sharedContext
|
||||
)
|
||||
|
||||
const orderShippingMethodIds = orderShipping.map(
|
||||
(orderShipping) => orderShipping.shipping_method_id
|
||||
)
|
||||
|
||||
await promiseAll([
|
||||
this.orderAddressService_.delete(orderAddressIds, sharedContext),
|
||||
// Delete order changes & actions
|
||||
this.orderChangeService_.delete(orderChangeIds, sharedContext),
|
||||
])
|
||||
|
||||
// Delete order, order items, summary, shipping methods and transactions
|
||||
await super.deleteOrders(ids, sharedContext)
|
||||
|
||||
await promiseAll([
|
||||
this.orderLineItemService_.delete(lineItemIds, sharedContext),
|
||||
this.orderShippingMethodService_.delete(
|
||||
orderShippingMethodIds,
|
||||
sharedContext
|
||||
),
|
||||
])
|
||||
}
|
||||
|
||||
// @ts-expect-error
|
||||
async updateOrders(
|
||||
data: OrderTypes.UpdateOrderDTO[]
|
||||
|
||||
Reference in New Issue
Block a user