feat: Add product export endpoint and a dummy workflow (#8178)

This commit is contained in:
Stevche Radevski
2024-07-18 15:19:15 +02:00
committed by GitHub
parent 1a472733ae
commit 8d083d6d0f
11 changed files with 469 additions and 457 deletions
@@ -0,0 +1,21 @@
import {
AuthenticatedMedusaRequest,
MedusaResponse,
} from "../../../../types/routing"
import { HttpTypes } from "@medusajs/types"
import { remapKeysForProduct } from "../helpers"
import { exportProductsWorkflow } from "@medusajs/core-flows"
export const POST = async (
req: AuthenticatedMedusaRequest<HttpTypes.AdminExportProductRequest>,
res: MedusaResponse<HttpTypes.AdminExportProductResponse>
) => {
const selectFields = remapKeysForProduct(req.remoteQueryConfig.fields ?? [])
const input = { select: selectFields, filter: req.filterableFields }
const { transaction } = await exportProductsWorkflow(req.scope).run({
input,
})
res.status(202).json({ workflow_id: transaction.transactionId })
}
@@ -16,6 +16,7 @@ import {
AdminCreateProductOption,
AdminCreateProductVariant,
AdminCreateVariantInventoryItem,
AdminExportProduct,
AdminGetProductOptionParams,
AdminGetProductOptionsParams,
AdminGetProductParams,
@@ -69,12 +70,23 @@ export const adminProductRoutesMiddlewares: MiddlewareRoute[] = [
),
],
},
{
method: ["POST"],
matcher: "/admin/products/export",
middlewares: [
validateAndTransformBody(AdminExportProduct),
validateAndTransformQuery(
AdminGetProductsParams,
QueryConfig.listProductQueryConfig
),
],
},
{
method: ["GET"],
matcher: "/admin/products/:id",
middlewares: [
unlessPath(
/.*\/products\/batch/,
/.*\/products\/(batch|export)/,
validateAndTransformQuery(
AdminGetProductParams,
QueryConfig.retrieveProductQueryConfig
@@ -87,11 +99,11 @@ export const adminProductRoutesMiddlewares: MiddlewareRoute[] = [
matcher: "/admin/products/:id",
middlewares: [
unlessPath(
/.*\/products\/batch/,
/.*\/products\/(batch|export)/,
validateAndTransformBody(AdminUpdateProduct)
),
unlessPath(
/.*\/products\/batch/,
/.*\/products\/(batch|export)/,
validateAndTransformQuery(
AdminGetProductParams,
QueryConfig.retrieveProductQueryConfig
@@ -104,7 +116,7 @@ export const adminProductRoutesMiddlewares: MiddlewareRoute[] = [
matcher: "/admin/products/:id",
middlewares: [
unlessPath(
/.*\/products\/batch/,
/.*\/products\/(batch|export)/,
validateAndTransformQuery(
AdminGetProductParams,
QueryConfig.retrieveProductQueryConfig
@@ -268,6 +268,9 @@ export const AdminBatchUpdateProduct = AdminUpdateProduct.extend({
id: z.string(),
})
export type AdminExportProductType = z.infer<typeof AdminExportProduct>
export const AdminExportProduct = z.object({})
// TODO: Handle in create and update product once ready
// @IsOptional()
// @Type(() => ProductProductCategoryReq)