chore(medusa, core-flows): receive item return request (#8172)

What:
* `POST /admin/returns/:id/receive-items`
* `POST /admin/returns/:id/receive-items/:action_id`
* `DELETE /admin/returns/:id/receive-items/:action_id`
* `POST /admin/returns/:id/dismiss-items`
* `POST /admin/returns/:id/dismiss-items/:action_id`
* `DELETE /admin/returns/:id/dismiss-items/:action_id`
* `POST /admin/returns/:id/receive/confirm`

CLOSES: CC-190, CC-191, CC-192, CC-193, CC-195, CC-196, CC-197

* Inventory management isn't included yet. Will add it in a next PR
This commit is contained in:
Carlos R. L. Rodrigues
2024-07-18 14:46:34 +00:00
committed by GitHub
parent 8d083d6d0f
commit 535832b692
26 changed files with 1032 additions and 20 deletions
@@ -0,0 +1,85 @@
import {
removeItemReturnActionWorkflow,
updateReceiveItemReturnRequestWorkflow,
} from "@medusajs/core-flows"
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../../../../types/routing"
import { AdminPostReturnsDismissItemsActionReqSchemaType } from "../../../validators"
export const POST = async (
req: AuthenticatedMedusaRequest<AdminPostReturnsDismissItemsActionReqSchemaType>,
res: MedusaResponse
) => {
const { id, action_id } = req.params
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const { result } = await updateReceiveItemReturnRequestWorkflow(
req.scope
).run({
input: {
data: { ...req.validatedBody },
return_id: id,
action_id,
},
})
const queryObject = remoteQueryObjectFromString({
entryPoint: "return",
variables: {
id,
filters: {
...req.filterableFields,
},
},
fields: req.remoteQueryConfig.fields,
})
const [orderReturn] = await remoteQuery(queryObject)
res.json({
order_preview: result,
return: orderReturn,
})
}
export const DELETE = async (
req: AuthenticatedMedusaRequest,
res: MedusaResponse
) => {
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const { id, action_id } = req.params
const { result: orderPreview } = await removeItemReturnActionWorkflow(
req.scope
).run({
input: {
return_id: id,
action_id,
},
})
const queryObject = remoteQueryObjectFromString({
entryPoint: "return",
variables: {
id,
filters: {
...req.filterableFields,
},
},
fields: req.remoteQueryConfig.fields,
})
const [orderReturn] = await remoteQuery(queryObject)
res.json({
order_preview: orderPreview,
return: orderReturn,
})
}
@@ -0,0 +1,41 @@
import { dismissItemReturnRequestWorkflow } from "@medusajs/core-flows"
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../../../types/routing"
import { AdminPostReturnsReceiveItemsReqSchemaType } from "../../validators"
export const POST = async (
req: AuthenticatedMedusaRequest<AdminPostReturnsReceiveItemsReqSchemaType>,
res: MedusaResponse
) => {
const { id } = req.params
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const { result } = await dismissItemReturnRequestWorkflow(req.scope).run({
input: { ...req.validatedBody, return_id: id },
})
const queryObject = remoteQueryObjectFromString({
entryPoint: "return",
variables: {
id,
filters: {
...req.filterableFields,
},
},
fields: req.remoteQueryConfig.fields,
})
const [orderReturn] = await remoteQuery(queryObject)
res.json({
order_preview: result,
return: orderReturn,
})
}
@@ -0,0 +1,85 @@
import {
removeItemReturnActionWorkflow,
updateReceiveItemReturnRequestWorkflow,
} from "@medusajs/core-flows"
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../../../../types/routing"
import { AdminPostReturnsReceiveItemsActionReqSchemaType } from "../../../validators"
export const POST = async (
req: AuthenticatedMedusaRequest<AdminPostReturnsReceiveItemsActionReqSchemaType>,
res: MedusaResponse
) => {
const { id, action_id } = req.params
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const { result } = await updateReceiveItemReturnRequestWorkflow(
req.scope
).run({
input: {
data: { ...req.validatedBody },
return_id: id,
action_id,
},
})
const queryObject = remoteQueryObjectFromString({
entryPoint: "return",
variables: {
id,
filters: {
...req.filterableFields,
},
},
fields: req.remoteQueryConfig.fields,
})
const [orderReturn] = await remoteQuery(queryObject)
res.json({
order_preview: result,
return: orderReturn,
})
}
export const DELETE = async (
req: AuthenticatedMedusaRequest,
res: MedusaResponse
) => {
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const { id, action_id } = req.params
const { result: orderPreview } = await removeItemReturnActionWorkflow(
req.scope
).run({
input: {
return_id: id,
action_id,
},
})
const queryObject = remoteQueryObjectFromString({
entryPoint: "return",
variables: {
id,
filters: {
...req.filterableFields,
},
},
fields: req.remoteQueryConfig.fields,
})
const [orderReturn] = await remoteQuery(queryObject)
res.json({
order_preview: orderPreview,
return: orderReturn,
})
}
@@ -0,0 +1,41 @@
import { receiveItemReturnRequestWorkflow } from "@medusajs/core-flows"
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../../../types/routing"
import { AdminPostReturnsReceiveItemsReqSchemaType } from "../../validators"
export const POST = async (
req: AuthenticatedMedusaRequest<AdminPostReturnsReceiveItemsReqSchemaType>,
res: MedusaResponse
) => {
const { id } = req.params
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const { result } = await receiveItemReturnRequestWorkflow(req.scope).run({
input: { ...req.validatedBody, return_id: id },
})
const queryObject = remoteQueryObjectFromString({
entryPoint: "return",
variables: {
id,
filters: {
...req.filterableFields,
},
},
fields: req.remoteQueryConfig.fields,
})
const [orderReturn] = await remoteQuery(queryObject)
res.json({
order_preview: result,
return: orderReturn,
})
}
@@ -0,0 +1,41 @@
import { confirmReturnReceiveWorkflow } from "@medusajs/core-flows"
import {
ContainerRegistrationKeys,
remoteQueryObjectFromString,
} from "@medusajs/utils"
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../../../../types/routing"
import { AdminPostReturnsConfirmRequestReqSchemaType } from "../../../validators"
export const POST = async (
req: AuthenticatedMedusaRequest<AdminPostReturnsConfirmRequestReqSchemaType>,
res: MedusaResponse
) => {
const { id } = req.params
const remoteQuery = req.scope.resolve(ContainerRegistrationKeys.REMOTE_QUERY)
const { result } = await confirmReturnReceiveWorkflow(req.scope).run({
input: { return_id: id },
})
const queryObject = remoteQueryObjectFromString({
entryPoint: "return",
variables: {
id,
filters: {
...req.filterableFields,
},
},
fields: req.remoteQueryConfig.fields,
})
const [orderReturn] = await remoteQuery(queryObject)
res.json({
order_preview: result,
return: orderReturn,
})
}
@@ -1,5 +1,5 @@
import {
removeRequestItemReturnWorkflow,
removeItemReturnActionWorkflow,
updateRequestItemReturnWorkflow,
} from "@medusajs/core-flows"
import {
@@ -55,7 +55,7 @@ export const DELETE = async (
const { id, action_id } = req.params
const { result: orderPreview } = await removeRequestItemReturnWorkflow(
const { result: orderPreview } = await removeItemReturnActionWorkflow(
req.scope
).run({
input: {
@@ -5,6 +5,7 @@ import * as QueryConfig from "./query-config"
import {
AdminGetOrdersOrderParams,
AdminGetOrdersParams,
AdminPostReceiveReturnItemsReqSchema,
AdminPostReceiveReturnsReqSchema,
AdminPostReturnsConfirmRequestReqSchema,
AdminPostReturnsReqSchema,
@@ -142,4 +143,79 @@ export const adminReturnRoutesMiddlewares: MiddlewareRoute[] = [
matcher: "/admin/returns/:id/receive",
middlewares: [],
},
{
method: ["POST"],
matcher: "/admin/returns/:id/receive/confirm",
middlewares: [
validateAndTransformBody(AdminPostReturnsConfirmRequestReqSchema),
validateAndTransformQuery(
AdminGetOrdersOrderParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
{
method: ["POST"],
matcher: "/admin/returns/:id/receive-items",
middlewares: [
validateAndTransformBody(AdminPostReceiveReturnItemsReqSchema),
validateAndTransformQuery(
AdminGetOrdersOrderParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
{
method: ["POST"],
matcher: "/admin/returns/:id/receive-items/:action_id",
middlewares: [
validateAndTransformBody(AdminPostReturnsRequestItemsActionReqSchema),
validateAndTransformQuery(
AdminGetOrdersOrderParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
{
method: ["DELETE"],
matcher: "/admin/returns/:id/receive-items/:action_id",
middlewares: [
validateAndTransformQuery(
AdminGetOrdersOrderParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
{
method: ["POST"],
matcher: "/admin/returns/:id/dismiss-items",
middlewares: [
validateAndTransformBody(AdminPostReceiveReturnItemsReqSchema),
validateAndTransformQuery(
AdminGetOrdersOrderParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
{
method: ["POST"],
matcher: "/admin/returns/:id/dismiss-items/:action_id",
middlewares: [
validateAndTransformBody(AdminPostReturnsRequestItemsActionReqSchema),
validateAndTransformQuery(
AdminGetOrdersOrderParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
{
method: ["DELETE"],
matcher: "/admin/returns/:id/dismiss-items/:action_id",
middlewares: [
validateAndTransformQuery(
AdminGetOrdersOrderParams,
QueryConfig.retrieveTransformQueryConfig
),
],
},
]
@@ -140,6 +140,21 @@ export type AdminPostReturnsRequestItemsReqSchemaType = z.infer<
typeof AdminPostReturnsRequestItemsReqSchema
>
export const AdminPostReturnsReceiveItemsReqSchema = z.object({
items: z.array(
z.object({
id: z.string(),
quantity: z.number(),
description: z.string().optional(),
internal_note: z.string().optional(),
})
),
})
export type AdminPostReturnsReceiveItemsReqSchemaType = z.infer<
typeof AdminPostReturnsReceiveItemsReqSchema
>
export const AdminPostReturnsRequestItemsActionReqSchema = z.object({
quantity: z.number().optional(),
internal_note: z.string().nullish().optional(),
@@ -151,6 +166,24 @@ export type AdminPostReturnsRequestItemsActionReqSchemaType = z.infer<
typeof AdminPostReturnsRequestItemsActionReqSchema
>
export const AdminPostReturnsReceiveItemsActionReqSchema = z.object({
quantity: z.number().optional(),
internal_note: z.string().nullish().optional(),
})
export type AdminPostReturnsReceiveItemsActionReqSchemaType = z.infer<
typeof AdminPostReturnsReceiveItemsActionReqSchema
>
export const AdminPostReturnsDismissItemsActionReqSchema = z.object({
quantity: z.number().optional(),
internal_note: z.string().nullish().optional(),
})
export type AdminPostReturnsDismissItemsActionReqSchemaType = z.infer<
typeof AdminPostReturnsDismissItemsActionReqSchema
>
export const AdminPostReturnsConfirmRequestReqSchema = z.object({
no_notification: z.boolean().optional(),
})