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:
Riqwan Thamir
2024-05-10 07:53:56 +00:00
committed by GitHub
parent 489a54e1fb
commit 9a14aeebcf
31 changed files with 1033 additions and 939 deletions
@@ -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>