feat(core-flows,medusa,order,types): update orders (#10373)

**What**
- add order update endpoint
- add workflows and steps for updating orders
- add `registerChanges` method to Order module + workflow step

---

CLOSES CMRC-633
This commit is contained in:
Frane Polić
2024-12-03 18:15:26 +01:00
committed by GitHub
parent 56ae076fd2
commit ab948b7c65
21 changed files with 809 additions and 22 deletions

View File

@@ -20,6 +20,7 @@ import {
} from "@medusajs/framework/types"
import {
BigNumber,
ChangeActionType,
createRawPropertiesFromBigNumber,
DecorateCartLikeInputDTO,
decorateCartTotals,
@@ -2233,6 +2234,59 @@ export default class OrderModuleService<
await this.orderChangeService_.update(updates as any, sharedContext)
}
async registerOrderChange(
data: OrderTypes.RegisterOrderChangeDTO,
sharedContext?: Context
): Promise<OrderTypes.OrderChangeDTO>
async registerOrderChange(
data: OrderTypes.RegisterOrderChangeDTO[],
sharedContext?: Context
): Promise<OrderTypes.OrderChangeDTO[]>
@InjectManager()
async registerOrderChange(
data:
| OrderTypes.RegisterOrderChangeDTO
| OrderTypes.RegisterOrderChangeDTO[],
sharedContext?: Context
): Promise<OrderTypes.OrderChangeDTO | OrderTypes.OrderChangeDTO[]> {
const inputData = Array.isArray(data) ? data : [data]
const orders = await this.orderService_.list(
{ id: inputData.map((d) => d.order_id) },
{ select: ["id", "version"] },
sharedContext
)
const orderVersionsMap = new Map(orders.map((o) => [o.id, o.version]))
const changes = (await this.orderChangeService_.create(
inputData.map((d) => ({
order_id: d.order_id,
change_type: d.change_type,
internal_note: d.internal_note,
description: d.description,
metadata: d.metadata,
confirmed_at: new Date(),
status: OrderChangeStatus.CONFIRMED,
version: orderVersionsMap.get(d.order_id)!,
actions: [
{
action: ChangeActionType.UPDATE_ORDER_PROPERTIES,
details: d.details,
reference: d.reference,
reference_id: d.reference_id,
version: orderVersionsMap.get(d.order_id)!,
applied: true,
},
],
})) as CreateOrderChangeDTO[],
sharedContext
)) as OrderTypes.OrderChangeDTO[]
return Array.isArray(data) ? changes : changes[0]
}
@InjectManager()
async applyPendingOrderActions(
orderId: string | string[],

View File

@@ -0,0 +1,20 @@
import { ChangeActionType } from "@medusajs/framework/utils"
import { OrderChangeProcessing } from "../calculate-order-change"
import { setActionReference } from "../set-action-reference"
OrderChangeProcessing.registerActionType(
ChangeActionType.UPDATE_ORDER_PROPERTIES,
{
operation({ action, currentOrder, options }) {
/**
* NOOP: used as a reference for the change
*/
setActionReference(currentOrder, action, options)
},
validate({ action }) {
/* noop */
},
}
)

View File

@@ -14,3 +14,4 @@ export * from "./shipping-add"
export * from "./shipping-remove"
export * from "./write-off-item"
export * from "./transfer-customer"
export * from "./change-shipping-address"