feat(core-flows,types,medusa): API to add promotions to campaign (#7277)
what: - adds an API to add promotions to campaign - reworks module to perform atomic actions
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "../../../../../types/routing"
|
||||
|
||||
import { addOrRemoveCampaignPromotionsWorkflow } from "@medusajs/core-flows"
|
||||
import { LinkMethodRequest } from "@medusajs/types/src"
|
||||
import { refetchCampaign } from "../../helpers"
|
||||
|
||||
export const POST = async (
|
||||
req: AuthenticatedMedusaRequest<LinkMethodRequest>,
|
||||
res: MedusaResponse
|
||||
) => {
|
||||
const { id } = req.params
|
||||
const { add, remove } = req.validatedBody
|
||||
const { errors } = await addOrRemoveCampaignPromotionsWorkflow(req.scope).run(
|
||||
{
|
||||
input: { id, add, remove },
|
||||
throwOnError: false,
|
||||
}
|
||||
)
|
||||
|
||||
if (Array.isArray(errors) && errors[0]) {
|
||||
throw errors[0].error
|
||||
}
|
||||
|
||||
const campaign = await refetchCampaign(
|
||||
req.params.id,
|
||||
req.scope,
|
||||
req.remoteQueryConfig.fields
|
||||
)
|
||||
|
||||
res.status(200).json({ campaign })
|
||||
}
|
||||
@@ -1,14 +1,15 @@
|
||||
import * as QueryConfig from "./query-config"
|
||||
import { MiddlewareRoute } from "../../../loaders/helpers/routing/types"
|
||||
import { authenticate } from "../../../utils/authenticate-middleware"
|
||||
import { validateAndTransformBody } from "../../utils/validate-body"
|
||||
import { validateAndTransformQuery } from "../../utils/validate-query"
|
||||
import { createLinkBody } from "../../utils/validators"
|
||||
import * as QueryConfig from "./query-config"
|
||||
import {
|
||||
AdminCreateCampaign,
|
||||
AdminGetCampaignParams,
|
||||
AdminGetCampaignsParams,
|
||||
AdminUpdateCampaign,
|
||||
} from "./validators"
|
||||
import { validateAndTransformBody } from "../../utils/validate-body"
|
||||
|
||||
export const adminCampaignRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
{
|
||||
@@ -57,4 +58,15 @@ export const adminCampaignRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
method: ["POST"],
|
||||
matcher: "/admin/campaigns/:id/promotions",
|
||||
middlewares: [
|
||||
validateAndTransformBody(createLinkBody()),
|
||||
validateAndTransformQuery(
|
||||
AdminGetCampaignParams,
|
||||
QueryConfig.retrieveTransformQueryConfig
|
||||
),
|
||||
],
|
||||
},
|
||||
]
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import * as QueryConfig from "./query-config"
|
||||
import { MiddlewareRoute } from "../../../loaders/helpers/routing/types"
|
||||
import { authenticate } from "../../../utils/authenticate-middleware"
|
||||
import { validateAndTransformBody } from "../../utils/validate-body"
|
||||
import { validateAndTransformQuery } from "../../utils/validate-query"
|
||||
import { createBatchBody } from "../../utils/validators"
|
||||
import * as QueryConfig from "./query-config"
|
||||
import {
|
||||
AdminCreatePromotion,
|
||||
AdminCreatePromotionRule,
|
||||
@@ -13,8 +15,6 @@ import {
|
||||
AdminUpdatePromotion,
|
||||
AdminUpdatePromotionRule,
|
||||
} from "./validators"
|
||||
import { validateAndTransformBody } from "../../utils/validate-body"
|
||||
import { createBatchBody } from "../../utils/validators"
|
||||
|
||||
export const adminPromotionRoutesMiddlewares: MiddlewareRoute[] = [
|
||||
{
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import { createPromotionsWorkflow } from "@medusajs/core-flows"
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "../../../types/routing"
|
||||
import {
|
||||
ContainerRegistrationKeys,
|
||||
remoteQueryObjectFromString,
|
||||
} from "@medusajs/utils"
|
||||
import {
|
||||
AuthenticatedMedusaRequest,
|
||||
MedusaResponse,
|
||||
} from "../../../types/routing"
|
||||
import { refetchPromotion } from "./helpers"
|
||||
import {
|
||||
AdminCreatePromotionType,
|
||||
AdminGetPromotionsParamsType,
|
||||
} from "./validators"
|
||||
import { refetchPromotion } from "./helpers"
|
||||
|
||||
export const GET = async (
|
||||
req: AuthenticatedMedusaRequest<AdminGetPromotionsParamsType>,
|
||||
|
||||
@@ -24,17 +24,20 @@ export type AdminGetPromotionsParamsType = z.infer<
|
||||
export const AdminGetPromotionsParams = createFindParams({
|
||||
limit: 50,
|
||||
offset: 0,
|
||||
}).merge(
|
||||
z.object({
|
||||
q: z.string().optional(),
|
||||
code: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
created_at: createOperatorMap().optional(),
|
||||
updated_at: createOperatorMap().optional(),
|
||||
deleted_at: createOperatorMap().optional(),
|
||||
$and: z.lazy(() => AdminGetPromotionsParams.array()).optional(),
|
||||
$or: z.lazy(() => AdminGetPromotionsParams.array()).optional(),
|
||||
})
|
||||
)
|
||||
})
|
||||
.merge(
|
||||
z.object({
|
||||
q: z.string().optional(),
|
||||
code: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
campaign_id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
created_at: createOperatorMap().optional(),
|
||||
updated_at: createOperatorMap().optional(),
|
||||
deleted_at: createOperatorMap().optional(),
|
||||
$and: z.lazy(() => AdminGetPromotionsParams.array()).optional(),
|
||||
$or: z.lazy(() => AdminGetPromotionsParams.array()).optional(),
|
||||
})
|
||||
)
|
||||
.strict()
|
||||
|
||||
export type AdminGetPromotionRuleParamsType = z.infer<
|
||||
typeof AdminGetPromotionRuleParams
|
||||
@@ -152,7 +155,6 @@ export const AdminCreateCampaign = z.object({
|
||||
budget: CreateCampaignBudget.optional(),
|
||||
starts_at: z.coerce.date().optional(),
|
||||
ends_at: z.coerce.date().optional(),
|
||||
promotions: z.array(z.object({ id: z.string() })).optional(),
|
||||
})
|
||||
|
||||
export type AdminCreatePromotionType = z.infer<typeof AdminCreatePromotion>
|
||||
|
||||
Reference in New Issue
Block a user