feat(cart): POST /store/carts (#6273)

Depends on #6262
This commit is contained in:
Oli Juhl
2024-02-05 15:15:15 +00:00
committed by GitHub
parent 884428a1b5
commit ede221d4f7
13 changed files with 199 additions and 3 deletions
@@ -1,7 +1,7 @@
import { transformQuery } from "../../../api/middlewares"
import { transformBody, transformQuery } from "../../../api/middlewares"
import { MiddlewareRoute } from "../../../loaders/helpers/routing/types"
import * as QueryConfig from "./query-config"
import { StoreGetCartsCartParams } from "./validators"
import { StoreGetCartsCartParams, StorePostCartReq } from "./validators"
export const storeCartRoutesMiddlewares: MiddlewareRoute[] = [
{
@@ -14,4 +14,9 @@ export const storeCartRoutesMiddlewares: MiddlewareRoute[] = [
),
],
},
{
method: ["POST"],
matcher: "/store/carts",
middlewares: [transformBody(StorePostCartReq)],
},
]
@@ -0,0 +1,23 @@
import { createCartsWorkflow } from "@medusajs/core-flows"
import { CreateCartDTO } from "@medusajs/types"
import { MedusaRequest, MedusaResponse } from "../../../types/routing"
export const POST = async (req: MedusaRequest, res: MedusaResponse) => {
const createCartWorkflow = createCartsWorkflow(req.scope)
const cartData = [
{
...(req.validatedBody as CreateCartDTO),
},
]
const { result, errors } = await createCartWorkflow.run({
input: { cartData },
throwOnError: false,
})
if (Array.isArray(errors) && errors[0]) {
throw errors[0].error
}
res.status(200).json({ cart: result[0] })
}
@@ -1,3 +1,55 @@
import { Type } from "class-transformer"
import {
IsArray,
IsInt,
IsNotEmpty,
IsObject,
IsOptional,
IsString,
ValidateNested,
} from "class-validator"
import { FindParams } from "../../../types/common"
export class StoreGetCartsCartParams extends FindParams {}
export class Item {
@IsNotEmpty()
@IsString()
variant_id: string
@IsNotEmpty()
@IsInt()
quantity: number
}
export class StorePostCartReq {
@IsOptional()
@IsString()
region_id?: string
@IsOptional()
@IsString()
customer_id?: string
@IsOptional()
@IsString()
email?: string
@IsOptional()
@IsString()
currency_code?: string
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => Item)
items?: Item[]
@IsString()
@IsOptional()
sales_channel_id?: string
@IsObject()
@IsOptional()
metadata?: Record<string, unknown>
}