From b6521e4c1ace2c64e13b32b4b52c349bae09257d Mon Sep 17 00:00:00 2001 From: "Carlos R. L. Rodrigues" <37986729+carlos-r-l-rodrigues@users.noreply.github.com> Date: Thu, 29 Aug 2024 11:20:12 -0300 Subject: [PATCH] feat(medusa): order changes endpoint (#8728) What: - `admin/orders/:id/changes` endpoint to get order changes related to the order - added `*_by` attributes missing --- .../__tests__/order-edits/order-edits.spec.ts | 11 +++++++ .../src/order/steps/cancel-order-change.ts | 2 +- .../src/order/steps/cancel-orders.ts | 2 ++ .../src/order/steps/confirm-order-changes.ts | 6 +++- .../src/order/workflows/claim/cancel-claim.ts | 1 + .../workflows/claim/confirm-claim-request.ts | 3 +- .../workflows/exchange/cancel-exchange.ts | 1 + .../exchange/confirm-exchange-request.ts | 1 + .../order-edit/confirm-order-edit-request.ts | 9 ++++-- .../order-edit/request-order-edit.ts | 3 ++ .../order/workflows/return/cancel-return.ts | 1 + .../return/confirm-receive-return-request.ts | 7 +++- .../return/confirm-return-request.ts | 7 +++- .../types/src/http/order/admin/responses.ts | 7 +++- packages/core/types/src/order/mutations.ts | 3 ++ .../types/src/workflow/order/cancel-claim.ts | 1 + .../src/workflow/order/cancel-exchange.ts | 1 + .../src/workflow/order/cancel-fulfillment.ts | 1 + .../types/src/workflow/order/cancel-order.ts | 1 + .../types/src/workflow/order/cancel-return.ts | 1 + .../src/api/admin/claims/[id]/cancel/route.ts | 3 +- .../api/admin/claims/[id]/request/route.ts | 7 ++-- .../api/admin/exchanges/[id]/cancel/route.ts | 3 +- .../api/admin/exchanges/[id]/request/route.ts | 7 ++-- .../admin/order-edits/[id]/confirm/route.ts | 5 ++- .../admin/order-edits/[id]/request/route.ts | 5 ++- .../src/api/admin/orders/[id]/cancel/route.ts | 3 +- .../api/admin/orders/[id]/changes/route.ts | 32 +++++++++++++++++++ .../[fulfillment_id]/cancel/route.ts | 3 +- .../src/api/admin/orders/middlewares.ts | 11 +++++++ .../src/api/admin/orders/query-config.ts | 32 +++++++++++++++++++ .../medusa/src/api/admin/orders/validators.ts | 10 ++++++ .../returns/[id]/receive/confirm/route.ts | 7 ++-- .../api/admin/returns/[id]/request/route.ts | 7 ++-- 34 files changed, 182 insertions(+), 22 deletions(-) create mode 100644 packages/medusa/src/api/admin/orders/[id]/changes/route.ts diff --git a/integration-tests/http/__tests__/order-edits/order-edits.spec.ts b/integration-tests/http/__tests__/order-edits/order-edits.spec.ts index b9e76d27ed..fb76ecb6cf 100644 --- a/integration-tests/http/__tests__/order-edits/order-edits.spec.ts +++ b/integration-tests/http/__tests__/order-edits/order-edits.spec.ts @@ -397,6 +397,17 @@ medusaIntegrationTestRunner({ expect(result.total).toEqual(34) expect(result.items.length).toEqual(1) + + result = ( + await api.get( + `/admin/orders/${orderId}/changes?change_type=edit`, + adminHeaders + ) + ).data.order_changes + + expect(result[0].actions).toHaveLength(3) + expect(result[0].status).toEqual("confirmed") + expect(result[0].confirmed_by).toEqual(expect.stringContaining("user_")) }) }) }, diff --git a/packages/core/core-flows/src/order/steps/cancel-order-change.ts b/packages/core/core-flows/src/order/steps/cancel-order-change.ts index 4a4a5a21c7..2d4307faf9 100644 --- a/packages/core/core-flows/src/order/steps/cancel-order-change.ts +++ b/packages/core/core-flows/src/order/steps/cancel-order-change.ts @@ -33,7 +33,7 @@ export const cancelOrderChangeStep = createStep( "exchange_id", "version", "canceled_at", - "cancelled_by" + "canceled_by" ) const dataBeforeUpdate = await service.retrieveOrderChange(data.id, { diff --git a/packages/core/core-flows/src/order/steps/cancel-orders.ts b/packages/core/core-flows/src/order/steps/cancel-orders.ts index 5b52aca37e..72ee6d867a 100644 --- a/packages/core/core-flows/src/order/steps/cancel-orders.ts +++ b/packages/core/core-flows/src/order/steps/cancel-orders.ts @@ -4,6 +4,7 @@ import { createStep, StepResponse } from "@medusajs/workflows-sdk" export type CancelOrdersStepInput = { orderIds: string[] + canceled_by?: string } export const cancelOrdersStepId = "cancel-orders" @@ -35,6 +36,7 @@ export const cancelOrdersStep = createStep( id: order.id, status: prevData.status, canceled_at: null, + canceled_by: null, } }) ) diff --git a/packages/core/core-flows/src/order/steps/confirm-order-changes.ts b/packages/core/core-flows/src/order/steps/confirm-order-changes.ts index 993731100e..a3efab9bec 100644 --- a/packages/core/core-flows/src/order/steps/confirm-order-changes.ts +++ b/packages/core/core-flows/src/order/steps/confirm-order-changes.ts @@ -5,6 +5,7 @@ import { createStep, StepResponse } from "@medusajs/workflows-sdk" export type ConfirmOrderChangesInput = { orderId: string changes: OrderChangeDTO[] + confirmed_by?: string } /** @@ -15,7 +16,10 @@ export const confirmOrderChanges = createStep( async (input: ConfirmOrderChangesInput, { container }) => { const orderModuleService = container.resolve(ModuleRegistrationName.ORDER) await orderModuleService.confirmOrderChange( - input.changes.map((action) => action.id) + input.changes.map((action) => ({ + id: action.id, + confirmed_by: input.confirmed_by, + })) ) return new StepResponse(null, input.orderId) diff --git a/packages/core/core-flows/src/order/workflows/claim/cancel-claim.ts b/packages/core/core-flows/src/order/workflows/claim/cancel-claim.ts index d9aa3ecd27..a691a3e97d 100644 --- a/packages/core/core-flows/src/order/workflows/claim/cancel-claim.ts +++ b/packages/core/core-flows/src/order/workflows/claim/cancel-claim.ts @@ -86,6 +86,7 @@ export const cancelOrderClaimWorkflow = createWorkflow( cancelOrderClaimStep({ claim_id: orderClaim.id, order_id: orderClaim.order_id, + canceled_by: input.canceled_by, }), deleteReservationsByLineItemsStep(lineItemIds) ) diff --git a/packages/core/core-flows/src/order/workflows/claim/confirm-claim-request.ts b/packages/core/core-flows/src/order/workflows/claim/confirm-claim-request.ts index ba0eccbacf..c241569ec9 100644 --- a/packages/core/core-flows/src/order/workflows/claim/confirm-claim-request.ts +++ b/packages/core/core-flows/src/order/workflows/claim/confirm-claim-request.ts @@ -16,12 +16,12 @@ import { ReturnStatus, } from "@medusajs/utils" import { + WorkflowResponse, createStep, createWorkflow, parallelize, transform, when, - WorkflowResponse, } from "@medusajs/workflows-sdk" import { reserveInventoryStep } from "../../../cart/steps/reserve-inventory" import { prepareConfirmInventoryInput } from "../../../cart/utils/prepare-confirm-inventory-input" @@ -39,6 +39,7 @@ import { createOrUpdateOrderPaymentCollectionWorkflow } from "../create-or-updat export type ConfirmClaimRequestWorkflowInput = { claim_id: string + confirmed_by?: string } /** diff --git a/packages/core/core-flows/src/order/workflows/exchange/cancel-exchange.ts b/packages/core/core-flows/src/order/workflows/exchange/cancel-exchange.ts index 49a62ecc46..cd7d1dbac3 100644 --- a/packages/core/core-flows/src/order/workflows/exchange/cancel-exchange.ts +++ b/packages/core/core-flows/src/order/workflows/exchange/cancel-exchange.ts @@ -90,6 +90,7 @@ export const cancelOrderExchangeWorkflow = createWorkflow( cancelOrderExchangeStep({ exchange_id: orderExchange.id, order_id: orderExchange.order_id, + canceled_by: input.canceled_by, }), deleteReservationsByLineItemsStep(lineItemIds) ) diff --git a/packages/core/core-flows/src/order/workflows/exchange/confirm-exchange-request.ts b/packages/core/core-flows/src/order/workflows/exchange/confirm-exchange-request.ts index 69c56131a7..a4ed5ac95d 100644 --- a/packages/core/core-flows/src/order/workflows/exchange/confirm-exchange-request.ts +++ b/packages/core/core-flows/src/order/workflows/exchange/confirm-exchange-request.ts @@ -39,6 +39,7 @@ import { createOrUpdateOrderPaymentCollectionWorkflow } from "../create-or-updat export type ConfirmExchangeRequestWorkflowInput = { exchange_id: string + confirmed_by?: string } /** diff --git a/packages/core/core-flows/src/order/workflows/order-edit/confirm-order-edit-request.ts b/packages/core/core-flows/src/order/workflows/order-edit/confirm-order-edit-request.ts index 3fad6582f4..e32c4a0226 100644 --- a/packages/core/core-flows/src/order/workflows/order-edit/confirm-order-edit-request.ts +++ b/packages/core/core-flows/src/order/workflows/order-edit/confirm-order-edit-request.ts @@ -11,9 +11,9 @@ import { createWorkflow, transform, } from "@medusajs/workflows-sdk" -import { useRemoteQueryStep } from "../../../common" import { reserveInventoryStep } from "../../../cart/steps/reserve-inventory" import { prepareConfirmInventoryInput } from "../../../cart/utils/prepare-confirm-inventory-input" +import { useRemoteQueryStep } from "../../../common" import { previewOrderChangeStep } from "../../steps" import { confirmOrderChanges } from "../../steps/confirm-order-changes" import { @@ -24,6 +24,7 @@ import { createOrUpdateOrderPaymentCollectionWorkflow } from "../create-or-updat export type ConfirmOrderEditRequestWorkflowInput = { order_id: string + confirmed_by?: string } /** @@ -99,7 +100,11 @@ export const confirmOrderEditRequestWorkflow = createWorkflow( const orderPreview = previewOrderChangeStep(order.id) - confirmOrderChanges({ changes: [orderChange], orderId: order.id }) + confirmOrderChanges({ + changes: [orderChange], + orderId: order.id, + confirmed_by: input.confirmed_by, + }) const orderItems = useRemoteQueryStep({ entry_point: "order", diff --git a/packages/core/core-flows/src/order/workflows/order-edit/request-order-edit.ts b/packages/core/core-flows/src/order/workflows/order-edit/request-order-edit.ts index f785d3fd56..6d040677ee 100644 --- a/packages/core/core-flows/src/order/workflows/order-edit/request-order-edit.ts +++ b/packages/core/core-flows/src/order/workflows/order-edit/request-order-edit.ts @@ -16,6 +16,7 @@ import { createOrUpdateOrderPaymentCollectionWorkflow } from "../create-or-updat export type OrderEditRequestWorkflowInput = { order_id: string + requested_by?: string } /** @@ -73,6 +74,8 @@ export const requestOrderEditRequestWorkflow = createWorkflow( { id: orderChange.id, status: OrderChangeStatus.REQUESTED, + requested_at: new Date(), + requested_by: input.requested_by, }, ]) diff --git a/packages/core/core-flows/src/order/workflows/return/cancel-return.ts b/packages/core/core-flows/src/order/workflows/return/cancel-return.ts index 35f74a0417..6d217e1f65 100644 --- a/packages/core/core-flows/src/order/workflows/return/cancel-return.ts +++ b/packages/core/core-flows/src/order/workflows/return/cancel-return.ts @@ -89,6 +89,7 @@ export const cancelReturnWorkflow = createWorkflow( cancelOrderReturnStep({ return_id: orderReturn.id, order_id: orderReturn.order_id, + canceled_by: input.canceled_by, }) } ) diff --git a/packages/core/core-flows/src/order/workflows/return/confirm-receive-return-request.ts b/packages/core/core-flows/src/order/workflows/return/confirm-receive-return-request.ts index ebaf8bda49..9e5aa8ea30 100644 --- a/packages/core/core-flows/src/order/workflows/return/confirm-receive-return-request.ts +++ b/packages/core/core-flows/src/order/workflows/return/confirm-receive-return-request.ts @@ -36,6 +36,7 @@ import { export type ConfirmReceiveReturnRequestWorkflowInput = { return_id: string + confirmed_by?: string } /** @@ -292,7 +293,11 @@ export const confirmReturnReceiveWorkflow = createWorkflow( parallelize( updateReturnsStep([updateReturn]), updateReturnItemsStep(updateReturnItem), - confirmOrderChanges({ changes: [orderChange], orderId: order.id }), + confirmOrderChanges({ + changes: [orderChange], + orderId: order.id, + confirmed_by: input.confirmed_by, + }), adjustInventoryLevelsStep(inventoryAdjustment) ) diff --git a/packages/core/core-flows/src/order/workflows/return/confirm-return-request.ts b/packages/core/core-flows/src/order/workflows/return/confirm-return-request.ts index a32ec3ef65..87dcdb43e7 100644 --- a/packages/core/core-flows/src/order/workflows/return/confirm-return-request.ts +++ b/packages/core/core-flows/src/order/workflows/return/confirm-return-request.ts @@ -34,6 +34,7 @@ import { createOrUpdateOrderPaymentCollectionWorkflow } from "../create-or-updat export type ConfirmReturnRequestWorkflowInput = { return_id: string + confirmed_by?: string } /** @@ -278,7 +279,11 @@ export const confirmReturnRequestWorkflow = createWorkflow( requested_at: new Date(), }, ]), - confirmOrderChanges({ changes: [orderChange], orderId: order.id }) + confirmOrderChanges({ + changes: [orderChange], + orderId: order.id, + confirmed_by: input.confirmed_by, + }) ) createOrUpdateOrderPaymentCollectionWorkflow.runAsStep({ diff --git a/packages/core/types/src/http/order/admin/responses.ts b/packages/core/types/src/http/order/admin/responses.ts index c206790a7e..96bf872b6d 100644 --- a/packages/core/types/src/http/order/admin/responses.ts +++ b/packages/core/types/src/http/order/admin/responses.ts @@ -1,10 +1,15 @@ import { PaginatedResponse } from "../../common" +import { BaseOrderChange } from "../common" import { AdminOrder, AdminOrderPreview } from "./entities" export interface AdminOrderResponse { order: AdminOrder } +export interface AdminOrderChangesResponse { + order_changes: BaseOrderChange[] +} + export type AdminOrderListResponse = PaginatedResponse<{ orders: AdminOrder[] }> @@ -19,4 +24,4 @@ export interface AdminDraftOrderResponse { export type AdminDraftOrderListResponse = PaginatedResponse<{ draft_orders: AdminOrder -}> \ No newline at end of file +}> diff --git a/packages/core/types/src/order/mutations.ts b/packages/core/types/src/order/mutations.ts index 5f49bb84a9..58241d3d1f 100644 --- a/packages/core/types/src/order/mutations.ts +++ b/packages/core/types/src/order/mutations.ts @@ -1894,6 +1894,7 @@ export interface UpdateOrderExchangeWithSelectorDTO { } export interface CancelOrderReturnDTO extends BaseOrderBundledActionsDTO { return_id: string + canceled_by?: string } /** @@ -1981,6 +1982,7 @@ export interface CreateOrderClaimDTO extends BaseOrderBundledActionsDTO { export interface CancelOrderClaimDTO extends BaseOrderBundledActionsDTO { claim_id: string + canceled_by?: string } /** @@ -2031,6 +2033,7 @@ export interface CreateOrderExchangeDTO extends BaseOrderBundledActionsDTO { export interface CancelOrderExchangeDTO extends BaseOrderBundledActionsDTO { exchange_id: string + canceled_by?: string } /** diff --git a/packages/core/types/src/workflow/order/cancel-claim.ts b/packages/core/types/src/workflow/order/cancel-claim.ts index 6dcfe4c6f4..0ddf9d8d75 100644 --- a/packages/core/types/src/workflow/order/cancel-claim.ts +++ b/packages/core/types/src/workflow/order/cancel-claim.ts @@ -1,4 +1,5 @@ export interface CancelOrderClaimWorkflowInput { claim_id: string no_notification?: boolean + canceled_by?: string } diff --git a/packages/core/types/src/workflow/order/cancel-exchange.ts b/packages/core/types/src/workflow/order/cancel-exchange.ts index 803386c47f..71f63a8882 100644 --- a/packages/core/types/src/workflow/order/cancel-exchange.ts +++ b/packages/core/types/src/workflow/order/cancel-exchange.ts @@ -1,4 +1,5 @@ export interface CancelOrderExchangeWorkflowInput { exchange_id: string no_notification?: boolean + canceled_by?: string } diff --git a/packages/core/types/src/workflow/order/cancel-fulfillment.ts b/packages/core/types/src/workflow/order/cancel-fulfillment.ts index cf7850747f..1279a7df7a 100644 --- a/packages/core/types/src/workflow/order/cancel-fulfillment.ts +++ b/packages/core/types/src/workflow/order/cancel-fulfillment.ts @@ -2,4 +2,5 @@ export interface CancelOrderFulfillmentWorkflowInput { order_id: string fulfillment_id: string no_notification?: boolean + canceled_by?: string } diff --git a/packages/core/types/src/workflow/order/cancel-order.ts b/packages/core/types/src/workflow/order/cancel-order.ts index dbe45a3f13..04f28a4d25 100644 --- a/packages/core/types/src/workflow/order/cancel-order.ts +++ b/packages/core/types/src/workflow/order/cancel-order.ts @@ -1,4 +1,5 @@ export interface CancelOrderWorkflowInput { order_id: string no_notification?: boolean + canceled_by?: string } diff --git a/packages/core/types/src/workflow/order/cancel-return.ts b/packages/core/types/src/workflow/order/cancel-return.ts index 830d5d9db8..dac126a613 100644 --- a/packages/core/types/src/workflow/order/cancel-return.ts +++ b/packages/core/types/src/workflow/order/cancel-return.ts @@ -1,4 +1,5 @@ export interface CancelReturnWorkflowInput { return_id: string no_notification?: boolean + canceled_by?: string } diff --git a/packages/medusa/src/api/admin/claims/[id]/cancel/route.ts b/packages/medusa/src/api/admin/claims/[id]/cancel/route.ts index d41a6837c1..96148dd7e6 100644 --- a/packages/medusa/src/api/admin/claims/[id]/cancel/route.ts +++ b/packages/medusa/src/api/admin/claims/[id]/cancel/route.ts @@ -1,10 +1,10 @@ import { cancelOrderClaimWorkflow } from "@medusajs/core-flows" +import { HttpTypes } from "@medusajs/types" import { AuthenticatedMedusaRequest, MedusaResponse, } from "../../../../../types/routing" import { AdminPostCancelClaimReqSchemaType } from "../../validators" -import { HttpTypes } from "@medusajs/types" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -17,6 +17,7 @@ export const POST = async ( input: { ...req.validatedBody, claim_id: id, + canceled_by: req.auth_context.actor_id, }, }) diff --git a/packages/medusa/src/api/admin/claims/[id]/request/route.ts b/packages/medusa/src/api/admin/claims/[id]/request/route.ts index 2080620333..bfa07c7b46 100644 --- a/packages/medusa/src/api/admin/claims/[id]/request/route.ts +++ b/packages/medusa/src/api/admin/claims/[id]/request/route.ts @@ -2,6 +2,7 @@ import { cancelBeginOrderClaimWorkflow, confirmClaimRequestWorkflow, } from "@medusajs/core-flows" +import { HttpTypes } from "@medusajs/types" import { ContainerRegistrationKeys, remoteQueryObjectFromString, @@ -11,7 +12,6 @@ import { MedusaResponse, } from "../../../../../types/routing" import { defaultAdminDetailsReturnFields } from "../../../returns/query-config" -import { HttpTypes } from "@medusajs/types" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -22,7 +22,10 @@ export const POST = async ( const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY) const { result } = await confirmClaimRequestWorkflow(req.scope).run({ - input: { claim_id: id }, + input: { + claim_id: id, + confirmed_by: req.auth_context.actor_id, + }, }) const queryObject = remoteQueryObjectFromString({ diff --git a/packages/medusa/src/api/admin/exchanges/[id]/cancel/route.ts b/packages/medusa/src/api/admin/exchanges/[id]/cancel/route.ts index 1f86326a28..14052dadca 100644 --- a/packages/medusa/src/api/admin/exchanges/[id]/cancel/route.ts +++ b/packages/medusa/src/api/admin/exchanges/[id]/cancel/route.ts @@ -1,10 +1,10 @@ import { cancelOrderExchangeWorkflow } from "@medusajs/core-flows" +import { HttpTypes } from "@medusajs/types" import { AuthenticatedMedusaRequest, MedusaResponse, } from "../../../../../types/routing" import { AdminPostCancelExchangeReqSchemaType } from "../../validators" -import { HttpTypes } from "@medusajs/types" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -17,6 +17,7 @@ export const POST = async ( input: { ...req.validatedBody, exchange_id: id, + canceled_by: req.auth_context.actor_id, }, }) diff --git a/packages/medusa/src/api/admin/exchanges/[id]/request/route.ts b/packages/medusa/src/api/admin/exchanges/[id]/request/route.ts index 1b83cbb92c..338288b130 100644 --- a/packages/medusa/src/api/admin/exchanges/[id]/request/route.ts +++ b/packages/medusa/src/api/admin/exchanges/[id]/request/route.ts @@ -2,6 +2,7 @@ import { cancelBeginOrderExchangeWorkflow, confirmExchangeRequestWorkflow, } from "@medusajs/core-flows" +import { DeleteResponse, HttpTypes } from "@medusajs/types" import { ContainerRegistrationKeys, remoteQueryObjectFromString, @@ -11,7 +12,6 @@ import { MedusaResponse, } from "../../../../../types/routing" import { defaultAdminDetailsReturnFields } from "../../../returns/query-config" -import { DeleteResponse, HttpTypes } from "@medusajs/types" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -22,7 +22,10 @@ export const POST = async ( const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY) const { result } = await confirmExchangeRequestWorkflow(req.scope).run({ - input: { exchange_id: id }, + input: { + exchange_id: id, + confirmed_by: req.auth_context.actor_id, + }, }) const queryObject = remoteQueryObjectFromString({ diff --git a/packages/medusa/src/api/admin/order-edits/[id]/confirm/route.ts b/packages/medusa/src/api/admin/order-edits/[id]/confirm/route.ts index 13994d05af..f4d95d4ab2 100644 --- a/packages/medusa/src/api/admin/order-edits/[id]/confirm/route.ts +++ b/packages/medusa/src/api/admin/order-edits/[id]/confirm/route.ts @@ -12,7 +12,10 @@ export const POST = async ( const { id } = req.params const { result } = await confirmOrderEditRequestWorkflow(req.scope).run({ - input: { order_id: id }, + input: { + order_id: id, + confirmed_by: req.auth_context.actor_id, + }, }) res.json({ diff --git a/packages/medusa/src/api/admin/order-edits/[id]/request/route.ts b/packages/medusa/src/api/admin/order-edits/[id]/request/route.ts index b0dc25cc8f..ab89b16228 100644 --- a/packages/medusa/src/api/admin/order-edits/[id]/request/route.ts +++ b/packages/medusa/src/api/admin/order-edits/[id]/request/route.ts @@ -12,7 +12,10 @@ export const POST = async ( const { id } = req.params const { result } = await requestOrderEditRequestWorkflow(req.scope).run({ - input: { order_id: id }, + input: { + order_id: id, + requested_by: req.auth_context.actor_id, + }, }) res.json({ diff --git a/packages/medusa/src/api/admin/orders/[id]/cancel/route.ts b/packages/medusa/src/api/admin/orders/[id]/cancel/route.ts index 95ce621784..ccb045640b 100644 --- a/packages/medusa/src/api/admin/orders/[id]/cancel/route.ts +++ b/packages/medusa/src/api/admin/orders/[id]/cancel/route.ts @@ -1,4 +1,5 @@ import { cancelOrderWorkflow } from "@medusajs/core-flows" +import { HttpTypes } from "@medusajs/types" import { ContainerRegistrationKeys, remoteQueryObjectFromString, @@ -7,7 +8,6 @@ import { AuthenticatedMedusaRequest, MedusaResponse, } from "../../../../../types/routing" -import { HttpTypes } from "@medusajs/types" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -19,6 +19,7 @@ export const POST = async ( const input = { order_id: req.params.id, + canceled_by: req.auth_context.actor_id, } await cancelOrderWorkflow(req.scope).run({ diff --git a/packages/medusa/src/api/admin/orders/[id]/changes/route.ts b/packages/medusa/src/api/admin/orders/[id]/changes/route.ts new file mode 100644 index 0000000000..a80e219c4b --- /dev/null +++ b/packages/medusa/src/api/admin/orders/[id]/changes/route.ts @@ -0,0 +1,32 @@ +import { HttpTypes } from "@medusajs/types" +import { + ContainerRegistrationKeys, + remoteQueryObjectFromString, +} from "@medusajs/utils" +import { + AuthenticatedMedusaRequest, + MedusaResponse, +} from "../../../../../types/routing" + +export const GET = async ( + req: AuthenticatedMedusaRequest, + res: MedusaResponse +) => { + const { id } = req.params + + const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY) + const queryObject = remoteQueryObjectFromString({ + entryPoint: "order_change", + variables: { + filters: { + ...req.filterableFields, + order_id: id, + }, + }, + fields: req.remoteQueryConfig.fields, + }) + + const order_changes = await remoteQuery(queryObject) + + res.status(200).json({ order_changes }) +} diff --git a/packages/medusa/src/api/admin/orders/[id]/fulfillments/[fulfillment_id]/cancel/route.ts b/packages/medusa/src/api/admin/orders/[id]/fulfillments/[fulfillment_id]/cancel/route.ts index f7f6325c26..9e8aab2127 100644 --- a/packages/medusa/src/api/admin/orders/[id]/fulfillments/[fulfillment_id]/cancel/route.ts +++ b/packages/medusa/src/api/admin/orders/[id]/fulfillments/[fulfillment_id]/cancel/route.ts @@ -1,4 +1,5 @@ import { cancelOrderFulfillmentWorkflow } from "@medusajs/core-flows" +import { AdditionalData, HttpTypes } from "@medusajs/types" import { ContainerRegistrationKeys, remoteQueryObjectFromString, @@ -8,7 +9,6 @@ import { MedusaResponse, } from "../../../../../../../types/routing" import { AdminOrderCancelFulfillmentType } from "../../../../validators" -import { AdditionalData, HttpTypes } from "@medusajs/types" export const POST = async ( req: AuthenticatedMedusaRequest< @@ -24,6 +24,7 @@ export const POST = async ( ...req.validatedBody, order_id: req.params.id, fulfillment_id: req.params.fulfillment_id, + canceled_by: req.auth_context.actor_id, } await cancelOrderFulfillmentWorkflow(req.scope).run({ diff --git a/packages/medusa/src/api/admin/orders/middlewares.ts b/packages/medusa/src/api/admin/orders/middlewares.ts index 8236a6df27..a6aa5cd319 100644 --- a/packages/medusa/src/api/admin/orders/middlewares.ts +++ b/packages/medusa/src/api/admin/orders/middlewares.ts @@ -8,6 +8,7 @@ import { AdminGetOrdersOrderParams, AdminGetOrdersParams, AdminOrderCancelFulfillment, + AdminOrderChanges, AdminOrderCreateFulfillment, AdminOrderCreateShipment, } from "./validators" @@ -33,6 +34,16 @@ export const adminOrderRoutesMiddlewares: MiddlewareRoute[] = [ ), ], }, + { + method: ["GET"], + matcher: "/admin/orders/:id/changes", + middlewares: [ + validateAndTransformQuery( + AdminOrderChanges, + QueryConfig.retrieveOrderChangesTransformQueryConfig + ), + ], + }, { method: ["GET"], matcher: "/admin/orders/:id/preview", diff --git a/packages/medusa/src/api/admin/orders/query-config.ts b/packages/medusa/src/api/admin/orders/query-config.ts index 9a60ced5ee..fe29de3cd6 100644 --- a/packages/medusa/src/api/admin/orders/query-config.ts +++ b/packages/medusa/src/api/admin/orders/query-config.ts @@ -53,6 +53,33 @@ export const defaultAdminRetrieveOrderFields = [ "*payment_collections.payments.refunds", ] +export const defaultAdminRetrieveOrderChangesFields = [ + "id", + "order_id", + "return_id", + "claim_id", + "exchange_id", + "version", + "change_type", + "*actions", + "description", + "status", + "internal_note", + "created_by", + "requested_by", + "requested_at", + "confirmed_by", + "confirmed_at", + "declined_by", + "declined_reason", + "metadata", + "declined_at", + "canceled_by", + "canceled_at", + "created_at", + "updated_at", +] + export const retrieveTransformQueryConfig = { defaultFields: defaultAdminRetrieveOrderFields, isList: false, @@ -63,3 +90,8 @@ export const listTransformQueryConfig = { defaultLimit: 20, isList: true, } + +export const retrieveOrderChangesTransformQueryConfig = { + defaultFields: defaultAdminRetrieveOrderChangesFields, + isList: false, +} diff --git a/packages/medusa/src/api/admin/orders/validators.ts b/packages/medusa/src/api/admin/orders/validators.ts index b572420670..532bca77b5 100644 --- a/packages/medusa/src/api/admin/orders/validators.ts +++ b/packages/medusa/src/api/admin/orders/validators.ts @@ -91,3 +91,13 @@ export const OrderCancelFulfillment = z.object({ export const AdminOrderCancelFulfillment = WithAdditionalData( OrderCancelFulfillment ) + +export const AdminOrderChanges = z.object({ + id: z.union([z.string(), z.array(z.string())]).optional(), + status: z.union([z.string(), z.array(z.string())]).optional(), + change_type: z.union([z.string(), z.array(z.string())]).optional(), + created_at: createOperatorMap().optional(), + updated_at: createOperatorMap().optional(), + deleted_at: createOperatorMap().optional(), +}) +export type AdminOrderChangesType = z.infer diff --git a/packages/medusa/src/api/admin/returns/[id]/receive/confirm/route.ts b/packages/medusa/src/api/admin/returns/[id]/receive/confirm/route.ts index 706a74178b..c2442230b2 100644 --- a/packages/medusa/src/api/admin/returns/[id]/receive/confirm/route.ts +++ b/packages/medusa/src/api/admin/returns/[id]/receive/confirm/route.ts @@ -1,4 +1,5 @@ import { confirmReturnReceiveWorkflow } from "@medusajs/core-flows" +import { HttpTypes } from "@medusajs/types" import { ContainerRegistrationKeys, remoteQueryObjectFromString, @@ -8,7 +9,6 @@ import { MedusaResponse, } from "../../../../../../types/routing" import { AdminPostReturnsConfirmRequestReqSchemaType } from "../../../validators" -import { HttpTypes } from "@medusajs/types" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -19,7 +19,10 @@ export const POST = async ( const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY) const { result } = await confirmReturnReceiveWorkflow(req.scope).run({ - input: { return_id: id }, + input: { + return_id: id, + confirmed_by: req.auth_context.actor_id, + }, }) const queryObject = remoteQueryObjectFromString({ diff --git a/packages/medusa/src/api/admin/returns/[id]/request/route.ts b/packages/medusa/src/api/admin/returns/[id]/request/route.ts index c58336e48f..3f8553eaf2 100644 --- a/packages/medusa/src/api/admin/returns/[id]/request/route.ts +++ b/packages/medusa/src/api/admin/returns/[id]/request/route.ts @@ -2,6 +2,7 @@ import { cancelReturnRequestWorkflow, confirmReturnRequestWorkflow, } from "@medusajs/core-flows" +import { DeleteResponse, HttpTypes } from "@medusajs/types" import { ContainerRegistrationKeys, remoteQueryObjectFromString, @@ -11,7 +12,6 @@ import { MedusaResponse, } from "../../../../../types/routing" import { AdminPostReturnsConfirmRequestReqSchemaType } from "../../validators" -import { DeleteResponse, HttpTypes } from "@medusajs/types" export const POST = async ( req: AuthenticatedMedusaRequest, @@ -22,7 +22,10 @@ export const POST = async ( const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY) const { result } = await confirmReturnRequestWorkflow(req.scope).run({ - input: { return_id: id }, + input: { + return_id: id, + confirmed_by: req.auth_context.actor_id, + }, }) const queryObject = remoteQueryObjectFromString({