feat(core-flows,js-sdk,medusa,types): draft order delete (#12172)

This commit is contained in:
Frane Polić
2025-05-28 14:37:00 +02:00
committed by GitHub
parent 52eebcee6f
commit 9866baa852
11 changed files with 521 additions and 2 deletions

View File

@@ -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";`
)
}
}

View File

@@ -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[]